
版權(quán)申明
原創(chuàng)文章:本博所有原創(chuàng)文章,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處,并聯(lián)系本人取得授權(quán)。
版權(quán)郵箱地址:banquan@mrdwy.com
SpringIOC啟動(dòng)順序
加載并且保存Spring配置文件路徑信息然后保存到configLocation中
刷新Spring上下文環(huán)境
創(chuàng)建并且載入DefaultListableBeanFactory(即BeanFactory)
根據(jù)DefaultListableBeanFactory創(chuàng)建XMLBeanDefinitionReader,用于后面讀取xml配置文件信息
創(chuàng)建BeanDefinitionDelegate代理類,用于解析xml配置信息
解析xml中配置的<import>、<bean>、<beans>、<alias>等不同的標(biāo)簽信息,以便于可以使用不同的解析器進(jìn)行解析
通過XMLBeanDefinitionReader結(jié)合location路徑信息讀取Resources資源信息
使用BeanDefinitionDelegate代理類解析Bean元素并且依次進(jìn)行實(shí)例化操作,實(shí)例化完畢之后將Bean信息注冊(cè)(put)到BeanDefinitionMap中以便于可以下次繼續(xù)使用
大表在生產(chǎn)環(huán)境不停機(jī)數(shù)據(jù)遷移
1、業(yè)務(wù)系統(tǒng)實(shí)現(xiàn)雙寫;
2、分批次同步歷史數(shù)據(jù);
3、同步完成后進(jìn)行數(shù)據(jù)比對(duì);
具體的實(shí)現(xiàn)沒想好,預(yù)計(jì)另外開一篇文章來寫了,暫時(shí)這邊留個(gè)坑
檢查java代碼單元測(cè)試覆蓋率
可以使用Sonar,這個(gè)我用過居然不記得了??
Mock框架
這個(gè)直接用EasyMock 、Mockito之類就好了,我忘記名字了,沒答上來??
如何創(chuàng)建線程,有哪些方法
這個(gè)簡單 可以new Thread()、或者實(shí)現(xiàn)Runnable接口,然后new 這個(gè)實(shí)現(xiàn)類,一般推薦用第二種,不知道為啥面試的時(shí)候鬼使神差的去談到了線程池,又忘記線程池是哪個(gè)類了,ExecutorService!??!
然后創(chuàng)建線程池簡單就直接用Executors,不過這個(gè)工具類的幾種實(shí)現(xiàn)都有各自的局限性,推薦手動(dòng)創(chuàng)建線程池,例如
public final static ExecutorService POOL = new ScheduledThreadPoolExecutor(INIT_QUEUE_NUM, new BasicThreadFactory.Builder().namingPattern("thead_pool-%d").daemon(true).build());
反射如何執(zhí)行方法
method.invoke() 這個(gè)記錯(cuò)了,記成excute了??
設(shè)計(jì)理發(fā)店排隊(duì)程序使用設(shè)計(jì)模式
這個(gè)問題沒想太清楚,其實(shí)功能實(shí)現(xiàn)很簡單,但是具體用到哪個(gè)設(shè)計(jì)模式一下沒反應(yīng)過來,大概是想要我用組合模式吧,題目大概是說一個(gè)理發(fā)店有三個(gè)理發(fā)師,然后最多允許七位顧客來排隊(duì),多余的顧客謝絕接待這樣子,這邊需要使用一個(gè)隊(duì)列作為顧客池,容量設(shè)置最大值7,新增顧客超過容量則需要向客戶端報(bào)錯(cuò),理發(fā)店需要自動(dòng)工作,分配顧客池的顧客給三個(gè)理發(fā)師,因此理發(fā)師需要有個(gè)正忙的狀態(tài),分配的工具類會(huì)根據(jù)各個(gè)理發(fā)師的狀態(tài)分配顧客給理發(fā)師,具體的設(shè)計(jì)可能再挖一個(gè)坑另開一篇文章寫了,這里暫時(shí)只記錄??
ps.因?yàn)樾枰謱懘a理發(fā)店,所以有一些類、方法等命名當(dāng)然要用到英文,理發(fā)店。。英文是barber shop,嗯,我寫成了cut hair house??
Java性能問題診斷工具
嗯,大概有jps、jstack、jmap、jstat、jhat、hprof、jvisualvm等jvm自帶工具,另外有第三方工具JMC、JFR 、Tprofiler、Jprofiler、Arthas等
MySQL查詢數(shù)據(jù)庫表名查詢表字段命令
> use database;
> show tables;
> desc table_name;
一個(gè)JavaBean,只提供了get方法,沒有提供set方法,如何修改私有屬性的值
我覺得這個(gè)題目比較偏門,當(dāng)時(shí)沒答出來,百度了一番,是可以利用反射來實(shí)現(xiàn)修改類屬性的訪問權(quán)限,代碼樣例
// 創(chuàng)建一個(gè)JavaBean類的對(duì)象
PrivateField privateField = new PrivateField();
// 獲取對(duì)象的Class
Class<?> clazz = privateField.getClass();
// 獲取指定名字的私有域
Field field = clazz.getDeclaredField("username");
// 設(shè)置壓制訪問類型檢查,只有這樣,才能獲取和設(shè)置某個(gè)具體類的Field對(duì)應(yīng)的值。
// 參數(shù)為 true時(shí) 則指示反射的對(duì)象在使用時(shí)應(yīng)該取消 Java 語言訪問檢查。值為 false 則指示反射的對(duì)象應(yīng)該實(shí)施 Java 語言訪問檢查。
// 如果為true是,能夠正常運(yùn)行,如果為false則會(huì)拋出異常信息:java.lang.IllegalAccessException
field.setAccessible(true);
System.out.println(field.get(privateField));
// 設(shè)置私有域的值
field.set(privateField, "123456");
// 輸出被改變的屬性值
System.out.println(field.get(privateField));
}
其它還有很多暫時(shí)想不起來了,想起來再更新吧,晚安、好夢(mèng)。