java筆試面試題總結

1:字符串如何倒序輸出?javascript

 1 toCharArray()php

2 StringBuffer的reverse()方法css

     StringBuffer sb = new StringBuffer();html

  sb.append(a); //放數據
  String rea = sb.reverse().toString();//倒序輸出,sb.reverse()是StringBuffer類型

2:StringBuffer,String,StringBulider區別?前端


3: Map與Hashmap 的關係?  Map是一個接口不能實例化,HashMap是Map的一個實現java


 4:HashMap與HashTable 的關係?  node


5:HashMap和TreeMap區別?  http://www.importnew.com/7010.html   mysql

  


 6:Hashmap何時擴容? Hashmap在元素達到負載因子對應數的時候就發生擴容jquery

 7:Map裏如何放list,如何獲得list中的值?list 中放Map 呢? ios

  HashMap嵌套ArrayList的代碼實現

  HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayList<String>> ();   

  ArrayList嵌套HashMap

  ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>();


8:對 Ioc理解   

  控制反轉,存放對象的容器,對象的建立,在jvm啓動時經過反射建立。用戶想獲得對象,經過注入方式取得。


 9:Aop的應用   性能檢測,訪問控制,日誌管理,事務等


 10:ArrayList 與 LinkedList 的特色   

    ArrayList:查詢快,插入.刪除慢 數據結構 :數組,    LinkedList  雙向鏈表 查詢慢插入.刪除快


 11:冒泡排序。

12:瞭解的設計模式,舉例


 13:hibernate 的一級緩存與二級緩存 ,生命週期?

  一級:session 緩存,線程內的緩存,使用一級緩存的目的是爲了減小對數據庫的訪問次數,緩存的生命週期依賴於Session的生命週期,當Session被關閉後,緩存也就結束生命週期 。

  二級緩存,sessionFactory 緩存,進程內的緩存。緩存的生命週期依賴於應用的生命週期,應用結束時,緩存也就結束了生命週期,二級緩存存在於應用程序範圍.


 14:Mysql的主鍵自動增加如何設置   CREATE TABLE XXX (ID INT(5) PRIMARY KEY  AUTO_INCREMENT


 15:linix的經常使用命令,配環境變量? 

  a . pwd:用於顯示當前工做目錄; 

  b . ls:用於查看當前工做目錄內容; 
  c . cd:用於改變當前工做目錄。


 16:Spring有幾種注入方式 ?

   經常使用的注入方式主要有三種:構造方法注入,setter注入,基於註解的注入


  17:ApplicationContext 與 BeanFactory 的區別  


18:c3p0 如何配置? 

c3p0的配置方式分爲三種,分別是

1.setters一個個地設置各個配置項(不推薦)
2.類路徑src下提供一個c3p0.properties文件

3.類路徑src下提供一個c3p0-config.xml文件  (推薦) 

 1.最經常使用配置  

initialPoolSize:鏈接池初始化時建立的鏈接數,default : 3(建議使用)

minPoolSize:鏈接池保持的最小鏈接數,default : 3(建議使用)

maxPoolSize:鏈接池中擁有的最大鏈接數,若是得到新鏈接時會使鏈接總數超過這個值則不會再獲取新鏈接,而是等待其餘鏈接釋放,因此這個值有可能會設計地很大,default : 15(建議使用)

acquireIncrement:鏈接池在無空閒鏈接可用時一次性建立的新數據庫鏈接數

2:就是數據源,即數據庫鏈接

注意:  

   1::配置完c3po.cfg.xml文件後,在spring配置的xml中去讀取它。

  2:c3po.cfg.xml文件必定要放在src下


19:log4j日誌如何配置?

  日誌級別:

    DEBUG:用在任何以爲有利於在調試時更詳細的瞭解系統運行狀態的東東

    INFO:輸出信息:用來反饋系統的當前狀態給最終用戶的、

    WARN:可修復,系統可繼續運行下去

    ERROR:可修復性,但沒法肯定系統會正常的工做下去

    FATAL:至關嚴重,能夠確定這種錯誤已經沒法修復,而且若是系統繼續運行下去的話後果嚴重

  級別順序:DEBUG < INFO < WARN < ERROR < FATAL

--------------------------------------------------------------------------------------

  log4j 使用步驟:

  1:引入log4j的jar 包

  2:在src下配置log4j.properties.主要是配置輸出路徑,輸出時間格式,控制檯選項

  3: 在web.xml中加入:

<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param>

<context-param>      
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param> 

<context-param>     
<param-name>log4jRefreshInterval</param-name>
<param-value>3000</param-value>  容器會每30秒掃描log4j的配置文件
</context-param>

<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

3.1  在web.xml 配置 log4j.properties。

3.2 在web.xml 配置 log4j的監聽

  4:在類中

     Logger log = Logger.getLogger(TestString2StringArr.class);

     log.info("aaaa");


 20:SessionFactory 的做用?

  SessionFactory在Hibernate中實際上起到了一個緩衝區的做用 他緩衝了HIbernate自動生成SQL語句和其餘的映射數據 還緩衝了一些未來有可能重複利用的數據.

  SessionFactory用到了工廠模式 用戶程序從工程類SessionFactory取得Session實例 設計者的意圖就是讓它能在整個應用中共享 典型的來講 一個項目一般只須要一個SessionFactory就夠了.


 21:ajax 的同步與異步?什麼是異步?

同步處理就不同了,說話後在吃飯,吃完飯後在看手機,必須等待上一件事完了,才執行後面的事情 
比方說一我的邊吃飯,邊看手機,邊說話,就是異步處理的方式。 

AJAX 是一種用於建立快速動態網頁的技術。

經過在後臺與服務器進行少許數據交換,AJAX 能夠使網頁實現異步更新。這意味着能夠在不從新加載整個網頁的狀況下,對網頁的某部分進行更新。

傳統的網頁(不使用 AJAX)若是須要更新內容,必需重載整個網頁面。


 22:數據如何在後臺校驗,如:郵箱,手機號,身份證號等?


 23:MyBatis 的${} 與 #{} 的區別?MyBatis 如何批量插入?

  1:  id=111 ,用#{},where id=#{id},轉爲 where id="111"; 用${}, where id= ${id},轉爲where id="id"; 

  2: 用#{}方式可以很大程度防止sql注入,$方式沒法防止Sql注入。

  3:通常能用#的就別用$。

  MyBatis批量插入: 

1:xml 中 daomapping 文件

<insert id="insertBatch">
  INSERT INTO t_user
    (id, name, del_flag)
  VALUES
  <foreach collection ="list" item="user" separator =",">
    (#{user.id}, #{user.name}, #{user.delFlag})
  </foreach >
</insert>
2:public void testInsertBatch() throws Exception {

    long start = System.currentTimeMillis();
    List<User> list = new ArrayList<>();
    User user;
  for (int i = 0; i < 10000; i++) {
    user = new User();
    user.setId("test" + i);
    user.setName("name" + i);
    user.setDelFlag("0");
    list.add(user);
  }
  userService.insertBatch(list);
  long end = System.currentTimeMillis();
  System.out.println("---------------" + (start - end) + "---------------");
} 


24:web先後臺數據交互的幾種方式? json數據格式怎麼驗證格式正確?

  1.經過eval( ) 方法將字符串直接轉化爲JSON對象 並得到元素的值。

   var json_text = "{'book':{'name':'JAVA編程','author':['Liu','Xu']},'num':222}"; //使用eval()將字符串轉換爲對象 var json_obj = eval("("+ json_text +")");
   注意:"()"運算符
2:能夠用JSON.parse(str);

    var str = '{"a":"1","b":"2"}';

    JSON.parse(str);

    結果是:Object{a:"1",b:"2"}

  注意:能夠利用JSON Schema校驗JSON數據格式
----------------------------------------------
 1 利用session對象 ,當客戶訪問同一網站的不一樣網頁時,仍處於同一個session中。
  (1)後臺代碼
    request.getSession().setAttribute("name", name);

      request.getSession().setMaxInactiveInterval(2);
      response.sendRedirect("welcome.jsp");

   (2)前臺代碼(jsp頁面)

      Object user=request.getSession().getAttribute("name");

  2 利用request重定向,設置setAttribute

  (1)後臺代碼

     request.setAttribute("name", "cute");
     request.getRequestDispatcher("welcome.jsp").forward(request, response); //網址不會改變

  (2)前臺代碼

    String name=request.getAttribute("name").toString();  
 3 利用Ajax進行異步數據請求(獲得的數據能夠以json或xml格式返回,便於處理)

 25:try ...catch......與 return ,finally在return前執行仍是後?  

  try{

    return.....;

  }catch(){

  } 

  finally{

  return .....;

  }  return 3;        

  若finally{ }存在,執行try 或者catch中的return語句以後,在返回以前執行finally{}  ,順序執行finally{}中的return 方法,finally中的return是必定會被return的,返回值以finally中的retrun返回值爲準。注意:若代碼中finally{}後還有 return ....; 則程序編譯不了,必須刪除掉finally{ } 後面的return ...; 程序才能正確編譯。


26:垃圾處理器 GC的工做原理,GC何時執行   系統自身決定對不使用的對象刪除,騰出內存空間。

27:SQL 關鍵字的執行順序   


 28:SpringMVC 如何搭建環境? spring?hibernate? MyBatis?

springmvc 環境基本配置

引入jar》》web-inf/lib

1:配置web.xml 中 前端控制器,初始化配置

2:建立springmvc xml文件

    2.1 掃描包

    2.2 跳轉文件的先後綴

-----------------------------------------------------------------

spring 環境基本配置

引入jar》》web-inf/lib

1web.xml

1.1 ContextLoaderListener 監聽器

1.2 springxml文件   

  2. 建立springxml文件。

   2.1 開啓掃描

   2.2 掃描註解Bean,保證@Service @Repository的屬性被注入

   2.3 配置事物管理

----------------------------------------------------------------

hibernate 環境配置

引入jar》》web-inf/lib

方法一:

1 src 下建立hibernate的核心配置文件 hibernate.cfg.xml

    1.1 配置數據源

    1.2 配置sessionFactory

    1.3 註冊實體類的映射xml 如  user.hbm.xml

2.建立實體類,同一個包下建立實體類的映射xml,在xml中對應映射關係 

注意:

 1 :方法一hibernate.cfg.xml 的位置必須是在src下。

  2 :實體類的映射xml最好與實體類在一個包下

方法二:

  註解方式,hibernate.cfg.xml和實體類映射xml 都不用配置

1:spring 的配置xml

 1.1 配置數據源

    1.2 配置sessionFactory ,配置屬性去掃描實體類。

2:實體類中直接使用hibernate註解就能夠了 

--------------------------------------------------------------------------------------------

 MyBatis的環境配置 

配置文件方式 

1 .建立Dao接口,定義方法 

2:建立實體類 

3:建立實體類的mapper.xml 文件 主要是寫sql語句,Mapper中select標籤的id值dao中方法名同樣 

4mybatis-config.xml

    4.1數據源

    4.2註冊映射用戶的mapper.xml 文件

    4.3 給實體類起別名。

注意:

       1:普通web項目的mybatis-config.xml 的位置放在 src/config 下,mavne項目配置在src/main/resources下面

       2:實體類的mapper.xml 文件放在mavne項目要放在 src/main/resources

---------------------------------------

 MyBatis 傳參數如 map 怎麼傳?http://www.javashuo.com/article/p-rvieupmt-mx.html

  mapping:

  <update id="publishT00_notice" parameterType="Map">

    update test set createdate = #{createdate}, creator = #{creator} where id in 

    <foreach collection="ids" item="ids" separator="," open="(" close=")"> 

      #{ids} 

    </foreach> 

  </update>

  -----------------------

    HashMap<String,Object> map = new HashMap<String, Object>();

    map.put("creator", "creator");

    map.put("createdate", "createdate");

    String[] ids = {"1","2"};

    map.put("ids", ids );


29:spring 的註解有哪些?springMVC的註解,hibernate的註解,mybatis 註解? 

Hibernate經常使用註解

  1 類級別註解:

    @Entity:表示映射一個實體類

    @Table表示實體對應數據庫表的信息

  2 屬性級別註解

    @Id:必須的,定義映射到數據庫表的主鍵屬性, @Column描述了數據庫表中該字段的詳細。

    @GeneratedValue@GeneratedValue(strategy=GenerationType,generator=""):可選,用於定義主鍵生成策略strategy表示主鍵生成策略,取值有: GenerationType.AUTO:根據底層數據庫自動選擇(默認)

    @Column描述了數據庫表中該字段的詳細定義 

    name:可選,表示數據庫中該字段的名稱

    unique:可選,表示該字段是不是惟一標識,默認爲false

---------------------------------------------------------------------------------------

Springmvc 經常使用註解

  @RepositoryDao實現類進行註解 (特殊的@Component)

  @Service 用於對業務邏輯層進行註解, (特殊的@Component)

  @Controller 用於控制層註解

  @RequestMapping:用於處理請求地址映射,能夠做用於類和方法上。

    1 value:定義request請求的映射地址

    2 method:定義地request址請求的方式,包括【GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.】默認接受get請求,若是請求方式和定義的方式不同則請求沒法成功。

    3 params:定義request請求中必須包含的參數值。

    4 headers:定義request請求中必須包含某些指定的請求頭,如:RequestMapping(value = "/something", headers = "content-type=text/*")說明請求中必需要包含"text/html", "text/plain"這中類型的Content-type頭,纔是一個匹配的請求。

    5 consumes:定義請求提交內容的類型。

    6 produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回

  @RequestParam:用於獲取傳入參數的值

    1 value:參數的名稱

    2 required:定義該傳入參數是否必須,默認爲true,(和@RequestMappingparams屬性有點相似)

  @RequestBody

    該註解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,而後把相應的數據綁定到要返回的對象上 ,再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上

  @ResponseBody

     該註解用於將Controller的方法返回的對象,經過適當的HttpMessageConverter轉換爲指定格式後,寫入到Response對象的body數據區

  @ModelAttribute    

    在方法定義上使用 @ModelAttribute 註解:Spring MVC 在調用目標處理方法前,會先逐個調用在方法級上標註了@ModelAttribute 的方法

    在方法的入參前使用 @ModelAttribute 註解:能夠從隱含對象中獲取隱含的模型數據中獲取對象,再將請求參數 –綁定到對象中,再傳入入參將方法入參對象添加到模型中 

  @RequestParam 在處理方法入參處使用 @RequestParam 能夠把請求參 數傳遞給請求方法

  @PathVariable   綁定 URL 佔位符到入參

  @ExceptionHandler 註解到方法上,出現異常時會執行該方法

  @ControllerAdvice  使一個Contoller成爲全局的異常處理類,類中用@ExceptionHandler方法註解的方法能夠處理全部Controller發生的異常

-----------------------------------------------

Spring 經常使用註解

  @Controller只是定義了一個控制器類

  @ Service  標註業務層組件

  @Repository 標註數據訪問DAO組件

  @Autowired 按照Type 注入

  @Scope  用於指定scope做用域的(用在類上)默認爲 singleton

備註:用註解來向Spring容器註冊Bean。須要在applicationContext.xml中註冊<context:component-scan base-package=pagkage1[,pagkage2,,pagkageN]/>

-------------------------------------------

Mybatis 經常使用註解

  基本註解

@Insert 簡單插入

@Update 簡單更新

@Delete 簡單刪除

@Select 簡單查詢

@Result()實現結果集封裝

@Results() 能夠與@Result 一塊兒使用,封裝多個結果集

高級註解  容許建立動態SQL

@SelectProvider  

@InsertProvider

@UpdateProvider

@DeleteProvider 


30:線程的幾種狀態?start()與 run( ), wart() 與sleep()區別?如何喚醒 sleep 方法

  sleep來自Thread類,和wait來自Object類調用sleep()方法的過程當中,線程不會釋放對象鎖。而 調用 wait 方法線程會釋放對象鎖 .sleep睡眠後不出讓系統資源,wait讓出系統資源其餘線程能夠佔用CPU

  sleep(milliseconds)須要指定一個睡眠時間,時間一到會自動喚醒


31:Jvm 內存如何劃分?分別存儲那些數據?  堆區,方法區,棧區   見51題

32:String s=「abc」 與  String s= new String("abc"); 建立幾個對象?

33:java 截取字符串有 substr() 的麼?   沒有

34:string 的經常使用方法有哪些?

  length():求字符串的長度

  indexOf():求某個字符在字符串中的位置    str1.indexOf("c") 

equals():比較兩個字符串是否相同

replace():將字符串中的某些字符用別的字符替換掉   str3.replace("aa","bb"),bb取代aa 

substring():輸出一個新的字符串,它是此字符串中的子串,形如substring(3,7);它將字符串中的第四個第五個第六個輸出。

trim():將字符串開頭的空白(空格)和尾部的空白去掉。

toLowerCase():將字符串中全部的大寫改變成小寫

toUpperCase():將字符串中全部的小寫改變爲大寫

split():根據給定正則表達式的匹配拆分此字符串

charAt() 方法用於返回指定索引處的字符。索引範圍爲從 0 到 length() - 1


35:怎麼定義一個數組?int  或String 類型的?

   int anArray2 = new int[10] ;int [] intArr= {1,2,3,4};    int [] inta1= {};String 同int 


 36:Servlet 的生命週期?

  加載 Servlet的 class實例化 Servlet----->調用 Servlet的 init完成初始化---->響應請求(Servlet的 service方法)調用doget()或dopost()方法----->Servlet容器關閉時(Servlet的destory方法)


 37:各類類型的轉換    

38:Jsp 中的@include  


 39:虛擬機加載類的過程  

  當java編譯器將.java文件編譯成.class文件後,須要JVM執行.class文件,將class文件加載到內存中,從而對數據進行校驗、解析和初始化


 40:TCP協議,通訊


 41:數據的裝箱與拆箱? int 與Integer 區別?

    1  Integer 是 int 包裝類,int 是八大基本數據類型之一

  二、Integer 是類,默認值爲null,int是基本數據類型,默認值爲0;

  三、Integer 表示的是對象,用一個引用指向這個對象,而int是基本數據類型,直接存儲數值


42:JDK和CGLIB生成動態代理類的區別:

       JDK動態代理只能針對實現了接口的類生成代理(實例化一個類)。此時代理對象和目標對象實現了相同的接口,目標對象做爲代理對象的一個屬性,具體接口實現中,能夠在調用目標對象相應方法先後加上其餘業務處理邏輯
CGLIB是針對類實現代理,主要是對指定的類生成一個子類(沒有實例化一個類),覆蓋其中的方法


43:SpringMVC與Struts2區別與比較總結   https://blog.csdn.net/chenleixing/article/details/44570681

44:post與get的區別  ?

45:Override和Overload的含義以及區別  

46:內存溢出是什麼? 對象有被指向的引用,可是再也用不到它就是內存溢出了


47:class Number{

  int i;
  };
public class TestCommonClass {
  public static void main(String[] args) {
  Number n1 = new Number();
  Number n2 = new Number();
  n1.i=9;
  n2.i=47;
  System.out.println("n1.i:"+n1.i+",n2.i:"+n2.i);
  n1=n2;
  System.out.println("n1.i:"+n1.i+",n2.i:"+n2.i);
  n1.i=27;
  System.out.println("n1.i:"+n1.i+",n2.i:"+n2.i);
  }

  } 

    結果:

  n1.i:9,n2.i:47
  n1.i:47,n2.i:47
  n1.i:27,n2.i:27


48:public class TestHelloString {

public static void main(String[] args) {

String s1="Hello";
String s2="Hello";
String s3="Hel"+"lo";
String s4="Hel"+new String("lo");
String s5=new String("Hello");
String s7="H";
String s8="ello";
String s9=s7+s8;

System.out.println(s1==s2);//true
System.out.println("s1.equeals s2:"+s1.equals(s2));//true
System.out.println(s1==s3);//true
System.out.println("s1.equeals s3:"+s1.equals(s3));//true
System.out.println(s1==s4);//false
System.out.println("s1.equeals s4:"+s1.equals(s4));//true
System.out.println(s1==s5);//false
System.out.println("s1.equeals s5:"+s1.equals(s5));//true
System.out.println(s1==s9);//false
System.out.println("s1.equeals s9:"+s1.equals(s9));//true
System.out.println(s4==s5);//false
System.out.println("s4.equeals s5:"+s4.equals(s5));//true

}}


49:public class TestDoWhile {

  public static void main(String[] args) {
  int x=0;
  int y=10;
  do{
    y--;
    x++;
  }while(x<5);
  System.out.println(x+","+y);
  }}  答案: 5,5


50:編譯失敗   compilation fails 

51:Jvm 的內存分佈?   

棧:數組引用,局部變量,對象的引用。

堆區:存儲對象自己的以及數組,實例變量。

方法區:存儲了每一個類的信息(包括類的名稱、方法信息、字段信息)、靜態變量、常量以及編譯器編譯後的代碼等


 52:關於靜態代碼塊,實例代碼塊, 父類構造方法,子類構造方法, 靜態變量,變量的加載順序?

public class TestMethodCiXu extends Test1{
  static{
  new Print("a");
  }
  public static Print obj1=new Print("b");
  public Print obj2=new Print("c");
  public TestMethodCiXu(){
  new Print("d");
}
public static Print obj3=new Print("e");
public Print obj4=new Print("f");
public static void main(String[] args) {
TestMethodCiXu obj1 = new TestMethodCiXu();
System.out.println("----------------------");
TestMethodCiXu obj2 = new TestMethodCiXu();

}}

class Test1{
public static Print obj1=new Print("1");
public Print obj2=new Print("2");
public static Print obj3=new Print("3");
static{
new Print("4");
}
public static Print obj4=new Print("5");
public Print obj5=new Print("6");
public Test1(){
new Print("7");
}
}
class Print{
public Print(String s){
System.out.print(s+"");
}

總結:  加載順序  第一次建立對象: 1:先父類 ,再子類, 2     父類  靜態變量/靜態代碼塊    >  子類  靜態變量 / 靜態代碼塊 > 父類   變量  > 父類 無參構造>子類  變量 >子類 無參構造   第二次加載: 1:靜態變量與靜態代碼塊不執行。2  父類變量> 父類構造方法 > 子類 變量> 子類構造方法 


53:Spring Bean 的生命週期?


54:runtimeException 有哪些?  

NullPointerException - 空指針引用異常
ClassCastException - 類型強制轉換異常。
IllegalArgumentException - 傳遞非法參數異常。
ArithmeticException - 算術運算異常
ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常
IndexOutOfBoundsException - 下標越界異常
NegativeArraySizeException - 建立一個大小爲負數的數組錯誤異常
NumberFormatException - 數字格式異常
SecurityException - 安全異常
UnsupportedOperationException - 不支持的操做異常


55:編譯異常IOException、SQLException

56:Servlet 的生命週期,及servlet 的單實例,只能建立一個對象,用到了單例,模板設計模


 57:spirng 有哪些模塊? Aop  ORM, DAO,CORE ,WEB,MVC,CONTEXT


 58:hibernate 拒絕鏈接,服務器崩潰的緣由有哪些? 

  1:driver,url, pw 錯誤,2,db 沒開  3.網絡問題 4.服務器鏈接人數有限制


 59:hibernate 與 mybatis 的區別?

          Mybatis和hibernate不一樣,它不徹底是一個ORM框架,由於MyBatis須要程序員本身編寫Sql語句,不過mybatis能夠經過XML或註解方式靈活配置要運行的sql語句,並將java對象和sql語句映射生成最終執行的sql,最後將sql執行的結果再映射生成java對象。 
         Mybatis學習門檻低,簡單易學,程序員直接編寫原生態sql,可嚴格控制sql執行性能,靈活度高,很是適合對關係數據模型要求不高的軟件開發,例如互聯網軟件、企業運營類軟件等,由於這類軟件需求變化頻繁,一但需求變化要求成果輸出迅速。可是靈活的前提是mybatis沒法作到數據庫無關性,若是須要實現支持多種數據庫的軟件則須要自定義多套sql映射文件,工做量大。 
       Hibernate對象/關係映射能力強,數據庫無關性好,對於關係模型要求高的軟件(例如需求固定的定製化軟件)若是用hibernate開發能夠節省不少代碼,提升效率。可是Hibernate的缺點是學習門檻高,要精通門檻更高,並且怎麼設計O/R映射,在性能和對象模型之間如何權衡,以及怎樣用好Hibernate須要具備很強的經驗和能力才行。 
總之,按照用戶的需求在有限的資源環境下只要能作出維護性、擴展性良好的軟件架構都是好架構,因此框架只有適合纔是最好。


 60:oracle 與 MySQL的區別?        https://www.cnblogs.com/TaoLeonis/p/7043543.html

MysqlOracle 的對比

區別點

Mysql

Oracle

數據類型

CHAR:定長字符串,適合主鍵

VARCHAR:變長字符串

FLOAT,     數值型

 DOUBLE,  數值型             

DATE ,      日期型         

 INT         整型  

字符類型 char 定長字符類型 varchar可變長的字符類型  varchar2 可變長的字符類型

二進制大對象 BLOB 主要用來存儲圖片,音頻,視頻....

文本大對象 CLO主要用來存放大文本

Date

數字類型 number

主鍵自動增加

Auto_increment 主鍵必須是整型才能夠自增加

如creat TABLE t1 (tid INT (10) PRIMARY KEY auto_increment,

tname varchar (10),tage int(2));

Oracle 中給主鍵設置自增加,先設序列,在設置觸發器.

單引號的處理

 MYSQL裏能夠用雙引號包起字符串,

ORACLE裏只能夠用單引號包起字符串。在插入和修改字符串前必須作單引號的替換:把全部出現的一個單引號替換成兩個單引號

分頁

limit是mysql的語法
select * from table limit m,n
其中m是指記錄開始的index,從0開始,表示第一條記錄
n是指從第m+1條開始,取n條。limit 2,4
即取出第3條至第6條,4條記錄

Oracle 中用rownum .取前n條數據,oracle中用rownum < m;

1:其中m-1 等於要取的條數

2:rownum 只能有 < ,<= ,沒有 >

3: 如m爲6,則取得是前5條數據。

 日期字段

MYSQL日期字段分DATE和TIME兩種

ORACLE日期字段只有DATE,包含年月日時分秒信息

空字符的處理

MYSQL的非空字段也有空的內容

如:name != ""這樣在mysql下不會報錯

ORACLE裏定義了非空字段就不允許有空的內容 。 若是爲NULL或空字符,須要把它改爲一個空格的字符串。如:oracle下的要換成name is not null 

Sql語句group by

Mysql不要求group by 後的字段 必定要出如今select 後面。

oracle中sql 的group by 後的字段 必定要出如今select 後面

開源項目

MySQL是開源的項目

付費

SQL語法的不一樣

MySQL較爲靈活

Oracle較爲嚴格

 

 

 

事務

事務的提交

MySQL默認是自動提交

 

Oracle默認不自動提交,須要用戶手動提交

 

事務隔離級別

MySQL是可重複讀

 

讀已提交

對事務的支持

MySQL在innodb存儲引擎的行級鎖的狀況下才可支持事務

Oracle則徹底支持事務

 

保存數據的持久性

MySQL是在數據庫更新或者重啓,則會丟失數據

Oracle把提交的sql操做線寫入了在線聯機日誌文件中,保持到了磁盤上,能夠隨時恢復

用戶權限

放在mysql 本身的mysql 庫中

oracle 的權限是跟着表空間走的


 61:& 與&& 的區別?  

  首先記住&是位操做,而&&是邏輯運算符。另外須要記住邏輯運算符具備短路特性,而&不具有短路特性


 62:springmvc 的工做流程? 

1用戶發起請求到前端控制器(DispatcherServlet)

2 前端控制器會找處處理器映射器(HandlerMapping)經過HandlerMapping完成url到controller映射的組件,找到handler,返回給dis。

3 前端控制器 找到 處理適配器HandlerAdapter,訪問處理器,並執行,

4 執行處理器獲得mv,最終返回給 前端控制器

5 前端控制器 請求 視圖解析器vr,獲得視圖對象,vr根據名稱獲得頁面, 返回給前端控制器

6 前端控制器 進行視圖渲染,返回給用戶


63:struts2 的mvc 模式?


 64:hibernate的併發模式?怎麼去處理併發問題? 

  Hibernate的Session對象是非線程安全的, 即單個事務 ,它一般只使用一次, 而後就丟棄。當多個事物併發訪問同一個資源會引起一系列的問題。

  解決方法:

  1  設置事務隔離級別。 
  2  Serializable:串行化。隔離級別最高 

   3 設置鎖:樂觀鎖和悲觀鎖


65:sql 的怎麼優化?

  1 對查詢進行優化,應儘可能避免全表掃描,首先應考慮在 where 及 order by 涉及的列上創建索引。

  2: 應儘可能避免在 where 子句中對字段進行 

    2.1 null 值判斷 

    2.2 使用!=或<>操做符

    2.3用 or 來鏈接條件

    2.4 like '%abc%' 

    2.5  表達式操做 如:where num/2=100

    2.6  函數操做  如: where substring(name,1,3)='abc'

    2.7 in 和 not in,不然將致使引擎放棄使用索引而進行全表掃描.

  3.在使用索引字段做爲條件時,若是該索引是複合索引,那麼必須使用到該索引中的第一個字段做爲條件時才能保證系統使用該索引,不然該索引將不會被使用,而且應儘量的讓字段順序與索引順序相一致.

  4.不少時候用 exists 代替 in 是一個好的選擇

  5.索引並非越多越好,索引當然能夠提升相應的 select 的效率,但同時也下降了 insert 及 update 的效率

  6.儘量的使用 varchar 代替 char,儘可能使用數字型字段.

  7.任何地方都不要使用 select * 

  8.避免頻繁建立和刪除臨時表,以減小系統表資源的消耗

  9.臨時表並非不可以使用,適當地使用它們能夠使某些例程更有效,例如,當須要重複引用大型表或經常使用表中的某個數據集時。可是,對於一次性事件,最好使用導出表

  10 在新建臨時表時,若是一次性插入數據量很大,那麼能夠使用 select into 代替 create table,避免形成大量 log ,  
以提升速度;若是數據量不大,爲了緩和系統表的資源,應先create table,而後insert

  11 若是使用到了臨時表,在存儲過程的最後務必將全部的臨時表顯式刪除,先 truncate table ,而後 drop table ,這樣能夠避免系統表的較長時間鎖定

  12.儘可能避免使用遊標,由於遊標的效率較差, 儘可能避免大事務操做,提升系統併發能力

  13.儘可能避免向客戶端返回大數據量,若數據量過大,應該考慮相應需求是否合理


 66:hibernate 自帶的分頁是什麼?,若不用它,採用什麼分頁?


 67:session 與cooker的區別,原理?

1cookie 是一種發送到客戶瀏覽器的文本串句柄,並保存在客戶機硬盤上,能夠用來在某個WEB站點會話間持久的保持數據

2session其實指的就是訪問者從到達某個特定主頁到離開爲止的那段時間。 Session實際上是利用Cookie進行信息處理的,當用戶首先進行了請求後,服務端就在用戶瀏覽器上建立了一個Cookie,當這個Session結束時,其實就是意味着這個Cookie就過時了。

3cookiesession的共同之處在於:cookiesession都是用來跟蹤瀏覽器用戶身份的會話方式。

4cookie session的區別是:cookie數據保存在客戶端,session數據保存在服務器端。

5session工做原理:session技術中全部的數據都保存在服務器上,客戶端每次請求服務器的時候會發送當前會話的sessionid,服務器根據當前sessionid判斷相應的用戶數據標誌,以肯定用戶是否登陸或具備某種權限


 68:web 項目下- web app libraries 怎麼來的?  lib 下的jar 包引進了後,自動生成的


69:關於java 中的 值傳遞

public class Example {

  String str = new String("good");

  char[] ch = { 'a', 'b', 'c' };

  public static void main(String args[]) {

    Example ex = new Example();

    ex.change(ex.str, ex.ch);

    System.out.print(ex.str + " and ");

    System.out.print(ex.ch);

}

public void change(String str, char ch[]) {

  str = "test ok";

  ch[0] = 'g';

  } 

答案:  good and gbc   

由於在java裏沒有引用傳遞,只有值傳遞

  這個值指的是實參的地址的拷貝,獲得這個拷貝地址後,你能夠經過它修改這個地址的內容(引用不變),由於此時這個內容的地址和原地址是同一地址,可是你不能改變這個地址自己使其從新引用其它的對象,也就是值傳遞 


70: 抽象類與抽象方法關係? 

   抽象類中的抽象方法沒有方法體。1.抽象類與抽象方法的關係是:抽象方法必須在抽象類中,若是抽象方法不在抽象類中,則會編譯報錯,這個是規定的。2.抽象類中的方法不必定要必須是抽象方法,能夠有抽象方法,和非抽象方法。其中非抽象方法,每每都是抽象類的全部子類所具備的,而抽象方法則由具體的不一樣子類實現不一樣的方法


71:抽象類和接口的區別,作個總結吧:


 72: notify()  與notifyAll()的區別   

   若是線程調用了對象的 wait()方法,那麼線程便會處於該對象的等待池中,等待池中的線程不會去競爭該對象的鎖。當有線程調用了對象的 notifyAll()方法(喚醒全部 wait 線程)或 notify()方法(只隨機喚醒一個 wait 線程),被喚醒的的線程便會進入該對象的鎖池中,鎖池中的線程會去競爭該對象鎖。也就是說,調用了notify後只要一個線程會由等待池進入鎖池,而notifyAll會將該對象等待池內的全部線程移動到鎖池中,等待鎖競爭


73:如何創建索引。mysql,Oracle中呢?

  什麼樣的字段應該建立索引呢?

1.該字段中存儲的數據庫量比較大
2.該字段的數據不多執行DML操做( update,insert)
3.該字段常常出如今查詢條件中(也就是WHERE子句)

---------------------------------------------------------------

Mysql

爲何使用索引?

  若是未使用索引,不得不首先以第一條記錄開始,而後讀完整個表直到它找出相關的行.

索引分類?

  PRIMARY:主鍵索引。索引列惟一且不能爲空;一張表只能有一個主鍵索引(主鍵索引一般在建表的時候就指定)

  NORMAL:普通索引。索引列沒有任何限制;

  UNIQUE:惟一索引。索引列的值必須是惟一的,但容許有空;

怎麼建立.指定,刪除索引?

   create index 索引名 on 表名(列名); 

  ALTER TABLE 表名 ADD 索引名(列名)

  DROP INDEX 索引名 ON 表名

注意事項

  只要列中包含NULL值將不會被包含在索引中,組合索引只要有一列含有NULL值,那麼這一列對於組合索引就是無效的


oracle

  建立索引:create index 索引名 on 表名(列名); 

  刪除索引:DROP INDEX 索引名


74:java與js中字符串截取substring() 與substr()方法區別

substring 與substr 區別

 

JAVA

JS

例如: var str=「Olive」

    1 Str.substring(3,4); 

2  Str.substr(3,4);

總結

JAVA

JS

substring(start,end)

下標

 

1:參數:12

2:第一個參數表示從第幾位下標開始, 第二位表明下標

1:參數:12

2:第一個參數表示從第幾位下標開始, 第二位表明下標

「v」

「v」

1JSJAVA的截取字符串substring()使用方法同樣

2java沒有substr()的使用方法

3注意:2個方法的下標開始位置都是0.

4:方法只有一個參數時,兩個方法用法一致,即從該下標開始截取到字符串尾。java與js中都同樣

 

Substr(a,b)

長度

 

 無該方法

1:參數 12

2:第一個參數表示從第幾位下標開始,第二位表明長度

 

 

「ve」



76:char型變量中能不能存貯一箇中文漢字?爲何? 

    char型佔兩個字節16位,一個漢字佔用兩個字節,java默認採用unicode編碼,一個Unicode碼是16位,因此java中能char類型能存一個漢字


77:使用final關鍵字修飾一個變量時,是引用不能變,仍是引用的對象不能變? 

   使用final關鍵字修飾一個變量時,是指引用變量不能變,引用變量所指向的對象中的內容仍是能夠改變的


 78:請說出做用域public,private,protected,以及不寫時的區別   

   private<  friendly  < protected <  public


79:線程的幾種狀態:

  新建、就緒、運行、阻塞、死亡 


80:多線程都有哪些經常使用方法?如何使用?      

   sleep()  使當前線程(即調用該方法的線程)暫停執行一段時間,讓其餘線程有機會繼續執行,但它並不釋放對象鎖

   yield()   該方法與sleep()相似,只是不能由用戶指定暫停多長時間,而且yield()方法只能讓同優先級的線程有執行的機會。

   wait() 方法使當前線程暫停執行並釋放對象鎖標示 ,讓其餘線程能夠進入synchronized數據塊

   notify()方法  notifyAll()

   Run()start()   把須要處理的代碼放到run()方法中  start()方法啓動線程將自動調用run()方法,這個由java的內存機制規定的。而且run()方法必需是public訪問權限,返回值類型爲void。

  wait()和notify(),notifyAll()是Object類的方法,sleep()和yield()是Thread類的方法

  interrupt() 中斷線程。

   isAlive() 測試線程是否處於活動狀態


81:String s1 = "Programming";

  String s2 = new String("Programming");
  String s3 = "Program" + "ming";
  System.out.println(s1 == s2);   //false
  System.out.println(s1 == s3);   //true


82:    int i = 1;   int j;   j = i++;  j++;      int m=++i; 

  System.out.println("i: "+i);//3
  System.out.println("j: "+j);//2
  System.out.println("m: "+m);//3


83:將 兩個字符串數組放到一個新字符串數組中。 

  String[] str1 = {"Hello","world","java"};
  String[] str2 = {"Veriable","syntax","interator"};
  String[] both = (String[]) ArrayUtils.addAll(str1, str2);
  System.out.print(both);


84:實體類書寫規範

1.實現 Serializable 接口
2.提供一個無參構造
3 對私有屬性,提供訪問方法。
4.重寫 equals 方法 toString()方法

 85 代碼中如何實現多態

實現多態主要有如下三種方式:

1. 接口實現 
2. 繼承父類重寫方法 
3. 同一類中進行方法重載


 86    多態的好處

  1. 可替換性:多態對已存在代碼具備可替換性

  2. 可擴充性:增長新的子類不影響已經存在的類結構

  3. 接口性:多態是超類經過方法簽名,向子類提供一個公共接口,由子類來完善或者重寫它來實現的。

  4. 靈活性

  5. 簡化性


87 java 建立對象有幾種方式? 

1:採用new

2:經過反射

3:採用clone

4:經過序列化機制


88  final, finalize和finally的不一樣之處

  final 是一個修飾符,能夠修飾變量、方法和類。若是 final 修飾變量,意味着該變量的值在初始化後不能被改變。finalize 方法是在對象被回收以前調用的方法,給對象本身最後一個復活的機會,可是何時調用 finalize 沒有保證。finally 是一個關鍵字,與 try 和 catch 一塊兒用於異常的處理。finally 塊必定會被執行,不管在 try 塊中是否有發生異常


89  如何判斷一個對象是否應該被回收? 對象可達性分析


90  調用System.gc()會發生什麼?  通知GC開始工做,可是GC真正開始的時間不肯定。


91  爲何wait()方法和notify()/notifyAll()方法要在同步塊中被調用

  這是JDK強制的,wait()方法和notify()/notifyAll()方法在調用前都必須先得到對象的鎖


 92:@Autowired 與@Resource 的區別?

  1:autowired spring提供,按類型進行裝配,2 resource j2ee 提供,按名稱裝配。


 93:如何解決hibernate中,懶加載load方法出現,no session的錯誤? 

   解決:web.xml中配置一個OpenSessionInViewFilter過濾器,注意,這個必定要配置在strus2/springMVC 的核心過濾器前面


94:如何解決Hibernate中出現併發所引發的數據庫內容讀取問題,如何進行解決?  

   採起悲觀鎖與樂觀鎖的機制來解決這個問題 ,悲觀鎖---------鎖的粒度爲數據庫   sql 後+ for update , 樂觀鎖---鎖的粒度爲表  


95:Hibernate有哪幾種查詢數據的方式?

  3種,hql、條件查詢QBC(QueryBy Criteria)、原生sql (經過createSQLQuery創建)


96:hibernate中get和load方法區別?

1)get若是沒有找到會返回null, load若是沒有找到會拋出異常。

2)get會先查一級緩存, 再查二級緩存,而後查數據庫;load會先查一級緩存,若是沒有找到,就建立代理對象, 等須要的時候去查詢二級緩存和數據庫。


97:如何解決servlet單例問題形成的線程不安全 

  把這個成員變量改爲局部變量,那麼全部的線程都會有一份,不會形成線程安全


 98:分佈式通訊Webservies?Webservies(=wsdl+soap)

異構系統間的通訊。客戶端存根與服務端骨架的通訊,使用axis 等服務。

Wsdl  Webservies描述語言

Soap  面向對象的通訊協議。(Http+xml)

Uddi: 目錄(用不上)

Webservices 靜態調用 (在客戶端生成存根文件)項目應用步驟:

1:將axisjar包  放到 tomcat/webapps/

2:將wsdl服務保存成xml文件,保存到包中

3:能夠使用批處理命令,將axisjar 加到環境變量classpath 中。將wsdl2java。放到src

4cmd 執行批處理命令。刷新項目。生成存根文件

5:根據存根文件,調用接口,便可實現異構系統的通訊


99:jsp和servlet 的區別,共同點,使用場景? 

       JSP在本質上就是SERVLET,Servlet徹底是JAVA程序代碼構成,採用Servlet來控制業務流程,而採用JSP來生成動態網頁,JSP側重於視圖,Servlet主要用於控制邏輯。


100 springboot 怎麼用 ?

  Spring Boot 整合了全部的框架.  \

    二:Spring Boot的基礎結構共三個文件:

 1:src/main/java  程序開發以及主程序入口

 2:src/main/resources 配置文件

 3:src/test/java  測試程序

spingboot建議的目錄結果以下: 

  project

      Application.java

      + -  domain

                 +- Customer.java

    +- CustomerRepository.java
     +- service     +- CustomerService.java     +- controller     +- CustomerController.java

一、Application.java 建議放到跟目錄下面,主要用於作一些框架配置

二、domain目錄主要用於實體(Entity)與數據訪問層(Repository)

三、service 層主要是業務類代碼

四、controller 負責頁面訪問控

--------------------------------------------------------------------------------------    

三:使用環境:   

 1:若使用的是eclipse ,需安裝插件Spring tool suite(sts),若使用的是idea旗艦版,idea 自帶了springboot 插件。

    2: 推薦使用maven3+,java8
  使用的問題:
  注意:
    1:在idea中建立springboot 項目時,必定要配置maven 的安裝路徑,
      setting 的覆蓋路徑,本地maven 路徑。不然註解引不進來。
   2:springboot的 ***Application.java 文件要與controller,service,domain
    的包在同一級下,由於啓動***application的main方法後,要掃描註解。
      @SpringBootApplication
springboot 的核心註解,開啓spring自動配置。
-----------------------------------
四:springboot 開發web項目的pom.xml 配置
<modelVersion>4.0.0</modelVersion>
<!--項目說明-->
<groupId>com.bj.boot2</groupId>
<artifactId>boot2</artifactId>
<version>1.0.0</version>

<!--繼承父級項目的依賴-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.BUILD-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<!--項目描述-->
<name>boot2</name>
<description>Demo project for Spring Boot</description>
<!--項目配置的jdk-->
<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<!--springboot開發web項目的起步依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--springboot開發web項目測試的起步依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<!--springboot 提供的項目打包編譯插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
--------------------------------------
 
五:springboot 核心配置文件:(
配置端口,上下文等 )

配置位置:src/main/resources/

方式:兩種:application.propertis,或 application.yml .

注意:application.yml 配置時的空格問題。兩個格式同時用時 application.propertis 優先.

多環境配置:

如:resources下有  application.propertis  application-test.propertis application-dev.propertis 多環境下使用時,能夠在application中激活用哪一個,spring.profiles.active=dev/test 就能夠了

-------------------------------------------------------------------------------------

六:springboot 下的springmvc 經常使用註解:

@Controller   

@ResponseBody

@GetMapping: get請求+requestMapping   

@PostMapping: Post請求+requestMapping  

@RestController: 返回的必定是字符串或json數據,是@Controller和 @ResponseBody 註解的組合註解.

-------------------------------------------------------------------------------

七:idea 中Jsp 的開發配置:

  1:pom.xml 引jsp的依賴,4個。

  2:application.properties 下配置jsp 的先後綴。

  3:在main下建立webapp 文件夾,webapp下放jsp.

  4:在pom.xml >build> 添加 resources 標籤依賴,用於webapp/jsp 的路徑指引,idea 中須要配,eclipse 中不須要配(注意) 

  5:正常開發JspController .

---------------------------------------------------------------------------------------

 八:idea 中對事物的管理。

   1:在springboot 的入口***application.java 上加  @EnableTransactionManagement開啓事物

     2: 在具體的業務層service層的方法上加上@Transactional.

  注意:springboot中service層的方法上若不加事物(如update方法),則方法中若存在運行時異常,數據照樣commit。加上事物後,則數據庫數據不會更新

----------------------------------

 九:springboot 的熱部署

  熱部署指的是修改代碼後,服務器自動加載修改的代碼,提升開發效率。

  在pom.xml 添加 spring-boot-devtools 的插件。

  注意:使用中出現明明已啓動,沒生效,這時手動啓動程序。

 ------------------------------------------------------------------------------------------

十:springboot 中的servlet使用。

  1:在servlet類上加上@webservlet("urlPatterns="servlet 映射路徑"")、

  2:在****application的類上加servlet的掃描註解。@ServletConpentScan(basePackages="servlet的路徑")。

-----------------------------------------------------------------------

十一:springBoot 中開發非web項目。

  Java項目 步驟:new project/module> springboot> core>finish.

  啓動java項目:springbootContext.getBean("類");獲得類對象,再調方法,啓動run

  注意:java項目建立時不要選web,則pom.xml 中的starter-web的web就沒有了,就成了springboot開發java項目的依賴。

 ---------------------------------------------------------------------------------------------

十二:springboot中web項目打war/jar 包。

  打war包:

    1: ***application.java 繼承 springbootServletInitializer, 覆蓋 一個方法。

    2:pom.xml 中的打包方式改成war

    3.pom.xml 配置maven的打包插件。

    4.運行maven install,成功後在pom.xml 的打包路徑下看到    ...........war 文件.

  打jar包:

    1:pom.xml 中的打包方式改成jar.

    2.pom.xml 配置maven的打包插件。

    3:運行maven install,成功後在pom.xml 的打包路徑下看到    ...........jar 文件

   注意:打 jar包時,maven的打包插件使用 1.4.2 的版本 。其餘的版本暫時打 jar包都有點問題。

 -----------------------------------------------------------------------------------------

十三:jar/war 包上線部署

  1:能夠將jar/war 放到tomcat的webapps 下部署。

  2:能夠將war 放到Linux 下的shell 腳本下執行。


 101 ngnix? 

一、請解釋一下什麼是Nginx

Nginx是一個web服務器和方向代理服務器,用於HTTP、HTTPS、SMTP、POP3和IMAP協議。

2請解釋Nginx如何處理HTTP請求。

Nginx使用反應器模式。主事件循環等待操做系統發出準備事件的信號,這樣數據就能夠從套接字讀取,在該實例中讀取到緩衝區並進行處理。單個線程能夠提供數萬個併發鏈接。

 3 使用「反向代理服務器」的優勢是什麼?

反向代理服務器能夠隱藏源服務器的存在和特徵。它充當互聯網雲和web服務器之間的中間層。這對於安全方面來講是很好的,特別是當您使用web託管服務時。

4請列舉Nginx服務器的最佳用途。

Nginx服務器的最佳用法是在網絡上部署動態HTTP內容,使用SCGI、WSGI應用程序服務器、用於腳本的FastCGI處理程序。它還能夠做爲負載均衡器。

5 請解釋Nginx服務器上的Master和Worker進程分別是什麼?

Master進程:讀取及評估配置和維持

Worker進程:處理請求

6請解釋是否有可能將Nginx的錯誤替換爲502錯誤、503?

502 =錯誤網關

503 =服務器超載

7 nginx經常使用命令
啓動nginx  ./sbin/nginx
中止nginx ./sbin/nginx -s stop    ./sbin/nginx -s quit
重載配置  ./sbin/nginx -s reload(平滑重啓)  service nginx reload 
重載指定配置文件 ./sbin/nginx -c /usr/local/nginx/conf/nginx.conf
查看nginx版本 ./sbin/nginx -v
檢查配置文件是否正確 ./sbin/nginx -t
顯示幫助信息 ./sbin/nginx -h

8 nginx狀態碼

499:服務端處理時間過長,客戶端主動關閉了鏈接
9 nginx功能
做爲http server(代替apache,對PHP須要FastCGI處理器支持)
反向代理服務器
實現負載均衡
虛擬主機
10 502錯誤可能緣由
(1).FastCGI進程是否已經啓動
(2).FastCGI worker進程數是否不夠
(3).FastCGI執行時間過長
11ignx配置
worker_processes  8;     工做進程個數
worker_connections  65535;  每一個工做進程能併發處理(發起)的最大鏈接數(包含全部鏈接數)
listen       80;                                            監聽端口
server_name  rrc.test.jiedaibao.com;       容許域名
12 nginx和apache的區別

輕量級,一樣起web 服務,比apache 佔用更少的內存及資源 
抗併發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能
高度模塊化的設計,編寫模塊相對簡單 
最核心的區別在於apache是同步多進程模型,一個鏈接對應一個進程;nginx是異步的,多個鏈接(萬級別)能夠對應一個進程 
13 
【試題1】缺省安裝的 nginx + php-fpm 環境,假設用戶瀏覽一個耗時的網頁,可是卻在服務端渲染頁面的中途關閉了瀏覽器,那麼請問服務端的 php 腳本是繼續執行仍是退出執行?

【解答】正常狀況下,若是客戶端client異常退出了,服務端的程序仍是會繼續執行,直到與IO進行了兩次交互操做。服務端發現客戶端已經斷開鏈接,這個時候會觸發一個user_abort,若是這個沒有設置ignore_user_abort,那麼這個php-fpm的程序纔會被中斷。

14【試題2】首先,Nginx 日誌格式中的 $time_local 表示的是什麼時間?請求開始的時間?請求結束的時間?其次,當咱們從前到後觀察日誌中的 $time_local 時間時,有時候會發現時間順序先後錯亂的現象,請說明緣由。

【解答】$time_local:在服務器裏請求開始寫入本地的時間,由於請求發生時間有前有後,因此會時間順序先後錯亂


102 jquery 有哪些選擇器? 

一.基本選擇器
    $("#test")      選擇id值爲test的元素,id值是惟一的因此返回單個元素。
    $("div")         選擇全部的div標籤元素,返回div元素數組
    $(".myclass")     選擇使用myclass類的css的全部元素
    $("*")            選取全部元素。
    $("#test,div,.myclass")    選取多個元素

----------------------------------------------------------------------

二 .層次選擇器
    $("div span")         選取<div>裏的全部<span>元素
    $("div >span")       選取<div>元素下元素名是<span>的子元素
    $("#one +div")       選取id爲one的元素的下一個<div>同輩元素等同於$("#one").next("div")
    $("#one~div")   選取id爲one的元素的元素後面的全部<div>同輩元素等同於$("#one").nextAll("div")
    $("#one").siblings("div")   獲取id爲one的元素的全部<div>同輩元素(無論先後)
    $("#one").prev("div")     獲取id爲one的元素的前面緊鄰的同輩<div>元素
因此 獲取元素範圍大小順序依次爲:
$("#one").siblings("div")>$("#one~div")>$("#one +div") 或是$("#one").siblings("div")>$("#one").nextAll("div")>$("#one").next("div")

----------------------------------------------------------------------

3.1.基本過濾選擇器
    $("div:first")         選取全部<div>元素中第1個<div>元素
    $("div:last")         選取全部<div>元素中最後一個<div>元素
    $("input:not(.myClass)")     選取class不是myClass的<input>元素
    $("input:even")         選取索引是偶數的<input>元素(索引從0開始)
    $("input:odd")        選取索引是基數的<input>元素(索引從0開始)
    $("input:eq(2)")        選取索引等於2的<input>元素
    $("input:gt(4)")         選取索引大於4的<input>元素
    $("input:lt(4)")        選取索引小於4的<input>元素
    $(":header")        過濾掉全部標題元素,例如:h一、h二、h3等
    $("div:animated")     選取正在執行動畫的<div>元素
    $(":focus")          選取當前獲取焦點的元素

---------------------------------------------------------------------

3.2.內容過濾選擇器
    $("div:contains('Name')")      選取全部<div>中含有'Name'文本的元素
    $("div:empty")            選取不包含子元素(包括文本元素)的<div>空元素
    $("div:has(p)")            選取全部含有<p>元素的<div>元素
    $("div:parent")            選取擁有子元素的(包括文本元素)<div>元素

----------------------------------------------------------------------------------------

3.3.可見性過濾選擇器
     $("div:hidden")                選取全部不可見的<div>元素
       $("div:visible")                 選取全部可見的<div>元素

----------------------------------------------------------------------------------------

3.4 屬性過濾選擇器
    $("div[id]")                 選取全部擁有屬性id的元素
    $("input[name='test']")          選取全部的name屬性等於'test'的<input>元素
    $("input[name!='test']")         選取全部的name屬性不等於'test'的<input>元素
    $("input[name^='news']")        選取全部的name屬性以'news'開頭的<input>元素
    $("input[name$='news']")        選取全部的name屬性以'news'結尾的<input>元素
    $("input[name*='news']")        選取全部的name屬性包含'news'的<input>元素
    $("div[title|='en']")        選取屬性title等於'en'或以'en'爲前綴(該字符串後跟一個連字符'-')的<div>元素
    $("div[title~='en']")           選取屬性title用空格分隔的值中包含字符en的<div>元素
    $("div[id][title$='test']")          選取擁有屬性id,而且屬性title以'test'結束的<div>元素

-------------------------------------------------------------------------------------------

3.5.子元素過濾選擇器
    $("div .one:nth-child(2)")      選取class爲'one'的<div>父元素下的第2個子元素
    $("div span:first-child")         選取每一個<div>中的第1個<span>元素
    $("div span:last-child")         選取每一個<div>中的最後一個<span>元素
    $("div button:only-child")      在<div>中選取是惟一子元素的<button>元素

-------------------------------------------------------------------------------------

3.6.表單對象屬性過濾選擇器
    $("#form1 :enabled")      選取id爲'form1'的表單內全部可用元素
    $("#form2 :disabled")      選取id爲'form2'的表單內全部不可用元素
    $("input :checked")       選取全部被選中的<input>元素
    $("select option:selected")    選取全部的select 的子元素中被選中的元素

------------------------------------------------------------------

四.表單選擇器
    $(":input")        選取全部<input>,<textarea>,<select> 和 <button>元素
    $(":text")         選取全部的單行文本框
    $(":password")     選取全部的密碼框
    $(":radio")        選取全部單的選框
    $(":checkbox")      選取全部的多選框
    $(":submit")        選取全部的提交按鈕
    $(":image")         選取全部的圖像按鈕
    $(":reset")        選取全部的重置按鈕
    $(":button")        選取全部的按鈕
    $(":file")           選取全部的上傳域
    $(":hidden")       選取全部不可見元素     


 103 ajax 有哪些參數?

1.url要求爲String類型的參數,(默認爲當前頁地址)發送請求的地址

2.type要求爲String類型的參數,請求方式(postget)默認爲get。注意其餘http請求方法,例如putdelete也能夠使用,但僅部分瀏覽器支持。

3.timeout要求爲Number類型的參數,設置請求超時時間(毫秒。此設置將覆蓋$.ajaxSetup()方法的全局設置。

4.async要求爲Boolean類型的參數,默認設置爲true,全部請求均爲異步請求。若是須要發送同步請求,請將此選項設置爲false。注意,同步請求將鎖住瀏覽器,用戶其餘操做必須等待請求完成才能夠執行。

5.cache要求爲Boolean類型的參數,默認爲true(當dataTypescript時,默認爲false),設置爲false不會從瀏覽器緩存中加載請求信息

6.data要求爲ObjectString類型的參數,發送到服務器的數據。若是已經不是字符串,將自動轉換爲字符串格式get請求中將附加在url。防止這種自動轉換,能夠查看  processData(防止自動轉換)選項。對象必須爲key/value格式,例如{foo1:"bar1",foo2:"bar2"}轉換爲&foo1=bar1&foo2=bar2。若是是數組,JQuery將自動爲不一樣值對應同一個名稱。例如{foo:["bar1","bar2"]}轉換爲&foo=bar1&foo=bar2

7.dataType要求爲String類型的參數,預期服務器返回的數據類型。若是不指定JQuery將自動根據httpmime信息返回responseXMLresponseText,並做爲回調函數參數傳遞。可用的類型以下:
  xml:返回XML文檔,可用JQuery處理。
  html:返回純文本HTML信息;包含的script標籤會在插入DOM時執行。
  script:返回純文本JavaScript代碼。不會自動緩存結果。除非設置了cache參數。注意在遠程請求時(不在同一個域下),全部post請求都將轉爲get請求。
  json:返回JSON數據。
  jsonpJSONP格式。使用SONP形式調用函數時,例如myurl?callback=?JQuery將自動替換後一個「?」爲正確的函數名,以執行回調函數。
  text:返回純文本字符串。

8.beforeSend這個參數主要是爲了在向服務器發送請求前,執行一些操做。要求爲Function類型的參數,發送請求前能夠修改XMLHttpRequest對象的函數,例如添加自定義HTTP頭。在beforeSend中若是返回false能夠取消本次ajax請求。XMLHttpRequest對象是唯一的參數。
            function(XMLHttpRequest){
               this;   //調用本次ajax請求時傳遞的options參數
            }
10.success要求爲Function類型的參數,請求成功後調用的回調函數,有兩個參數。

         (1)服務器返回,並根據dataType參數進行處理後的數據。
         (2)描述狀態的字符串。
         function(data, textStatus){
            //data多是xmlDocjsonObjhtmltext等等
            this;  //調用本次ajax請求時傳遞的options參數
         }

error:
要求爲Function類型的參數,請求失敗時被調用的函數。該函數有3個參數,即XMLHttpRequest對象、錯誤信息、捕獲的錯誤對象(可選)

12.contentType
要求爲String類型的參數,當發送信息至服務器時,內容編碼類型默認爲"application/x-www-form-urlencoded"。該默認值適合大多數應用場合。

18.username要求爲String類型的參數,用於響應HTTP訪問認證請求的用戶名。

19.password要求爲String類型的參數,用於響應HTTP訪問認證請求的密碼。

20.processData要求爲Boolean類型的參數,默認爲true。默認狀況下,發送的數據將被轉換爲對象(從技術角度來說並不是字符串)以配合默認內容類型"application/x-www-form-urlencoded"。若是要發送DOM樹信息或者其餘不但願轉換的信息,請設置爲false


 104 :eacharts 動態數據加載?

  http://www.javashuo.com/article/p-nagjcjes-dg.html

1:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="zh-CN"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ECharts</title> <!-- 引入 echarts.js --> <script type="text/javascript" src="echarts.min.js"></script> <!-- 引入jquery.js --> <script type="text/javascript" src="jquery-1.12.3.js"></script> </head> <body> <!-- 爲ECharts準備一個具有大小(寬高)的Dom --> <div id="main" style="width: 600px;height:400px;"></div> <script type="text/javascript"> var myChart = echarts.init(document.getElementById('main')); // 顯示標題,圖例和空的座標軸 myChart.setOption({ title: { text: '異步數據加載示例' }, tooltip: {}, legend: { data:['銷量'] }, xAxis: { data: [] }, yAxis: {}, series: [{ name: '銷量', type: 'bar', data: [] }] }); myChart.showLoading(); //數據加載完以前先顯示一段簡單的loading動畫 var names=[]; //類別數組(實際用來盛放X軸座標值) var nums=[]; //銷量數組(實際用來盛放Y座標值) $.ajax({ type : "post", async : true, //異步請求(同步請求將會鎖住瀏覽器,用戶其餘操做必須等待請求完成才能夠執行) url : "TestServlet", //請求發送到TestServlet處 data : {}, dataType : "json", //返回數據形式爲json success : function(result) { //請求成功時執行該函數內容,result即爲服務器返回的json對象 if (result) { for(var i=0;i<result.length;i++){ names.push(result[i].name); //挨個取出類別並填入類別數組 } for(var i=0;i<result.length;i++){ nums.push(result[i].num); //挨個取出銷量並填入銷量數組 } myChart.hideLoading(); //隱藏加載動畫 myChart.setOption({ //加載數據圖表 xAxis: { data: names }, series: [{ // 根據名字對應到相應的系列 name: '銷量', data: nums }] }); } }, error : function(errorMsg) { //請求失敗時執行該函數 alert("圖表請求數據失敗!"); myChart.hideLoading(); } }) </script> </body> </html> 
2:後臺返回json數據

 105:js 中循環怎麼寫?

let len = myArray.Length for (let index = 0; index < len; index++) { console.log(myArray[index]) }
-------------------
 $.each(result,function(index,obj){ //result :數組, obj 當前對象,index 當前index.
  });

 106:easy-ui? 

介紹一下easyui的佈局
        分爲上,中,下,左,右面板  通常在工做中使用上(企業logo,登陸,退出) 左(菜單)中(展現數據)
easyui如何實現表單驗證
        提供了一個validatebox插件來驗證一個表單 input表單根據validType屬性來應用驗證 validType="email"郵箱驗證 required="true"必填項
        <input class="easyui-validatebox" type="text" name="name" validType="email" required="true"></input>
easyui如何實現表格分頁
        將pagination《陪覺誒尋》屬性設爲true  在數據網格下生成一個分頁工具欄  工具欄會發送連個參數到服務器 page當前頁 默認1  rows:每頁顯示行

問題1 

同時打開的標籤頁共享id,致使id衝突

解決方法:拋棄直接使用tab的href屬性,使用content,並讓content的內容爲iframe,iframe再指向對應的href

問題2:form表單中的reset無效

因爲上述div放在form表單內,致使resetSearchForm方法無效,具體表現爲點擊reset按鈕後確實清空了,但此時鼠標點進去某個控件,則控件以前的值會從新出現,說明重置無效,具體緣由不詳(不知道是否是form表單緩存了?),解決方法是將上述html代碼拿到form表單外部

問題3:combobox遠程獲取數據默認顯示第一條數據,且沒法清除

緣由:該條數據的value應該是0形成的,如

數據庫中存在這樣一條數據

1,無狀態,0(id,name,value)

將這一條數據加載到前端後直接顯示無狀態,而不是空數據,將value改成非0便可
問題:https://blog.csdn.net/mafan121/article/details/70174418

easy-ui 學習:https://www.cnblogs.com/xdp-gacl/category/571424.html


 107:json 中的JSON.stringify(),json.parse()是幹嗎的?

  JSON.stringify() 從一個對象中解析出字符串 

JSON.stringify({"a":"1","b":"2"})

結果是:"{"a":"1","b":"2"}"

JSON.parse()從一個字符串中解析出JSON對象

var str = '{"a":"1","b":"2"}';

JSON.parse(str);

結果是:Object{a:"1",b:"2"}


108: json 數據的格式是怎麼樣的?,怎麼取值?

1.數組方式:

        [
            {"key1": "value1"},

            {"key2": "value2"}

        ]

  2. 對象方式:

     {

          「key1: "value1",
           "key2": "value2",

           "key3": [

                {"key31": "value31"},
                {"key32": "value32"}
            ]

      }

取值:  json.parse(json 字符串); 解析成對象,用對象去. 屬性去獲得值


 109: json 中 list 轉 json? 

  能夠用 jsonArray放數據,再講jsonarray.toString()


 110: 如何調大jvm 內存?

   Tomcat   進入tomcat的bin目錄,使用文本編輯工具打開catalina.bat文件,在「rem ----- Execute The Requested Command」以後加上  set JAVA_OPTS=-Xms512m -Xmx512m。

  Xms 初始值,Xmx 最大值。

  注意:在設置tomcat內存的時候,不是越大越好,要結合實際狀況來設置,物理內存大小和自身應用所須要的內存,取一個合適的值。很難一次就設置合適,須要經過檢測工具屢次觀察內存的使用狀況和回收狀況


 111 :java用什麼定時任務框架? 怎麼配置? JS 怎麼定時?settimeout 和 setintvor

  使用的是spring3自帶的spring task。

  xml 配置:

  第一步:新建一個spring-task.xml配置文件。

<!-- 定義調用對象-->
<bean id="springTaskXml1" class="com.zhh.test.controller.SpringTaskXmlController"> </bean>

<!-- 開啓任務 -->
<!-- 配置相關類中方法的執行時間-->
<task:scheduled-tasks scheduler="taskScheduler" >
  <!-- 每隔 2秒執行一次 -->
  <task:scheduled ref="springTaskXml1" method="teskTest1" cron="*/2 * * * * ?"/>
  <!-- 天天凌晨 01:00 執行一次 -->
  <task:scheduled ref="springTaskXml1" method="teskTest2" cron="0 0 1 * * *"/>
</task:scheduled-tasks>
<!-- 線程個數(默認爲1個,多個任務同一時間內只能串行執行,設置多個則能夠並行執行) -->
<task:scheduler id="taskScheduler" pool-size="5"/>

  第二步:建一個定時任務類

public class SpringTaskXmlController {
  private static final Logger logger = Logger .getLogger(SpringTaskXmlController.class);

  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  /**
  * 定時任務方法1
  */
  public void teskTest1() {
      //logger.info("定時任務開始執行。。。");
    try {
      Thread.sleep(5000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
      System.out.println(sdf.format(new Date())+"執行定時任務1執行");
      //logger.info("定時任務執行結束。");
  }
    /**
    * 定時任務方法2
    */
   public void teskTest2() {
      System.out.println(sdf.format(new Date())+"執行定時任務2執行");
    }

}

  第三步:在spring的配置文件裏引入spring-task.xml配置文件

    <!-- 引入spring-task.xml配置文件 --> 

   <import resource="spring-task.xml"/>

---------------------------------------------------------------------------------

JS 中的setTimeout()和setInterval 定時方法。

    setTimeout方法是定時程序,也就是在什麼時間之後幹什麼。幹完了就拉倒。

    setInterval方法則是表示間隔必定時間反覆執行某操做。

  setTimeout (表達式,延時時間)//切記表達式是要加引號的;
  setInterval(表達式,交互時間)
  延時時間/交互時間是以豪秒爲單位的(1000ms=1s)

  例子:setInterval("showTime()",1000);


 112 :Junit 怎麼用?


 113:webservices 中怎麼網FTP 服務器上傳東西?


 114 java 怎麼實現併發控制?


 115: excel 大數據量下載? 500w條數據?

http://www.javashuo.com/article/p-hyduvgzr-hw.html

方法:

1:異步生成Excel,非實時,完成後使用某種方式通知用戶,每次刷新頁面獲取最新狀態、長鏈接方式實時通知

2: POI 改用 SXSSFWorkbook,循環中減小使用new,儘可能複用;String改成StringBuffer就不說 

3:生成多個excel文件,並打包成zip文件。

4:後臺使用多線程去下載,分別生成excel文件,而後再合併。

5:調整JVM 相關的參數 -Xmx....


 116:共享線程存在jvm 的哪一塊?生命週期呢?

  其中Method Area 和 Heap 是線程共享的,生命週期與JAVA程序運行的生命週期相 同。VM Stack,Native Method Stack 和Program Counter Register 是非線程共享的,生命週期與所屬線程相同。Gc 回收場所只發生在堆區。


 117:事物的隔離級別,傳播特性?

事務的隔離級別:

事務的隔離級別也分爲四種,由低到高依次分別爲:read uncommited(讀未提交)、read commited(讀提交)、read repeatable(讀重複)、serializable(序列化),這四個級別能夠逐個解決髒讀、不可重複讀、幻讀這幾類問題

  1. read uncommited:是最低的事務隔離級別,它容許另一個事務能夠看到這個事務未提交的數據。
  2. read commited:保證一個事物提交後才能被另一個事務讀取。另一個事務不能讀取該事物未提交的數據。
  3. repeatable read:這種事務隔離級別能夠防止髒讀,不可重複讀。可是可能會出現幻象讀。它除了保證一個事務不能被另一個事務讀取未提交的數據以外還避免瞭如下狀況產生(不可重複讀)。
  4. serializable:這是花費最高代價但最可靠的事務隔離級別。事務被處理爲順序執行。除了防止髒讀,不可重複讀以外,還避免了幻象讀。

spring事務傳播特性:

事務傳播行爲就是多個事務方法相互調用時,事務如何在這些方法間傳播。spring支持7種事務傳播行爲:

  propagation_requierd:若是當前沒有事務,就新建一個事務,若是已存在一個事務中,加入到這個事務中,這是最多見的選擇。

  propagation_supports:支持當前事務,若是沒有當前事務,就以非事務方法執行。

  propagation_mandatory:使用當前事務,若是沒有當前事務,就拋出異常。

  propagation_required_new:新建事務,若是當前存在事務,把當前事務掛起。

  propagation_not_supported:以非事務方式執行操做,若是當前存在事務,就把當前事務掛起。

  propagation_never:以非事務方式執行操做,若是當前事務存在則拋出異常。

  propagation_nested:若是當前存在事務,則在嵌套事務內執行。若是當前沒有事務,則執行與propagation_required相似的操做

Spring 默認的事務傳播行爲是 PROPAGATION_REQUIRED,它適合於絕大多數的狀況。


 118: 反射怎麼用?怎麼建立class 對象?

  1:將類路徑加載到內存中,獲得class對象。Class clz = Class.forName("com.zhenai.api.Apple");

    2:經過class 對像獲得構造器對象。Constructor appleConstructor = clz.getConstructor();

   3:根據構造器對象的newInstance()獲得反射類實例。Object appleObj = appleConstructor.newInstance();

   4:經過class 對象getMethod() 獲得方法對象。Method setPriceMethod = clz.getMethod("setPrice", int.class);

   5:經過方法對象調invoke ()方法,參數是反射類對象,執行該方法。setPriceMethod.invoke(appleObj, 14);

  獲取 Class 類對象有三種方法:

第一種,使用 Class.forName 靜態方法。當你知道該類的全路徑名時,你能夠使用該方法獲取 Class 類對象。

     Class clz = Class.forName("java.lang.String");

第二種,使用 .class 方法。

這種方法只適合在編譯前就知道操做的 Class。

     Class clz = String.class;

第三種,使用類對象的 getClass() 方法。

    String str = new String("Hello");     Class clz = str.getClass();

 119: springMVC 的單例,多例區別?怎麼配置?怎麼使用?

  Springmvc默認是單例模式.spring bean做用域有如下5個,

1.singleton:單例模式,當spring建立applicationContext容器的時候,spring會欲初始化全部的該做用域實例,加上lazy-init就能夠避免預處理;
2.prototype:原型模式,每次經過getBean獲取該bean就會新產生一個實例,建立後spring將再也不對其管理,

3.request:搞web的你們都應該明白request的域了吧,就是每次請求都新產生一個實例,和prototype不一樣就是建立後,接下來的管理,spring依然在監聽
4.session:每次會話,同上
5.global session:全局的web域,相似於servlet中的application

------------------------------------------------------

例子:
@RestController

@RequestMapping(value = "hello")

@Scope("prototype")

public class HelloController {

private int i = 0;

@RequestMapping(value = "test1")
 public int testSingle1() {
  ++i;
  return i;
 }

  @RequestMapping(value = "test2")
   public int testSingle2() {
    ++i;
    return i;
   }
}

  http://localhost:8080/hello/test1 
  http://localhost:8080/hello/test2 
  http://localhost:8080/hello/test1 

  @Scope("prototype")  。結果:1,1,1  

  Scope 不寫默認或@Scope("singleton"),則結果:1,2,3

-----------------------------------------------------------------------------

        用單例和多例的標準只有一個:
         當對象含有可改變的狀態時(更精確的說就是在實際應用中該狀態會改變),則多例,不然單例;

    注意:

      一、不要在controller中定義成員變量。 
      二、萬一必需要定義一個非靜態成員變量時候,則經過註解@Scope(「prototype」),將其設置爲多例模式 


 120:怎麼建立視圖? 存儲過程? 約束有哪些?

約束的具體分類
  1.非空約束(NOT NULL)
  2.惟一約束(UNIQUE)
  3.主鍵約束(PRIMARY KEY)
  4.外鍵約束(FROEIGN KEY)

---------------------------------------------------

視圖:實際上視圖就是一個命名的查詢;也就是把一個查詢語句的查詢結果作成一個臨時表,而後從這個臨時表中查詢相關的數據;  注意:視圖都是和一個有效的查詢語句綁定在一塊兒的!

  建立視圖   CREATE VIEW 視圖名稱  AS 有效的查詢語句;

  刪除視圖: drop view  視圖名稱 ; (注意:刪除視圖時 delete 無效)

視圖的做用:
  1.能夠加快開發的速度,可是並不能提升查詢的速度 ,若是一個查詢結果常常被使用到,咱們就應該把這個查詢語句作成一個視圖,加快開發的速度。
  2.能夠隱藏數據的真實來源;

注意:Mysql 中建立視圖的注意事項:視圖綁定的查詢語句中,不能有出如今FROM後面的子查詢! oracle對此不要求 

  好比:

CREATE VIEW V_EMP
AS
SELECT E.EMPNO,E.ENAME,E.DEPTNO,E.DNAME,E.LOC
FROM( SELECT E.*, D.DNAME,D.LOC
FROM EMP E
JOIN DEPT D ON (E.DEPTNO = D.DEPTNO)) E    在mysql 中建立視圖時有誤,oracle則不會。

  ---------------------------------------------------------------

  Mysql存儲過程
    1:使用存儲過程能夠極大的提升數據的處理能力;

   2:存儲過程的缺點:在不一樣的數據庫中,存儲過程的語法都是不一樣的!也就是是,只要使用了存儲過程,會致使個人程序沒法移植;

   建立存儲過程的語法 

CREATE PROCEDURE 存儲過程的名稱( [參數列表])
BEGIN
-- SQL 語句
END; 

參數列表的規範:

參數的輸入/輸出類型 參數名稱 參數的數據類型; 多個參數之間使用逗號分隔
參數的輸入/輸出類型分爲三類
  (1)IN類型:能夠把外界的數據傳遞給過程,這是默認的類型
  (2)OUT類型:能夠把過程當中的計算機結果返回給外界
  (3)INOUT類型:既能夠傳入數據,也能夠穿出計算結果

在聲明參數的數據類的時候,不須要指明數據的長度,只須要聲明類型便可

例1:建立一個存儲過程,查詢EMP表的數據總數而且返回查詢結果
  第一步:

  CREATE PROCEDURE PROC1 ( OUT RES INT)
  BEGIN
  -- 把查詢結果賦值給OUT類型的參數,經過OUT類型的參數將結果返回給調用者
  SELECT COUNT(*) INTO RES FROM EMP;
  END;

     第二步:CALL PROC1(@num)  調用proc1這個存儲過程,經過@num這種格式傳遞out類型的參數

       第三步:SELECT @num;   咱們調用存儲過程以後,過程當中的計算結果會經過OUT類型參數返回,查詢out類型的參數的結果

---------------------------------------------------------------------

   例2:建立一個存儲過程,完成把兩個參數相加而且返回結果的功能

// NUM1,NUM2沒有聲明輸入/輸出類型,默認的就是IN類型
CREATE PROCEDURE PROC2(NUM1 INT,NUM2 INT , OUT RES INT)
BEGIN
// 把NUM1 + NUM2的結果賦值給RES,經過RES返回計算結果
  SET RES = NUM1 + NUM2;
END;

-- 調用存儲過程
CALL PROC2(10,20,@RES);
SELECT @RES;


 121 :oracle 取得 6-10條數據?rownum 怎麼用?

  oracle 中rownum 只有<= 用法,要取得 6-10條數據,要將rownum 轉成實例,才能使用 >= 的比較。select * from (select a.*,rownum rn from aa a) a1 where a1.rn between 6 and 10,

  或 SELECT name  FROM  (SELECT name, ROWNUM rn FROM member ) WHERE rn >= 6 AND rn <= 10。


 122: git 怎麼用?


 123:Redios 緩存怎麼用?


 124:微服務 springCood 怎麼用?


 125:優化?數據庫優化?

數據庫優化 

  1.考慮使用視圖View
   第一次多張錶鏈接查詢以後將查詢結果看成視圖對象建立,下一次再查詢的時候不須要進行錶鏈接查詢,直接查詢視圖.
  2.給某些字段添加索引index,何時考慮添加索引呢?

  1:大數據量
  2  不多的DML操做,不多的insert update delete
  3  常常出如今where子句中的字段


 126:併發開發?


 127: Socket 網絡編程?

  在計算機通訊領域,socket 被翻譯爲「套接字」,它是計算機之間進行通訊的一種約定或一種方式。經過 socket 這種約定,一臺計算機能夠接收其餘計算機的數據,也能夠向其餘計算機發送數據。

  socket 的典型應用就是 Web 服務器和瀏覽器:瀏覽器獲取用戶輸入的URL,向服務器發起請求,服務器分析接收到的URL,將對應的網頁內容返回給瀏覽器,瀏覽器再通過解析和渲染,就將文字、圖片、視頻等元素呈現給用戶。 


 128:系統重構?


 129:java 中判斷空?  !=null  或isEmpty()。


130:變量分類?都存在哪一個區?

  1.以數據類型爲依據劃分  

  

 

       1:8種基本數據類型 byte,short,int,long,float,doule,boolean,char.

      2:3種引用類型 (類class+接口interface+數組array) 

   2 以聲明的位置爲依據劃分

  2.1 -實例變量具備默認值。數值型變量的默認值是0,布爾型變量的默認值是false,引用類型變量的默認值是null  

2.1.1 實例變量  保存在堆區

  做用域與對應實例的生存範圍相同

    訪問修飾符能夠修飾實例變量。

2.1.2 類變量    保存於方法區

  做用域與這個類的生存範圍相同

    靜態變量能夠經過:className.VariableName 的方式訪問。

2.2 局部變量 —— 方法、構造方法或語句塊裏定義的變量  (保存在棧區)
        
-訪問修飾符不能用於局部變量   

            -局部變量是在棧上分配的
            -局部變量沒有默認值,因此局部變量被聲明後,必須通過初始化,才能夠使用


 131 mysql 優化?

http://www.cnblogs.com/ggjucheng/archive/2012/11/07/2758058.html


 132 : 引用傳遞與值傳遞區別? 

值傳遞:方法調用時,實際參數把它的值傳遞給對應的形式參數,方法執行中形式參數值的改變不影響實際參數的值。
引用傳遞:也稱爲傳地址。方法調用時,實際參數的引用(地址,而不是參數的值)被傳遞給方法中相對應的形式參數,在方法執行中,對形式參數的操做實際上就是對實際參數的操做,方法執行中形式參數值的改變將會影響實際參數的值。

而在JAVA中只有值傳遞,基本類型傳遞的是值的副本,引用類型傳遞(不是上面說的引用傳遞)的是引用的副本

引用傳遞例子:

public class TestValue {
public static void main(String[] args) {
Student a = new Student(0);
Student b = new Student(100);
System.out.print("交換前:");
System.out.println("a的分數:" + a.getScore() + "--- b的分數:" + b.getScore());
swap(a, b);
System.out.print("交換後:");
System.out.println("a的分數:" + a.getScore() + "--- b的分數:" + b.getScore());
}
public static void swap(Student x, Student y) {
Student temp = x;
x = y;
y = temp;

    System.out.println("swap 中 的 x :" + x + "--- y:" + y);
 }
}
public class Student {
private float score;
public Student(float score) {
this.score = score;
}
public void setScore(float score) {
this.score = score;
}
public float getScore() {
return score;
}
}
結果:

  交換前:a的分數:0.0--- b的分數:100.0
  swap 中 的 x :com.bjpowernode.test.Student@1540e19d--- y:com.bjpowernode.test.Student@677327b6

     交換後:a的分數:0.0--- b的分數:100.0

-------------------------------------------------------------------------------------------------------------------------------

  值傳遞例子:

public class TestValue {
 public static void main(String[] args) {
int i = 3;
int j = 4;
change(i,j);
System.out.println("main i:"+i+",j:"+j);

}
public static void change(int i,int j){
int temp = i;
i = j;
j = temp;
System.out.println("change i:"+i+",j:"+j);
}
}
結果:

change i:4,j:3
main i:3,j:4


 133: 多線程之間的通訊機制?

  多線程間的通訊通常採起等待/通知機制進行實現,Java中在使用synchronized關鍵字實現的同步方法或同步代碼塊中,由被上鎖的對象調用其自身的wait()方法和notify()方法以及notifyAll()方法,進行實現等待/通知機制.

  注意如下事項: 
    1、wait()方法和notify()方法以及notifyAll()方法的使用必須在同步方法或者同步代碼塊中,由於這三個方法須要得到監視器對象的對象級別的鎖

    二:wait()方法的調用有兩個做用:一、使當前線程由運行狀態變爲等待狀態;二、釋放當前線程持有的鎖;

    3、notify()方法調用只有一個做用:喚醒由於wait()或await()而處於等待狀態的線程;


134:ibatis mybatis 區別?


 135:java 基本數據的長度?

 

字節

數據位

取值範圍

byte

1

8

-128~127

short

2

16

-32768 ~32767

int

4

32

-2147 483 648~2147 483 647

long

8

64

 

folat

4

32

 

doule

8

64

 

boolean

1

8

 

char

2

16

 

 136:jsp內置對象,範圍?

一、HttpServletRequest的 request對象 做用:表明請求對象,用來接收客戶端經過http協議鏈接傳輸到服務器端的數據。

二、HttpServletResponse的response對象  做用:表明響應對象,用來向客戶端發送數據。

三、JspWriter的 out 對象   做用:主要用於向客戶端發送數據。其中JspWriter是out的基類。

四、HttpSession 的session 對象  做用:主要用於來分別保存每一個用戶的我的信息,與請求關聯的對話。會話狀態的維持是每一個web應用開發者都必須面對的問題。

五、ServletContext的application對象    做用:主要用於保存用戶信息,代碼片段的運行環境。它是一個共享的內置對象。即一個容器中多個用戶共享一個application對象,故其保存的信息被全部的用戶所共享。

六、PageContext的PageContext對象   做用:管理網頁的屬性,爲jsp頁面包裝頁面的上下文,管理對屬於jsp中特殊可見部分中已經命名對象的訪問。它的建立和初始化的工做都是由容器來自動完成的。

七、ServletConfig的Config對象   做用:代碼片段配置對象,表示對servlet的配置。

八、Object 的page(至關於this) 對象    做用:處理jsp網頁,是object類的一個實例。即它也是jsp的自己,只有在jsp的頁面範圍以內它纔是合法的。

九、Exception    做用:處理jsp頁面執行時,發生的錯誤和異常

在JSP中提供了四種屬性保存範圍 

page:在一個頁面內保存屬性,跳轉以後無效
request:在一次服務請求範圍內,服務器跳轉後依然有效
session:-在一次會話範圍內,不管何種跳轉均可以使用,可是新開瀏覽器沒法使用
application:在整個服務器上保存,全部用戶均可以使用 


 137 :java 單例:

public class Singleton {

    private static final Singleton singleton = new Singleton();

    private Singleton() {

    }

    public static Singleton getInstance() {

        return singleton;

    }

}

public class Singleton {

private static Singleton singleton = null;

private Singleton() {

}

public static Singleton getInstance() {

if (singleton == null) {

singleton = new Singleton();

}

return singleton;

}

}


138:數據庫爲何須要鎖機制?有哪些鎖機制?

若對併發操做不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性(髒讀,不可重複讀,幻讀等),可能產生死鎖。

 鎖包括行級鎖、表級鎖、悲觀鎖、樂觀鎖


 139:異常


 140 線程池原理

https://blog.csdn.net/weixin_28760063/article/details/81266152


141 複合索引


 142 HashMap的底層,數據結構


 143  HashMap與CurrentHashMap區別


 144  數據庫 oracle 設計三範式

一:表中的數據不能重複,每一個字段不可再分。
2: 創建在第一範式上,表中的非主鍵字段必須所有依賴主鍵,不能部分依賴主鍵
3  創建在第二範式基礎上的,非主鍵字段不能傳遞依賴於主鍵字段。

 145 GC  Java虛擬機中進行垃圾回收的場全部兩個,一個是堆,一個是方法區


 146: Arraylist 的排序?Collections.sort(al);//針對一個ArrayList內部的數據排序


147 內存泄漏與溢出的區別 ?什麼時候產生內存泄漏,JVM原理?

1. 內存泄漏是指分配出去的內存沒法回收了。

2. 內存溢出是指程序要求的內存,超出了系統所能分配的範圍,從而發生溢出。好比用byte類型的變量存儲10000這個數據,就屬於內存溢出。

3. 內存溢出是提供的內存不夠;內存泄漏是沒法再提供內存資源。

-----------------------------------------------------

  引發內存溢出的緣由有不少種,常見的有如下幾種:

1.內存中加載的數據量過於龐大,如一次從數據庫取出過多數據;
2.集合類中有對對象的引用,使用完後未清空,使得JVM不能回收;
3.代碼中存在死循環或循環產生過多重複的對象實體;
4.使用的第三方軟件中的BUG;
5.啓動參數內存值設定的太小  


 148 Hashmap的幾個方法 ?排序?

Set<String> keySet = map.keySet();
System.out.println("keySet:"+keySet);// keySet:[李四, 張三, 王五]

System.out.println("------------------------");
Collection<String> values = map.values();
System.out.println("values:"+values); //values:[俄羅斯, 美國, 中國]
System.out.println("------------------------");
String zs = map.get("張三");
System.out.println("zs:"+zs); //zs:美國
System.out.println("------------------------");
Set<Map.Entry<String, String>> entries = map.entrySet();
System.out.println("entries:"+entries); //entries:[李四=俄羅斯, 張三=美國, 王五=中國]

  排序:獲取key,或value後,放到ArrayList中,用Collections.sort(al);


 149  tomcat 最多支持併發多少用戶?

  Tomcat 默認配置的最大請求數是 150,也能夠將其改大。當某個應用擁有 250 個以上併發的時候,應考慮應用服務器的集羣。具體能承載多少併發,須要看硬件的配置,CPU 越多性能越高,分配給 JVM 的內存越多性能也就越高,但也會加劇 GC 的負擔。Tomcat的最大併發數是能夠配置的,


 150  map原理,它是如何快速查找key的?

   Set<String> keySet = map.keySet();  keySet 再循環,獲得key.


 151 array與arraylist的區別? 

一、存儲內容比較:
Array 數組能夠包含基本類型和對象類型,
ArrayList 卻只能包含對象類型。
Array 數組在存放的時候必定是同種類型的元素。ArrayList 就不必定了 。

二、空間大小比較:
Array 數組的空間大小是固定的,因此須要事前肯定合適的空間大小。
ArrayList 的空間是動態增加的,並且,每次添加新的元素的時候都會檢查內部數組的空間是否足夠。

3.方法上的比較:
ArrayList 方法上比 Array 更多樣化,好比添加所有 addAll()、刪除所有 removeAll()、返回迭代器 iterator() 等


 152  在1億條用戶記錄裏,如何快速查詢統計出看了5個電影以上的用戶?

1,對userId創建因此索引。
2.使用jdbc的批處理方式


 153 mysql支持事務嗎?DB存儲引擎有哪些?

MYSQL的事務處理主要有兩種方法

  1.用begin,rollback,commit來實現
    begin開始一個事務
    rollback事務回滾
       commit 事務確認
  2.直接用set來改變mysql的自動提交模式
          mysql默認是自動提交的,也就是你提交一個query,就直接執行!能夠經過
          set autocommit = 0 禁止自動提交
          set autocommit = 1 開啓自動提交
       來實現事務的處理


 154 用java怎麼實現有天天有1億條記錄的DB存儲?mysql上億記錄數據量的數據庫如何設計?

 採用分區的方式建立表,並存儲,分區後,索引文件也是分區的,每一個區有本身獨立的索引文件。 


 155 循環中刪除元素

  用ArrayList 的 迭代器 iterator();

  Iterator<String> iter = list.iterator();循環
  while (iterator.hasNext()) {
    iterator.next();再判斷,
    用 iter 的remove()方法刪除。}
---------------------------------------
注意
  不能用fori循環,fori 結果值不對,
for(String s:list){} ,結果是 java.util.ConcurrentModificationException
--------------------------------------------------------------------------
156 Thread 類中的start() 和 run() 方法有什麼區別?

  這個問題常常被問到,但仍是能今後區分出面試者對Java線程模型的理解程度。start()方法被用來啓動新建立的線程,並且start()內部 調用了run()方法,這和直接調用run()方法的效果不同。當你調用run()方法的時候,只會是在原來的線程中調用,沒有新的線程啓 動,start()方法纔會啓動新線程。


 157 Java中的volatile 變量是什麼?

  volatile是一個特殊的修飾符,只有成員變量才能使用它。在Java併發程序缺乏同步類的狀況下,多線程對成員變量的操做對其它線程是透明的。volatile變量能夠保證下一個讀取操做會在前一個寫操做以後發生。

----------------------------------------------------
158
Java中如何中止一個線程?

  Java提供了很豐富的API但沒有爲中止線程提供API。JDK 1.0原本有一些像stop(), suspend() 和 resume()的控制方法可是因爲潛在的死鎖威脅所以在後續的JDK版本中他們被棄用了,以後Java API的設計者就沒有提供一個兼容且線程安全的方法來中止一個線程。當run() 或者 call() 方法執行完的時候線程會自動結束,若是要手動結束一個線程,你能夠用volatile 布爾變量來退出run()方法的循環或者是取消任務來中斷線程。


 159 如何在兩個線程間共享數據?

  你能夠經過共享對象來實現這個目的,或者是使用像阻塞隊列這樣併發的數據結構。這篇教程《Java線程間通訊》(涉及到在兩個線程間共享對象)用wait和notify方法實現了生產者消費者模型。

---------------------------------------------------------------------------------------------

160 多線程問題?

  什麼是線程安全? 若是你的代碼在多線程下執行和在單線程下執行永遠都能得到同樣的結果,那麼你的代碼就是線程安全的.

 有三個線程T1,T2,T3,怎麼確保它們按順序執行?

  在多線程中有多種方法讓線程按特定順序執行,你能夠用線程類的join()方法在一個線程中啓動另外一個線程,另一個線程完成該線程繼續執行。爲了確保三個線程的順序你應該先啓動最後一個(T3調用T2,T2調用T1),這樣T1就會先完成而T3最後完成。

Thread類中的yield方法有什麼做用?

  Yield方法能夠暫停當前正在執行的線程對象,讓其它有相同優先級的線程執行。它是一個靜態方法並且只保證當前線程放棄CPU佔用而不能保證使其它線程必定能佔用CPU,執行yield()的線程有可能在進入到暫停狀態後立刻又被執行。

  volatile 變量和 atomic 變量有什麼不一樣?

    使用volatile關鍵字修飾的變量,保證了其在多線程之間的可見性,即每次讀取到volatile變量,必定是最新的數據。

    這是個有趣的問題。首先,volatile 變量和 atomic 變量看起來很像,但功能卻不同。Volatile變量能夠確保先行關係,即寫操做會發生在後續的讀操做以前, 但它並不能保證原子性。例如用volatile修飾count變量那麼 count++ 操做就不是原子性的。而AtomicInteger類提供的atomic方法可讓這種操做具備原子性如getAndIncrement()方法會原子性 的進行增量操做把當前值加一,其它數據類型和引用變量也能夠進行類似操做。

  若是同步塊內的線程拋出異常會發生什麼?

  這個問題坑了不少Java程序員,若你能想到鎖是否釋放這條線索來回答還有點但願答對。不管你的同步塊是正常仍是異常退出的,裏面的線程都會釋放鎖,因此對比鎖接口我更喜歡同步塊,由於它不用我花費精力去釋放鎖,該功能能夠在finally block裏釋放鎖實現

  Java中的同步集合與併發集合有什麼區別?

  同步集合與併發集合都爲多線程和併發提供了合適的線程安全的集合,不過併發集合的可擴展性更高。在Java1.5以前程序員們只有同步集合來用且在 多線程併發的時候會致使爭用,阻礙了系統的擴展性。Java5介紹了併發集合像ConcurrentHashMap,不只提供線程安全還用鎖分離和內部分 區等現代技術提升了可擴展性。

   Java中堆和棧有什麼不一樣?

  爲何把這個問題歸類在多線程和併發面試題裏?由於棧是一塊和線程緊密相關的內存區域。每一個線程都有本身的棧內存,用於存儲本地變量,方法參數和棧 調用,一個線程中存儲的變量對其它線程是不可見的。而堆是全部線程共享的一片公用內存區域。對象都在堆裏建立,爲了提高效率線程會從堆中弄一個緩存到本身 的棧,若是多個線程使用該變量就可能引起問題,這時volatile 變量就能夠發揮做用了,它要求線程從主存中讀取變量的值。

  什麼是線程池? 爲何要使用它?

  建立線程要花費昂貴的資源和時間,若是任務來了才建立線程那麼響應時間會變長,並且一個進程能建立的線程數有限。爲了不這些問題,在程序啓動的時 候就建立若干線程來響應處理,它們被稱爲線程池,裏面的線程叫工做線程。從JDK1.5開始,Java API提供了Executor框架讓你能夠建立不一樣的線程池。好比單線程池,每次處理一個任務;數目固定的線程池或者是緩存線程池(一個適合不少生存期短 的任務的程序的可擴展線程池)

多線程有什麼用?
1)發揮多核CPU的優點
2)防止阻塞
3)便於建模
Java 中  關鍵字是什麼?你如何使用它?它和 Java 中的同步方法有什麼區別?volatile

  自從 Java 5 中調整 volatile 關鍵字和 Java 內存模型後,有關 volatile 關鍵字的線程問題愈來愈常見。掌握 volatile變量在併發環境中如何確保可見性、有序性和一致性很是重要。

  你在多線程環境中遇到的最多的問題是什麼?你如何解決的?

  內存干擾、競態條件、死鎖、活鎖、線程飢餓是多線程和併發編程中比較有表明性的問題。這類問題無休無止,並且難於定位和調試。

  線程和進程有什麼區別?

  線程是進程的子集,一個進程能夠有不少線程,每條線程並行執行不一樣的任務。不一樣的進程使用不一樣的內存空間,而全部的線程共享一片相同的內存空間。別把它和棧內存搞混,每一個線程都擁有單獨的棧內存用來存儲本地數據

  Java 中線程調度是什麼?

 ThreadLoal的做用是什麼? 
  
簡單說ThreadLocal就是一種以空間換時間的作法在每一個Thread裏面維護了一個ThreadLocal.
ThreadLocalMap把數據進行隔離,
數據不共享,天然就沒有線程安全方面的問題了
你有哪些多線程開發良好的實踐?

  給線程命名

  最小化同步範圍

  優先使用volatile

  儘量使用更高層次的併發工具而非wait和notify()來實現線程通訊,如BlockingQueue,Semeaphore

  優先使用併發容器而非同步容器.

  考慮使用線程池

 能夠建立Volatile數組嗎?

  Java 中能夠建立 volatile類型數組,不過只是一個指向數組的引用,而不是整個數組。若是改變引用指向的數組,將會受到volatile 的保護,可是若是多個線程同時改變數組的元素,volatile標示符就不能起到以前的保護做用了

  線程怎樣拿到返回結果?

  怎麼終止一個線程?如何優雅地終止線程?

 多線程同步有哪幾種方法?五種。

  同步方法

  即有synchronized關鍵字修飾的方法。 因爲java的每一個對象都有一個內置鎖,當用此關鍵字修飾方法時,內置鎖會保護整個方法。在調用該方法前,須要得到內置鎖,不然就處於阻塞狀態。

  同步代碼塊

   即有synchronized關鍵字修飾的語句塊。被該關鍵字修飾的語句塊會自動被加上內置鎖,從而實現同步

  使用特殊域變量(volatile)實現線程同步

(1)volatile關鍵字爲域變量的訪問提供了一種免鎖機制;

(2)使用volatile修飾域至關於告訴虛擬機該域可能會被其餘線程更新;

(3)所以每次使用該域就要從新計算,而不是使用寄存器中的值;

(4)volatile不會提供任何原子操做,它也不能用來修飾final類型的變量。

  volatile不能保證原子操做致使的,所以volatile不能代替synchronized。此外volatile會組織編譯器對代碼優化,所以能不使用它就不使用它吧。它的原理是每次要線程要訪問volatile修飾的變量時都是從內存中讀取,而不是從緩存當中讀取,所以每一個線程訪問到的變量值都是同樣的。這樣就保證了同步

  使用重入鎖實現線程同步

  在JavaSE5.0中新增了一個java.util.concurrent包來支持同步。ReentrantLock類是可重入、互斥、實現了Lock接口的鎖, 它與使用synchronized方法和塊具備相同的基本行爲和語義,而且擴展了其能力。

   若是synchronized關鍵字能知足用戶的需求,就用synchronized,由於它能簡化代碼 。若是須要更高級的功能,就用ReentrantLock類,此時要注意及時釋放鎖,不然會出現死鎖,一般在finally代碼釋放鎖

  使用局部變量實現線程同步   ThreadLocal 修飾。

     若是使用ThreadLocal管理變量,則每個使用該變量的線程都得到該變量的副本,副本之間相互獨立,這樣每個線程均可以隨意修改本身的變量副本,而不會對其餘線程產生影響。如今明白了吧,原來每一個線程運行的都是一個副本,也就是說存錢和取錢是兩個帳戶,只是名字相同而已。因此就會發生上面的效果

-----------------------------------

  多線程之間如何進行通訊?

 經常使用的幾種線程池並講講其中的工做原理?
線程池啓動線程submit()和execute()方法有什麼不一樣?
什麼是守護線程?有什麼用?

 怎麼中斷一個線程?如何保證中斷業務不影響?

  一個線程運行時發生異常會怎樣?

Synchronized有哪幾種用法?

  線程數過多會形成什麼異常?

  說說線程安全的和不安全的集合。

怎麼檢測一個線程是否擁有鎖?

線程同步須要注意什麼?

線程之間如何傳遞數據?

多線程上下文切換是什麼意思?

同步方法和同步塊,哪一種更好?

如何在Java中獲取線程堆棧?

如何建立線程安全的單例模式?

提交任務時線程池隊列已滿會時發會生什麼?

 

  如何解決線程安全問題?
    -儘可能使用局部變量
    -若是使用了實例變量,讓對象變成多例
    -若是使用了實例變量,加synchronized關鍵字進行修飾

 

---------------------------------------------------------------

  161 排序 二分法?冒泡排序?
  162  隔離級別的理解?

163 tomcat 的線程池設置位置

164 表被鎖後,怎麼處理?
165 事物的transation註解何時用


 166 count(*)與count(id)區別?

 Count(*)表示取得全部記錄,忽略null,爲null值也會取得。

採用count(字段名稱),不會取得爲null的紀錄。

注意:在mysql和oracle中都適用


167 非法登陸

168 權限 角色 用戶

169 spring mvc 的 註解

170 負載均衡

171 Mybatis 的標籤
172  windows 遠程桌面默認端口。
173 tomcat 開機自啓動 Windows中。
174Linux 中的定時任務在哪設置
175 maven 命令
176 extjs

相關文章
相關標籤/搜索