第一篇:關(guān)于JAVA一些問題 程序總結(jié)
關(guān)于JAVA一些問題 程序總結(jié)
public interface SinterFace { public final static String intstr=“hello is interface”;public abstract void nostat();}
public class Useinter implements SinterFace {
int inter = 5;static String str = “hello is class”;public double dou = 1.0;
public void nostat(){ System.out.println(“is no static method”);}
public static void stat(){ System.out.println(“is static method”);} }
public class Main {
public static void main(String[] args){
System.out.println(“靜態(tài)變量方法在類實例化之前都可以調(diào)用:”);Useinter.stat();System.out.println(Useinter.str +“n”);
System.out.println(“非靜態(tài)變量方法要在類實例化之后才可以調(diào)用:”);Useinter useinter = new Useinter();useinter.nostat();System.out.println(useinter.dou);System.out.println(“類中沒聲明是private的變量默認(rèn)都是public”);System.out.println(useinter.inter);
System.out.println(“n類里的靜態(tài)變量可以被實例調(diào)用:”);System.out.println(useinter.str +“n”);
System.out.println(“接口里的靜態(tài)變量可以直接被調(diào)用:”);System.out.println(SinterFace.intstr);} }
第二篇:java程序轉(zhuǎn)exe過程總結(jié)
首先要下載三個東西。Fat Jar插件、exe4j 軟件、Inno Setup軟件
下載地址:sourceforge.net/projects/fjep/files/ 點擊“Download net.sf.fjep.fatjar_0.0.31.zip(246.3 kB)”即可下載。(1)Fat Jar : Eclipse可以安裝一個叫Fat Jar的插件,用這個插件打包非常方便,可以直接將JAVA項目打包成可執(zhí)行JAR包。
1.下載后的文件如下圖所示。
2.打開下載會的ZIP包,將里面的Jar解壓到Eclipse安裝路徑下的plugins文件夾中。
3.如果Eclipse已經(jīng)啟動需要重啟一下,沒有啟動直接打開Eclipse即可。
4.打開Eclipse之后,右擊要打開的工程,出現(xiàn)一個“Build Fat Jar”,點擊它。
5.如果沒有出現(xiàn)它,可以選擇“Export”,從彈出的對話框中選擇“other”-->“Fat Jar Exporter”,點擊Next,選擇要打包的項目,再點擊Next。
6.出現(xiàn)如下圖這樣的窗口。選中Use extern jar-name,這樣能將生成的Jar保存到工程外的路徑。
7.選擇Main-Class,點擊Browse找到可運行的主類。
8.選擇one-jar,點擊Accept。
9.點擊Next進(jìn)入下一步,出現(xiàn)下面的界面,直接點擊Finish即可。
打包完成,點擊OK即可。去剛剛指定的位置找到Jar,雙擊即可運行。(com.simontuffs.onejar.Boot 就是你的入口程序,下面轉(zhuǎn)成exe時會用到)
(2)exe4j 軟件+ Inno Setup軟件
對于作Java桌面應(yīng)用來說,比較煩人的就是安裝部署問題,客戶端是否安裝有jre、jre版本問 題、jre去哪下載、如何用jre啟動你的Java應(yīng)用?不要說剛接觸電腦的人,就算是比較熟悉電腦,如果沒有接觸過Java,面對一個Java應(yīng)用,如何在Windows下啟動它,估計都會折騰半天。
最好的方式莫過于帶著JRE,讓用戶輕松點擊就能運行。帶著JRE運行,JRE的大小應(yīng)該是最讓 人頭疼的,我默認(rèn)安裝的jre6大小達(dá)到80M,而程序只有200-300k左右,感覺非常不合理,分發(fā)與 網(wǎng)絡(luò)傳輸過程也會大受影響!因此針對自己程序精簡jre非常必要,關(guān)于jre的精簡問題請參考其他 文章,本文在此不做說明。
針對windows平臺,讓用戶一鍵式安裝,雙擊使用,使用工具exe4j+InnoSetup,這兩個工具都 可以在網(wǎng)上找到,下面通過一個實例進(jìn)行說明。
第一步:將自己的java程序打包成“可執(zhí)行的jar包”,可以采用eclipse等IDE工具打包。下面 以eclipse為例進(jìn)行說明:
上面截圖應(yīng)該注意的是:第一步是要求你選擇你的java程序的引導(dǎo)類,下面是輸出路徑,類文 件的處理上我們選擇第二種,即將該java程序所需的jar包一起打包進(jìn)來,最后點擊finish。完成后 最好雙擊一下導(dǎo)出的可執(zhí)行jar包,確??烧_運行。
第二步:準(zhǔn)備打包文件夾。
1.在任意路徑下新建文件夾,文件夾的命名可以使用項目的名字,如此例的項目名takephoto。將在第一步中生成的jar包復(fù)制進(jìn)來。
2.將精簡以后的jre文件包復(fù)制進(jìn)來,如果尚不掌握精簡方法,可以暫時采用安裝的龐大jre,如
下圖:
將上圖的jre復(fù)制進(jìn)去即可。
3.在takephoto文件夾下新建lib文件夾,將項目所需的jar包,如數(shù)據(jù)庫驅(qū)動等復(fù)制進(jìn)去。4.可以在準(zhǔn)備一個ico文件夾,存放一個或幾個ico圖標(biāo)或圖片。經(jīng)以上幾步后,文件結(jié)構(gòu)應(yīng)該是:
第三步:使用exe4j工具生成exe文件:
直接下一步,這一步
要求選擇類型,我們選擇第一個,這樣可以保證程序仍具有跨平臺的特性。如果選擇第二個,可以 把程序完全編譯成exe文件,可以更好的保護(hù)你的程序不被反編譯。
上面是設(shè)置你的程序的短文件名,源文件夾路徑(如我的:E:takephoto),以及要生成的exe文件的存 放目錄,exe存放目錄必須指定到源文件夾下,這里我把它指定為E:takephoto的根目錄下。
上面是給我們即將生成的exe文件起一個名字,如我的“takephoto”,還可以給它指定一個ico類型的 圖標(biāo),其它按默認(rèn)就可以了,在指定ico圖標(biāo)路徑的時候建議采用絕對路徑,因為在測試的時候發(fā)現(xiàn)
如果采用相對路徑在生成exe文件的時候提示出錯,且經(jīng)測試采用絕對路徑也能保證程序的準(zhǔn)確性。
上面是要求把程序中所用到的類路徑添加上去。然后指定程序的啟動類,其它如果沒有必要的話,則按默認(rèn)即可,點擊+號添加類路徑,注意,要首先添加類路徑再指定啟動類,類路徑包含兩部分,一是我們在第一步生成的可執(zhí)行jar包,二是程序所需的其他jar包路徑,即lib文件夾路徑。如圖:
上面是把生成的可執(zhí)行jar包路徑添加進(jìn)去了,下面添加lib文件夾路徑。注意,全部采用相對路徑 如.takephoto.jar,.lib。
在添加lib文件夾
路徑的時候選擇scandirectory。
上面是
把lib文件夾路徑添加進(jìn)去了。下面就可以指定啟動類了。
先選擇我們的程序所需要的jre版本,然后便是選擇我們自帶的jre了,這一步不是必須,但是為了更好的分發(fā)程序,我們自帶了jre,所以必須把我們自帶的jre指定為首選的運行環(huán)境,如圖選擇:接下來
Searchsequence
默認(rèn)情況下程序會去系統(tǒng)的注冊表,環(huán)境變量及相關(guān)的目錄查找jre,因為我們只需要自帶的jre,所以 這里我把默認(rèn)的選項移除了,然后添加我們自己的jre所在的目錄路徑,點+號開始:
均采用默認(rèn)即可:
下面的
上面的
可以添加一個啟動畫面,如指定一個gif圖片。
好了exe
文件已經(jīng)生成完畢了。點擊exit退出即可,退出時提示配置已經(jīng)改變是否保存,可以保存,保存后 為takephoto.exe4j,下次可以直接雙擊這個文件進(jìn)行編輯我們上面的配置。經(jīng)過以上操作,文件夾結(jié)構(gòu)變?yōu)椋?/p>
雙擊一下takephoto.exe也可以執(zhí)行了。
第三步:利用InnoSetup工具進(jìn)行壓縮打包,做成安裝程序。
可以采用家腳本向?qū)В部梢詫⑸厦娈嬅骊P(guān)掉,直接“文件-新建”即可。
上面是設(shè)置一些信息,比如程序名稱,版本信息,發(fā)布者,應(yīng)用程序官方網(wǎng)站。
這一步點擊瀏覽選擇主執(zhí)行文件即我們第二步生成的exe執(zhí)行文件:
下一步是添加文件夾:
點擊是即可 菜單文件夾名稱,根據(jù)需求進(jìn)行勾選。下面的一直點擊下一步即可
上面是指定開始
上面可以自定義輸出文件夾,生成的安裝包文件名默認(rèn)是setup,自定義安裝程序圖標(biāo),安裝密碼。
本名稱。點擊保存之后立即進(jìn)行如下編譯:
指定腳
編譯完成之后,文件的默認(rèn)輸出位置在源文件夾下的程序自動創(chuàng)建output文件夾中。最終文件夾的結(jié)構(gòu)是:
以上便是我們需要的安裝程序。值此全部結(jié)束,如有錯誤敬請指正!
2011年3月25日星期五22:11:25
注意:
(1)生成的exe程序如果發(fā)生如下錯誤:
可用下面的方法解決:
exe4j是個很好的打包利器,官方下載地址:http://004km.cn/download/exe4j/files.php
如果你不注冊,打包好的軟件每次啟動都會報:this executable was created with an evaluation version of exe4j,特?zé)┤耍宰詈孟螺dexe4j的破解版,但是有注冊碼,官方軟件畢竟比破解版好用,下面的注冊碼經(jīng)測試,均可以使用.用戶名和公司名可隨便填 A-XVK258563F-1p4lv7mg7sav
A-XVK209982F-1y0i3h4ywx2h1
A-XVK267351F-dpurrhnyarva
A-XVK204432F-1kkoilo1jy2h3r
A-XVK246130F-1l7msieqiwqnq A-XVK249554F-pllh351kcke50
A-XVK238729F-25yn13iea25i
A-XVK222711F-134h5ta8yxbm0
A-XVK275016F-15wjjcbn4tpj
A-XVK275016F-15wjjcbn4tpj
(2)你的 Java 應(yīng)用程序的運行類(這里寫你 java 程序的入口類,為了避免錯誤,可以 用好壓打開你的 jar 文件,找到 META-INF 中的 MANIFEST.MF 件,并用記事本打 開,Main-Class: com.simontuffs.onejar.Boot 中的 com.simontuffs.onejar.Boot 就是你 的入口程序,如果直接用 java 程序的主類可以會出錯,在用 fatjar 插件打包后,我們 的 編 寫 的 程 序 被 兩 次 打 包,以 至 于 入 口 類 發(fā) 生 了 變 化,上 面 的 com.simontuffs.onejar.Boot 就是用 fatjar 插件打包時自動生成的入口類)
第三篇:java 問題匯總(總結(jié),重點)
在用到spring框架中時,場景如下
post 請求過去,對象接收不到參數(shù)的值(解決辦法:考慮到在參數(shù)上加個@RequestBody 注解即可,有些沒加的是框架幫忙處理了后默認(rèn)接收的是json串)http://localhost:8080/xxxxxxxxxxx-xxxxxxx-api/xxxxxx/xxxxx/xxxxxxxxx/suggest/add.sgt
======================================== mapper.xml->@Repository{存儲數(shù)據(jù)層}->@Service{業(yè)務(wù)層}->@Controller{展示層}(spring注解可以理解為這樣的線性,任其項目結(jié)構(gòu)怎么變這樣的線性結(jié)構(gòu)是不會變的,萬變不離其宗)
@Repository @Service @Controller均是注冊在spring上下文中 @Autowired 在spring上下文中找bean
@Qualifier 配合 @Autowired使用 當(dāng)找到多個同一類型的bean,則會拋異常,此時可以使用 @Qualifier(“beanName”),明確指定bean的名稱進(jìn)行注入 @RequestMapping 配置連接
@Required 注冊在sett方法上,檢查有沒有被調(diào)用 @RequestParam 綁定參數(shù)
@RequestBody讀取Request請求的body部分?jǐn)?shù)據(jù),使用系統(tǒng)默認(rèn)配置的HttpMessageConverter進(jìn)行解析,然后把相應(yīng)的數(shù)據(jù)綁定到要返回的對象上
如果你也用過struts2.簡單介紹下springMVC和struts2的區(qū)別有哪些? springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過慮器。
springmvc是基于方法開發(fā)(一個url對應(yīng)一個方法),請求參數(shù)傳遞到方法的形參,可以設(shè)計為單例或多例(建議單例),struts2是基于類開發(fā),傳遞參數(shù)是通過類的屬性,只能設(shè)計為多例。
Struts采用值棧存儲請求和響應(yīng)的數(shù)據(jù),通過OGNL存取數(shù)據(jù),springmvc通過參數(shù)解析器是將request請求內(nèi)容解析,并給方法形參賦值,將數(shù)據(jù)和視圖封裝成ModelAndView對象,最后又將ModelAndView中的模型數(shù)據(jù)通過reques域傳輸?shù)巾撁?。Jsp視圖解析器默認(rèn)使用jstl。2.Spring的事務(wù)是如何配置的?
先配置事務(wù)管理器TransactionManager,不同的框架有不同屬性。再配置事務(wù)通知和屬性,通過tx:advice。配置,設(shè)置那些方法或者類需要加入事務(wù)。
3.spring事務(wù)控制放在service層,在service方法中一個方法調(diào)用service中的另一個方法,默認(rèn)開啟幾個事務(wù)?
spring的事務(wù)傳播方式默認(rèn)是PROPAGATION_REQUIRED,判斷當(dāng)前是否已開啟一個新事務(wù),有則加入當(dāng)前事務(wù),否則新開一個事務(wù)(如果沒有就開啟一個新事務(wù)),所以答案是開啟了一個事務(wù)。4.spring 什么情況下進(jìn)行事務(wù)回滾?
Spring、EJB的聲明式事務(wù)默認(rèn)情況下都是在拋出unchecked exception后才會觸發(fā)事務(wù)的回滾
unchecked異常,即運行時異常runntimeException 回滾事務(wù);checked異常,即Exception可try{}捕獲的不會回滾.當(dāng)然也可配置spring參數(shù)讓其回滾.spring的事務(wù)邊界是在調(diào)用業(yè)務(wù)方法之前開始的,業(yè)務(wù)方法執(zhí)行完畢之后來執(zhí)行commit or rollback(Spring默認(rèn)取決于是否拋出runtime異常).如果拋出runtime exception 并在你的業(yè)務(wù)方法中沒有catch到的話,事務(wù)會回滾。
一般不需要在業(yè)務(wù)方法中catch異常,如果非要catch,在做完你想做的工作后(比如關(guān)閉文件等)一定要拋出runtime exception,否則spring會將你的操作commit,這樣就會產(chǎn)生臟數(shù)據(jù).所以你的catch代碼是畫蛇添足。5.Spring支持的事務(wù)管理類型? Spring支持兩種類型的事務(wù)管理:
編程式事務(wù)管理:這意味你通過編程的方式管理事務(wù),給你帶來極大的靈活性,但是難維護(hù)。
聲明式事務(wù)管理:這意味著你可以將業(yè)務(wù)代碼和事務(wù)管理分離,你只需用注解和XML配置來管理事務(wù)。
6.Spring框架的事務(wù)管理有哪些優(yōu)點?
它為不同的事務(wù)API 如 JTA,JDBC,Hibernate,JPA 和JDO,提供一個不變的編程模式。
它為編程式事務(wù)管理提供了一套簡單的API而不是一些復(fù)雜的事務(wù)API如 它支持聲明式事務(wù)管理。
它和Spring各種數(shù)據(jù)訪問抽象層很好得集成。7.講下Spring的七大事務(wù)傳播?
Spring中通過Propagation來設(shè)置事務(wù)的傳播屬性的,在這個屬性中提供了我們其中關(guān)于事務(wù)傳播的特性:
PROPAGATION_REQUIRED:支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就新建一個事務(wù)。這是最常見的選擇。
PROPAGATION_SUPPORTS:支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方式執(zhí)行。PROPAGATION_MANDATORY:支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就拋出異常。PROPAGATION_REQUIRES_NEW:新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起。PROPAGATION_NOT_SUPPORTED:以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。
PROPAGATION_NEVER:以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。PROPAGATION_NESTED:支持當(dāng)前事務(wù),新增Savepoint點,與當(dāng)前事務(wù)同步提交或回滾。
8.事務(wù)并發(fā)會引起什么問題,怎么解決?
事務(wù)并發(fā)會引起臟讀,幻讀,不可重復(fù)讀等問題,設(shè)定事務(wù)的隔離級別就可以解決。
9.事務(wù)的安全問題:鎖機(jī)制的實現(xiàn)原理及在項目中的使用?
鎖有悲觀鎖和樂觀鎖,悲觀鎖一般假設(shè)每個人都會修改數(shù)據(jù),默認(rèn)情況下把數(shù)據(jù)都鎖住,影響性能,但安全性高.樂觀鎖是假設(shè)每個人都只讀下數(shù)據(jù),不會修改數(shù)據(jù),性能比較高,但是安全性較低,一般通過增加類似于版本控制里面版本號來解決問題。10.講下BeanFactory和ApplicationContext的區(qū)別?
BeanFactory是Spring容器頂級核心接口,比較早,但功能比較少,getBean就是BeanFactory定義的。
ApplicationContext是Spring里面的另外一個容器頂級接口,它繼承于BeanFactory,但是提供的功能譬如校驗,國際化,監(jiān)聽,對Bean的管理功能比較多,一般使用ApplicationContext。11.簡單介紹下你對mybatis的理解? mybatis配置
SqlMapConfig.xml,此文件作為mybatis的全局配置文件,配置了mybatis的運行環(huán)境等信息。mapper.xml文件即sql映射文件,文件中配置了操作數(shù)據(jù)庫的sql語句。此文件需要在SqlMapConfig.xml中加載。
通過mybatis環(huán)境等配置信息構(gòu)造SqlSessionFactory即會話工廠
由會話工廠創(chuàng)建sqlSession即會話,操作數(shù)據(jù)庫需要通過sqlSession進(jìn)行。mybatis底層自定義了Executor執(zhí)行器接口操作數(shù)據(jù)庫,Executor接口有兩個實現(xiàn),一個是基本執(zhí)行器、一個是緩存執(zhí)行器。
Mapped Statement也是mybatis一個底層封裝對象,它包裝了mybatis配置信息及sql映射信息等。mapper.xml文件中一個sql對應(yīng)一個Mapped Statement對象,sql的id即是Mapped statement的id。
Mapped Statement對sql執(zhí)行輸入?yún)?shù)進(jìn)行定義,包括HashMap、基本類型、pojo,Executor通過Mapped Statement在執(zhí)行sql前將輸入的java對象映射至sql中,輸入?yún)?shù)映射就是jdbc編程中對preparedStatement設(shè)置參數(shù)。
Mapped Statement對sql執(zhí)行輸出結(jié)果進(jìn)行定義,包括HashMap、基本類型、pojo,Executor通過Mapped Statement在執(zhí)行sql后將輸出結(jié)果映射至java對象中,輸出結(jié)果映射過程相當(dāng)于jdbc編程中對結(jié)果的解析處理過程。12.講下MyBatis和Hibernate的區(qū)別? MyBatis是JDBC的輕量級封裝,把Sql和java代碼獨立出來,性能相對比較高,寫SQL語句相對于比較靈活,并且容易調(diào)試,一般用在大型項目中.Hibernate是JDBC的重量級封裝,開發(fā)速度比較快,但是性能比較低,調(diào)試不方便,一般適合對進(jìn)度要求的比較高的中小型項目.13.mybatis中#{}和${}的區(qū)別是什么?
${}是Properties文件中的變量占位符,它可以用于標(biāo)簽屬性值和sql內(nèi)部,屬于靜態(tài)文本替換,比如${driver}會被靜態(tài)替換為com.mysql.jdbc.Driver。#{}是sql的參數(shù)占位符,Mybatis會將sql中的#{}替換為?號,在sql執(zhí)行前會使用PreparedStatement的參數(shù)設(shè)置方法,按序給sql的?號占位符設(shè)置參數(shù)值,比如ps.setInt(0, parameterValue),#{item.name}的取值方式為使用反射從參數(shù)對象中獲取item對象的name屬性值,相當(dāng)于param.getItem().getName()。14.mybatis中XML映射文件中,除了常見的select|insert|updae|delete標(biāo)簽之外,還有哪些標(biāo)簽?、、、、,加上動態(tài)sql的9個標(biāo)簽,trim|where|set|foreach|if|choose|when|otherwise|bind等,其中為sql片段標(biāo)簽,通過標(biāo)簽引入sql片段,為不支持自增的主鍵生成策略標(biāo)簽。15.MyBatis編程步驟是什么樣的? 創(chuàng)建SqlSessionFactory 通過SqlSessionFactory創(chuàng)建SqlSession 通過sqlsession執(zhí)行數(shù)據(jù)庫操作 調(diào)用session.commit()提交事務(wù) 調(diào)用session.close()關(guān)閉會話
16.JDBC編程有哪些不足之處,MyBatis是如何解決這些問題的?
① 數(shù)據(jù)庫鏈接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費從而影響系統(tǒng)性能,如果使用數(shù)據(jù)庫鏈接池可解決此問題。
解決:在SqlMapConfig.xml中配置數(shù)據(jù)鏈接池,使用連接池管理數(shù)據(jù)庫鏈接。②Sql語句寫在代碼中造成代碼不易維護(hù),實際應(yīng)用sql變化的可能較大,sql變動需要改變java代碼。
解決:將Sql語句配置在XXXXmapper.xml文件中與java代碼分離。
③向sql語句傳參數(shù)麻煩,因為sql語句的where條件不一定,可能多也可能少,占位符需要和參數(shù)一一對應(yīng)。
解決: Mybatis自動將java對象映射至sql語句。
④對結(jié)果集解析麻煩,sql變化導(dǎo)致解析代碼變化,且解析前需要遍歷,如果能將數(shù)據(jù)庫記錄封裝成pojo對象解析比較方便。解決:Mybatis自動將sql執(zhí)行結(jié)果映射至java對象。17.使用MyBatis的mapper接口調(diào)用時有哪些要求? Mapper接口方法名和mapper.xml中定義的每個sql的id相同
Mapper接口方法的輸入?yún)?shù)類型和mapper.xml中定義的每個sql 的parameterType的類型相同
Mapper接口方法的輸出參數(shù)類型和mapper.xml中定義的每個sql的resultType的類型相同
Mapper.xml文件中的namespace即是mapper接口的類路徑。18.簡單的說一下MyBatis的一級緩存和二級緩存?
Mybatis首先去緩存中查詢結(jié)果集,如果沒有則查詢數(shù)據(jù)庫,如果有則從緩存取出返回結(jié)果集就不走數(shù)據(jù)庫。Mybatis內(nèi)部存儲緩存使用一個HashMap,key為hashCode+sqlId+Sql語句。value為從查詢出來映射生成的java對象 Mybatis的二級緩存即查詢緩存,它的作用域是一個mapper的namespace,即在同一個namespace中查詢sql可以從緩存中獲取數(shù)據(jù)。二級緩存是可以跨SqlSession的。
19.Mybatis是否支持延遲加載?如果支持,它的實現(xiàn)原理是什么?
Mybatis僅支持association關(guān)聯(lián)對象和collection關(guān)聯(lián)集合對象的延遲加載,association指的就是一對一,collection指的就是一對多查詢。在Mybatis配置文件中,可以配置是否啟用延遲加載lazyLoadingEnabled=true|false。它的原理是,使用CGLIB創(chuàng)建目標(biāo)對象的代理對象,當(dāng)調(diào)用目標(biāo)方法時,進(jìn)入攔截器方法,比如調(diào)用a.getB().getName(),攔截器invoke()方法發(fā)現(xiàn)a.getB()是null值,那么就會單獨發(fā)送事先保存好的查詢關(guān)聯(lián)B對象的sql,把B查詢上來,然后調(diào)用a.setB(b),于是a的對象b屬性就有值了,接著完成a.getB().getName()方法的調(diào)用。這就是延遲加載的基本原理。
20.Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重復(fù)? 不同的Xml映射文件,如果配置了namespace,那么id可以重復(fù);如果沒有配置namespace,那么id不能重復(fù);畢竟namespace不是必須的,只是最佳實踐而已。
原因就是namespace+id是作為Map的key使用的,如果沒有namespace,就剩下id,那么,id重復(fù)會導(dǎo)致數(shù)據(jù)互相覆蓋。有了namespace,自然id就可以重復(fù),namespace不同,namespace+id自然也就不同。21.為什么說Mybatis是半自動ORM映射工具?它與全自動的區(qū)別在哪里? Hibernate屬于全自動ORM映射工具,使用Hibernate查詢關(guān)聯(lián)對象或者關(guān)聯(lián)集合對象時,可以根據(jù)對象關(guān)系模型直接獲取,所以它是全自動的。而Mybatis在查詢關(guān)聯(lián)對象或關(guān)聯(lián)集合對象時,需要手動編寫sql來完成,所以,稱之為半自動ORM映射工具。22.SSM優(yōu)缺點、使用場景?
1.Mybatis和hibernate不同,它不完全是一個ORM框架,因為MyBatis需要程序員自己編寫Sql語句,不過mybatis可以通過XML或注解方式靈活配置要運行的sql語句,并將java對象和sql語句映射生成最終執(zhí)行的sql,最后將sql執(zhí)行的結(jié)果再映射生成java對象。
2.Mybatis學(xué)習(xí)門檻低,簡單易學(xué),程序員直接編寫原生態(tài)sql,可嚴(yán)格控制sql執(zhí)行性能,靈活度高,非常適合對關(guān)系數(shù)據(jù)模型要求不高的軟件開發(fā),例如互聯(lián)網(wǎng)軟件、企業(yè)運營類軟件等,因為這類軟件需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的前提是mybatis無法做到數(shù)據(jù)庫無關(guān)性,如果需要實現(xiàn)支持多種數(shù)據(jù)庫的軟件則需要自定義多套sql映射文件,工作量大。3.Hibernate對象/關(guān)系映射能力強(qiáng),數(shù)據(jù)庫無關(guān)性好,對于關(guān)系模型要求高的軟件(例如需求固定的定制化軟件)如果用hibernate開發(fā)可以節(jié)省很多代碼,提高效率。但是Hibernate的學(xué)習(xí)門檻高,要精通門檻更高,而且怎么設(shè)計O/R映射,在性能和對象模型之間如何權(quán)衡,以及怎樣用好Hibernate需要具有很強(qiáng)的經(jīng)驗和能力才行。
4.總之,按照用戶的需求在有限的資源環(huán)境下只要能做出維護(hù)性、擴(kuò)展性良好的軟件架構(gòu)都是好架構(gòu),所以框架只有適合才是最好。23.SpringMvc里面攔截器是怎么實現(xiàn)的?
有兩種方式,一種是實現(xiàn)接口,另外一種是繼承適配器類,然后在SpringMvc的配置文件中配置攔截器即可:
24.Spring中AOP的應(yīng)用場景、Aop原理、好處?
AOP--Aspect Oriented Programming面向切面編程;用來封裝橫切關(guān)注點,具體可以在下面的場景中使用: Authentication 權(quán)限、Caching 緩存、Context passing 內(nèi)容傳遞、Error handling 錯誤處理Lazy loading懶加載、Debugging調(diào)試、logging, tracing, profiling and monitoring 記錄跟蹤優(yōu)化 校準(zhǔn)、Performance optimization 性能優(yōu)化、Persistence 持久化、Resource pooling 資源池、Synchronization 同步、Transactions 事務(wù)
原理:AOP是面向切面編程,是通過動態(tài)代理的方式為程序添加統(tǒng)一功能,集中解決一些公共問題。優(yōu)點:
1.各個步驟之間的良好隔離性耦合性大大降低
2.源代碼無關(guān)性,再擴(kuò)展功能的同時不對源碼進(jìn)行修改操作。
第四篇:JAVA實習(xí)生問題
JAVA實習(xí)生問題:
1.我班只招三人。2.實習(xí)從現(xiàn)在開始,至于結(jié)束,暫時沒有時間限制,因為公司項目較多,缺乏人手,項目周期長。聽他們說他們現(xiàn)在接了一個安徽省的云平臺項目,這個就夠他們忙的了。如果最后你們能夠成長起來,并且愿意留下來,他們也很高興,也就相當(dāng)于培養(yǎng)自己的員工。
3.工作內(nèi)容:項目組帶著做項目。相當(dāng)于一邊學(xué)習(xí)一邊動手做。所以興趣很重要,如果很有興趣,具有一定的分析問題解決問題的能力,遇到問題,則是自己積極想辦法解決,而且覺得很有成就感,在有興趣的前提下,跟著項目組做項目也是學(xué)的最快的;但是如果興趣并不是很大,那么就變成了壓力、痛苦和無聊。
4.此次公司招實習(xí)生,對基礎(chǔ)沒什么要求(只要學(xué)過java就行),重要的是興趣。如果動手能力、自學(xué)能力較強(qiáng),具有較強(qiáng)的分析問題、解決問題的能力,即使基礎(chǔ)不是很好,也應(yīng)該問題不大。有興趣,遇到問題就不會覺得難,而是自己積極的想辦法去解決。
5.對于女生來說,需要考慮的更多一些,比如安全問題,畢竟是在校外實習(xí)。這些問題你們自己要考慮到,也都是要讓你們自己負(fù)責(zé)的。要慎重,自己考慮清楚。
6.公司招實習(xí)生的目的是幫著項目組做項目。不是很想干的,最好別去。
7.工作有兩個方向,軟件開發(fā)or系統(tǒng)集成,方向自己選,看你們對哪一塊感興趣。如果基礎(chǔ)好一點,項目組就帶著你們做;如果基礎(chǔ)薄弱,不光帶著做,還會有培訓(xùn)。實際上帶著做項目,是學(xué)的最快的,但是前提是有興趣。至于具體做什么,要看是什么項目,是項目中的哪一部分。
第五篇:Java面試問題
1、引用CSS樣式有哪兩種方式?
Link,@import2、js怎么控制兩個文本框,當(dāng)選中的時候邊框變空,沒選中的變會原來的顏色。onFocus=“document.getElementById('text1').style.backgroundColor='#eee'”
onblur=“document.getElementById('text1').style.backgroundColor='#fff'”
3、查詢數(shù)據(jù)庫表顯示在頁面需要新建多少個class文件和xml文件?
4、spring有多少種注入方式?
注入方法1:構(gòu)造方法方式 2:屬性注入 3:靜態(tài)工廠方法參數(shù)注入 4: 接口注入