主要問到的問題
一、常見框架:spring骨稿、spring mvc拆融、hibernate、struts啊终、ibatis/mybatis镜豹、log4j、Redis蓝牲、Dubbo
二.網(wǎng)絡(luò):https/http趟脂;tcp/ip
三.linux命令
四.數(shù)據(jù)庫:oracle、mysql例衍、mango db昔期、no sql
五.設(shè)計模式:單例模式,工廠模式佛玄、策略模式硼一、觀察者模式、裝飾者模式梦抢、適配器模式般贼、代理模式
六.前端:html、jsp,css奥吩、xml哼蛆、jquery、javascript霞赫、json湃鹊、ajax
七.接口:webservice急但、Restful、hessian
八.消息:Active mq/Rabbitmq
九.分布式緩存:memcached/Redis
十.java基礎(chǔ)
十一:工具:eclipse/idea;svn/git ;maven;
十二:jvm調(diào)優(yōu)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、常見框架:spring扛拨、spring mvc、hibernate、struts、ibatis/mybatis楼誓、log4j、Redis名挥、Dubbo
1.Spring:
11.Java中Runnable和Callable有什么不同?
二.網(wǎng)絡(luò):https/http主守;tcp/ip
三.linux命令
四.數(shù)據(jù)庫:oracle禀倔、mysql、mango db参淫、no sql
五.設(shè)計模式:單例模式救湖,工廠模式、策略模式涎才、觀察者模式鞋既、裝飾者模式、適配器模式耍铜、代理模式
1寫出單例模式(至少兩種):
懶漢模式
class Singleton{
? ? ? ? ? private static Singleton s;
? ? ? ? ? ?private Singleton(){}
? ? ? ? ? ?public static Singleton getSingleton(){
? ? ? ? ? ? ?if(s==null){
? ? ? ? ? ? ?s=new Singleton();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? return s;
? ? ? ? }?
}
餓漢模式:
class Singleton{
private static Singleton s=new Singleton();
private Singleton(){}
public Singleton getSingleton(){
return?s;
}
}
2.項目中用到的是哪種設(shè)計模式邑闺?
六.前端:html、jsp,css棕兼、xml陡舅、jquery、javascript伴挚、json靶衍、ajax
七.接口:webservice、Restful茎芋、hessian
八.消息:Active mq/Rabbitmq
1.Active Mq常用的協(xié)議颅眶?
2.為什么要用active mq,為什么不用多線程調(diào)用webservice接口方式進行通信田弥?Active mq的應(yīng)用場景涛酗?
為什么要用active mq:消息隊列的主要作用是為了解決高并發(fā)訪問高峰,加快響應(yīng)速度偷厦。一般情況下煤杀,不用消息隊列,客戶端來的請求會直接寫入數(shù)據(jù)庫沪哺,在訪問高峰期沈自,高并發(fā)的情況下,會對數(shù)據(jù)庫訪問造成壓力辜妓,響應(yīng)發(fā)生延遲枯途,造成數(shù)據(jù)庫訪問的瓶頸忌怎。使用隊列后,用戶的請求發(fā)給隊列后會立刻返回酪夷,之后再由消息隊列的消費者進程監(jiān)聽對應(yīng)的隊列榴啸,從消息隊列中獲取數(shù)據(jù),異步寫入數(shù)據(jù)庫晚岭。消息隊列的服務(wù)處理速度遠快于數(shù)據(jù)庫鸥印,因此用戶的響應(yīng)延遲可得到有效改善。
為什么不用多線程調(diào)用webservice接口方式進行通信坦报?WebService:用來遠程調(diào)用服務(wù)库说,達到打通系統(tǒng)、服務(wù)復(fù)用的目的片择。是SOA系統(tǒng)架構(gòu)——面向服務(wù)架構(gòu)的體現(xiàn)潜的。ActiveMQ:一般用來做消息通信,特別是異步的消息處理字管,把同步的處理變成異步消息啰挪,使得系統(tǒng)解耦、消峰平谷嘲叔。WebService與ActiveMQ的區(qū)別:Webservice近乎實時通信亡呵,而MQ卻通常是延時通信;MessageQueue組件會把消息持久化放在本地硫戈,所以哪怕突然死機了政己,請求消息也是不會丟失的。
Active mq的應(yīng)用場景掏愁?1.異步處理:用戶注冊后歇由,需要發(fā)注冊郵件和注冊短信;引入active mq果港,注冊信息寫入數(shù)據(jù)庫后沦泌,注冊郵件和發(fā)送短信的消息寫入消息隊列后直接返回。會比串行和并行的做法更快捷辛掠。2.應(yīng)用解耦:用戶下單后谢谦,訂單系統(tǒng)需要通知庫存系統(tǒng);3.流量削鋒也是消息隊列中的常用場景萝衩,一般在秒殺或團搶活動中使用廣泛(https://blog.csdn.net/he90227/article/details/50800646)
九.分布式緩存:memcached/Redis
十.java基礎(chǔ)
1.多線程問題:
11.Java中Runnable和Callable有什么不同回挽?
Runnable和Callable都代表那些要在不同的線程中執(zhí)行的任務(wù)。Runnable從JDK1.0開始就有了猩谊,Callable是在 JDK1.5增加的千劈。它們的主要區(qū)別是Callable的 call() 方法可以返回值和拋出異常,而Runnable的run()方法沒有這些功能牌捷。Callable可以返回裝載有計算結(jié)果的Future對象墙牌。
1.2.Thread 類中的start() 和 run() 方法有什么區(qū)別涡驮?
start()方法被用來啟動新創(chuàng)建的線程,而且start()內(nèi)部 調(diào)用了run()方法喜滨,這和直接調(diào)用run()方法的效果不一樣捉捅。當你調(diào)用run()方法的時候,只會是在原來的線程中調(diào)用虽风,沒有新的線程啟 動棒口,start()方法才會啟動新線程。
1.3.你們用多線程嗎辜膝?java中實現(xiàn)多線程的方法无牵?說說項目中使用的多線程案例
用了,實現(xiàn)runable接口或者集成thread類内舟,
場景一:一個業(yè)務(wù)邏輯有很多次的循環(huán),每次循環(huán)之間沒有影響初橘,比如驗證1萬條url路徑是否存在验游,正常情況要循環(huán)1萬次,逐個去驗證每一條URL保檐,這樣效率會很低耕蝉,假設(shè)驗證一條需要1分鐘,總共就需要1萬分鐘夜只,有點恐怖垒在。這時可以用多線程,將1萬條URL分成50等份扔亥,開50個線程场躯,沒個線程只需驗證200條,這樣所有的線程執(zhí)行完是遠小于1萬分鐘的旅挤。
場景二:需要知道一個任務(wù)的執(zhí)行進度踢关,比如我們常看到的進度條粘茄,實現(xiàn)方式可以是在任務(wù)中加入一個整型屬性變量(這樣不同方法可以共享)签舞,任務(wù)執(zhí)行一定程度就給變量值加1,另外開一個線程按時間間隔不斷去訪問這個變量柒瓣,并反饋給用戶儒搭。
1.4sleep()和wait()的區(qū)別:
sleep釋放資源但是不會釋放鎖,wait會釋放資源和鎖芙贫,使得其他線程可以使用同步控制塊或者鎖搂鲫。
sleep需要捕獲異常,wait不需要磺平;
wait默穴,notify,notifyAll 只能夠在同步塊或者同步方法中使用怔檩,sleep能夠在任何地方使用
2.數(shù)據(jù)類型問題:
2.1string 和stringBuffer區(qū)別:
string是不可變類,StringBuffer提供字符串修改
解釋:String str = 'abc';str = str + 'def';
‘a(chǎn)bc’和‘def’是兩個單獨的對象蓄诽,編譯的時候會拜放到常量池中薛训。然后執(zhí)行String str = ‘a(chǎn)bc’將str‘a(chǎn)bc’指向這個常量,然后str = str + ‘def’會重新創(chuàng)建一個‘a(chǎn)bcdef’的對象仑氛,并將str指向這個對象乙埃。所以以上的代碼中,我們共創(chuàng)建了3個對象
new StringBuffer("abc").equals(new StringBuffer("abc")) ? false ? ?stringBuffer沒有實現(xiàn)equals方法
2.2:String 是否可以被繼承:
String不可以被繼承锯岖,因為String是final的
2.3:ArrayList和Vector的區(qū)別
同步性:vector是線程安全的(同步的)介袜,arrayList是線程不安全的
數(shù)據(jù)增長:ArrayList和vector都有一個初始的容量大小,Vector增長原來的1倍出吹,arrayList增長原來的0.5倍遇伞。
2.4:HashMap和HashTable的區(qū)別:
區(qū)別:
HashTbale是同步的(線程安全的),HashMap是線程不安全的
hashMap允許將null作為鍵或者值捶牢,而hashTable不允許
2.5:List和Map的區(qū)別:
List是存儲單列數(shù)據(jù)的集合鸠珠,map是存儲雙列數(shù)據(jù)的集合
List存儲的數(shù)據(jù)是有序的并且能夠重復(fù),map存儲的數(shù)據(jù)是無序的秋麸,其鍵是不能重復(fù)的渐排,值是可以重復(fù)的。
2.6 List,Map,Set的三個接口灸蟆,存取數(shù)據(jù)時候各有什么特點驯耻?
List和set都是單列元素的集合,他們有共同的父接口collection,list和set都通過add來存元素
set不允許有重復(fù)的元素炒考,set取元素時只能以iterator取得所有的元素可缚,再逐一遍歷各個元素。
List允許重復(fù)元素斋枢,list通過get()方法獲取元素
Map是雙列集合城看,map通過put方法存儲一對鍵值對,通過get(鍵)獲取值杏慰,map不可以存儲重復(fù)的鍵测柠。
2.7:ArrayList,vector缘滥,LinkedList的存儲性能和特點:
ArrayList和Vector都是數(shù)組方式存儲數(shù)據(jù)轰胁,他們允許按序號索引元素,但插入數(shù)據(jù)要涉及數(shù)組移動等內(nèi)存操作朝扼,所以插入慢而索引快赃阀。vector是線程安全的,arrayList是線程不安全的。
LinkedList使用雙向鏈表方式存儲數(shù)據(jù)榛斯,插入塊观游,索引慢。
2.4 collection 框架的結(jié)構(gòu):
2.5說出常用的類驮俗、包懂缕、接口各五個:
類:Date,String,ArrayList,HashMap,StringBuffer;Object
包:java.Util王凑;java.lang搪柑;java.oi;java.sql索烹;org.hibernate
接口:List工碾;Map;Set百姓;Iterator渊额;Runable
3.流:
3.1:java中有幾種類型的流?Jdk為美中類型的流提供了一些抽象類供他們供他們繼承垒拢,清說出他們分別是哪些旬迹?
兩種:字符流和字節(jié)流;
字節(jié)流:inputStream,outputStream;
字符流:inputStreamReader;outputStreamWriter
字節(jié)流:
字符流:
3.算法:
3.1:快速排序:對于一組給定的記錄子库,通過一趟排序后舱权,將原序列分為兩部分矗晃,其中前一部分的所有記錄均比后一部分的所有記錄小仑嗅,然后再依次對前后兩部分的記錄進行快速排序,遞歸該過程张症,直到序列中的所有記錄均有序為止仓技。
public?class?QuickSort {
????public?static?void?sort(int[] a,?int?low,?int?high) {
????????if(low>=high)
????????????return;
????????int?i = low;
????????int?j = high;
????????int?key = a[i];
????????while?(i < j) {
????????????while?(i < j && a[j] >= key)
????????????????j--;
????????????a[i++] = a[j];
????????????while?(i < j && a[i] <= key)
????????????????i++;
????????????a[j--] = a[i];
????????}
????????a[i] = key;
????????sort(a,low,i-1);
????????sort(a,i+1,high);
????}
????public?static?void?quickSort(int[] a) {
????????sort(a,?0, a.length-1);
????????for(int?i:a)
????????????System.out.print(i+" ");
????}
????public?static?void?main(String[] args) {
????????int[] a = {?49,?38,?65,?97,?76,?13,?27,?50?};
????????quickSort(a);
????}
}
3.2:冒泡排序:比較相鄰的兩個元素,值大的放置到右邊
public class BubbleSort{
?int[] a ={3,6,1,9,32,67,56,21,4,5,10};
for(int i=0;i<a.length-1;i++){
? for(int j=i+1;j<a.length-i;j++){
? if(a[i]>a[j]){
?int temp =a[i];
a[i]=a[j];
a[j]=a[i];
? ?}
? }
}
}
十一:工具:eclipse/idea;svn/git ;maven;
十二:JVM調(diào)優(yōu)