Java基礎總結3

一、^異或運算符html

  

 二、SpringMVC工做原理圖java

  

 三、形參與實參面試

  好比定義一個函數void add(int a, int b),這裏的a和b就是形參。spring

  當進行函數調用的時候,add(1, 2),這裏的1和2就是實參。sql

 四、獲取今天以後的第15天
 public static String getTimeLateFifteen() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.add(Calendar.DATE, +15);
        String endDate = DateFormatUtils.format(calendar.getTime(), "yyyy-MM-dd");
        return endDate;
    }

五、枚舉被設計成是單例模式,即枚舉類型會由JVM在加載的時候,實例化枚舉對象,你在枚舉類中定義了多少個就會實例化多少個,JVM爲了保證每個枚舉類元素的惟一實例,是不會容許外部進行new的,因此會把構造函數設計成private,防止用戶生成實例,破壞惟一性。數據庫

六、apache

<!-- 配置實體類的別名,配置實體類別名的目的是爲了在引用實體類時可使用實體類的別名來代替實體類,達到簡寫的目的 -->
    <typeAliases>
        <package name="me.gacl.domain"/>
    </typeAliases>

  <package name="me.gacl.domain"/>就表示爲這個包下面的全部實體類設置別名。MyBatis默認的設置別名的方式就是去除類所在的包後的簡單的類名,好比me.gacl.domain.User這個實體類的別名就會被設置成User。跨域

七、  (1) 當 lenth = 2n 時,X % length = X & (length - 1);服務器

  (2) 對於 Map 集合,咱們能夠選取Java中的基本類型,還有引用類型 String 做爲 key,由於它們都按照規範重寫了 equals 方法和 hashCode 方法。可是若是你用自定義對象做爲 key,那麼必定要覆寫 equals 方法和 hashCode 方法,否則會有意想不到的錯誤產生;mybatis

    (3) 輸出:把程序(內存)中的內容輸出到磁盤、光盤等存儲設備中

    

 

         輸入:讀取外部數據(磁盤、光盤等存儲設備的數據)到程序(內存)中
    
  (4) 存儲字母、數字:不管什麼字符集都佔有 1 個字節。
     存儲漢字:GBK 家族佔有 2 個字節,UTF-8 佔有 3 個字節。不能使用單字節的字符集(ASCII/ISO-8859-1)來存儲中文
  (5) http://start.spring.io/  使用Spring Boot構建Maven項目。
  (6) 關於 有參構造器參數爲String類型狀況下內存分配問題:
     參考 孤傲蒼狼關於 static關鍵字的博客   http://www.cnblogs.com/xdp-gacl/p/3637407.html
  (7) Java類的加載問題
  (8) 使用?通配符能夠引用其餘各類參數化的 具體類型,?通配符定義的變量主要用做引用,能夠調用與參數無關的方法,不能調用與參數有關的方法;
     T通配符則能夠引用各類 抽象類型,能夠調用與參數有關的方法。
  (9) 在mybatis的mapper文件中,對於傳遞的參數咱們通常是使用#和$來獲取參數值。當使用#時,變量是佔位符,就是通常咱們使用javajdbc的PrepareStatement時的佔位符,因此能夠防止sql注入;當使用$時,變量就是直接追加在sql中,通常會有 sql注入問題。參考 我沒有三顆心臟博客: http://www.cnblogs.com/wmyskxz/p/9056776.html
  mapper文件中#和$的區別,參考: https://blog.csdn.net/nuaazhaofeng/article/details/53614062
  (10)  XSS 攻擊  參考 我沒有三顆心臟博客: http://www.cnblogs.com/wmyskxz/p/9056776.html
  (12) 關於Spring面試的一些問題:http://www.importnew.com/15851.html#spring_framework

八、將二進制數(10.10101)2轉化爲十進制數。(10.10101)2=(1x21+0x20+1x2-1+0x2-2+1x2-3+0x2-4+1x2-510=(2+0+0.5+0+0.125+0+0.03125)10=(2.65625)10

 將二進制數(10.10101)2轉化爲十六進制數。(10.10101)2=(0010.1010 1000)2=(2.A8)16

 將十進制數(93)10轉換成二進制數。

    93/2=46……….1      

    46/2=23……….0

    23/2=11……….1

    11/2=5…………1

    5/2=2…………...1

    2/2=1……………0

    1/2=0……………1

   (93)10=(1011101)2

 將十進制數(0.3125)10轉換成二進制數。

    0.3125x2 = 0 . 625

    0.625x2 = 1 .25

    0.25x2 = 0 .5

    0.5x2 = 1 .0

   (0.3125)10=(0.0101)2

   將十進制數(93)10轉換成十六進制數。

    93/16=5…………13(D)

   (93)10=(5D)16

 將十進制數(0.3125)10轉換成十六進制數。

    0.3125x16 = 5 .0

   (0.3125)10=(0.5)16

 將十六進制數(A7)16轉換成二進制數。

  (A7)16=(A 7)16=(1010 0111)2=(10100111)2

 將十六進制數(0.D4)16轉換成二進制數。

  (0.D4)16=(0. D 4)16=(0. 1101 0100)2=(0.110101)2

   將十六進制數(A7)16轉換成十進制數。

  (A7)16=(10x161+7x16010=(160+7)10=(167)10

   將十六進制數(0.D4)16轉換成十進制數。

  (0.D4)16=(0+13x16-1+4x16-210=(0+0.8125+0.015625)10=(0.828125)10

九、ClassLoader:http://www.javashuo.com/article/p-vliilzaq-b.html

雙親委派模型的工做過程:若是一個類加載器收到了類加載的請求,它首先不會本身去嘗試加載這個類,而是把這個請求委派給父類加載器去完成,每個層次的類加載器都是這樣,最終都應該傳送到頂層的啓動類加載器中,只有當父類反饋本身沒法完成這個加載請求時,子加載器纔會嘗試本身去加載。

 使用雙親委派模型來組織類加載器之間的關係,有一個顯而易見測好處就是Java類隨着它的類加載器一塊兒具有了一種帶有優先級的層次關係。

能不能本身寫一個類叫java.lang.String?

答案:不能夠。緣由就是由於JVM的類加載器採用的這種雙親委派模型,當咱們寫了一個類叫java.lang.String時,類加載器發現已經加載過一個一樣的類了,不用加載了,直接使用就能夠了。因此本身寫的這個java.lang.String這個類能夠編譯經過,可是沒法被加載運行。

實現雙親委派的代碼集中在java.lang.ClassCloader的loadClass()方法中,首先檢查本身是否已經被加載過,若是沒有加載則調用父加載器的loadClass()方法,若父加載器爲空則默認使用啓動類加載器做爲父加載器。若是父加載器加載失敗,則拋出ClassNotFoundException異常後,再調用本身的findClass()方法進行加載。

十、final關鍵字

  修飾類:  當用final修飾一個類時,代表這個類不能被繼承。也就是說,若是一個類你永遠不會讓他被繼承,就能夠用final進行修飾。final類中的成員變量能夠根據須要設爲final,可是要注意final類中的全部成員方法都會被隱式地指定爲final方法。

    修飾方法:    以防任何繼承類修改它的含義。

    修飾變量: 對於一個final變量,若是是基本數據類型的變量,則其數值一旦在初始化以後便不能更改;若是是引用類型的變量,則在對其初始化以後便不能再讓其指向另外一個對象。

十一、Class.forName()和ClassLoader.loadClass()區別

  Class.forName():將類的.class文件加載到jvm中以外,還會對類進行解釋,執行類中的static塊;

  ClassLoader.loadClass():只幹一件事情,就是將.class文件加載到jvm中,不會執行static中的內容,只有在newInstance纔會去執行static塊。

  注:  Class.forName(name, initialize, loader)帶參函數也可控制是否加載static塊。而且只有調用了newInstance()方法採用調用構造函數,建立類的對象 。

十二、三次握手和四次揮手

  參考我沒有三顆心臟博客:http://www.cnblogs.com/wmyskxz/p/9056776.html

  參考一江水博客:https://www.cnblogs.com/rootq/articles/1377355.html  

1三、SQL語言的分類

  SQL語言共分爲四大類:數據查詢語言DQL,數據操縱語言DML,數據定義語言DDL,數據控制語言DCL。

    DQL基本結構是由SELECT子句,FROM子句,WHERE子句組成的查詢塊: SELECT <字段名錶>  FROM <表或試圖名>    WHERE <查詢條件>   

    DML主要有三種形式:插入:INSERT  更新:UPDATE  刪除:DELETE

    DDL用來建立數據庫中的各類對象-----表、視圖、索引、同義詞、聚簇等如:CREATE / DROP / TRUNCATE TABLE  /  VIEW  /  INDEX  /  SYN  /  CLUSTER

    DCL用來授予或回收訪問數據庫的某種特權,並控制數據庫操縱事務發生的時間及效果,對數據庫實行監視等。如:

      1) GRANT:受權。

      2) ROLLBACK TO :回退到某一點。回滾---ROLLBACK  SQL>ROLLBACK;

      3) COMMIT :提交。(1) 顯式提交  SQL>COMMIT;(2) 隱式提交  ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,

      DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。(3) 自動提交  SQL>SET AUTOCOMMIT ON;

1四、JSP靜態導入:<%@include file="被包含的頁面的路徑"%>   最終獲得一個class文件

  JSP動態導入:<jsp:include page="被包含頁面的路徑"></jsp:include>  最終獲得兩個class文件

1五、(1)servlet的請求流程  參考我沒有三顆心臟博客:http://www.cnblogs.com/wmyskxz/p/8804447.html

   (2)JSP的生命週期:1)翻譯: jsp->java文件 
          2)編譯: java文件->class文件(servlet程序) 
          3)構造方法(第1次訪問) 
          4)init方法(第1次訪問):_jspInit() 
          5)service方法:_jspService() 
          6)destroy方法:_jspDestroy()

    注:Servlet的service方法會自動調用HttpJspBase的_jspService方法, init會自動調用HttpJspBase的_jspInit()方法,因此jsp生命週期中調用的是_jspService()而不是servlet中service()。

    總結:當訪問一個 JSP 頁面時,該頁面請求將會講給服務器中的 JSP 引擎去處理,它負責解釋和執行 JSP 頁面,每一個 JSP 頁面在第一次被訪問時,JSP 引擎就會將它翻譯成一個繼承自 org.apache.jasper.runtime.HttpJspBase類的 Servlet 源程序,接着再編譯成 class 類文件,再由 Web 容器像調用普通 Servlet 程序同樣的方式來裝載和解釋執行這個由 JSP 頁面翻譯成的 Servlet 程序。

  (3)JSP九大內置對象、JSP四大做用域:參考我沒有三顆心臟博客:http://www.cnblogs.com/wmyskxz/p/8805498.html

  (4)EL表達式中${msg}等價於<%=pageContext.findAttribute("msg")==null ? "" : pageContext.findAttribute("msg") %>

1六、轉發與重定向的區別:

  轉發(forward):request.getRequestDispatcher(path).forward(request, response);  path:上下文路徑/資源路徑

    (1)地址欄中的地址不會改變,一般看做是服務端的跳轉。

    (2)只有一個請求。

    (3)資源是共享的,也就是說在兩個servlet中能夠共享請求的資源。request.setAttribute(String str,Object obj);    request.getAttribute(str);

    (4)能夠訪問WEB-INF中的資源。

    (5)請求轉發不能跨域訪問,所謂同域,是指域名、協議、端口均相同。

  重定向(redirect):response.sendRedirect(String location);

    (1)地址欄中的地址會發生改變,一般看做是客戶端跳轉。

    (2)有兩個請求。

    (3)在兩個servlet中不能夠共享請求中的數據。

    (4)最終的響應由重定向後的servlet來決定,和發送請求的servlet沒有關係。

    (5)不能夠訪問WEB-INF中的資源。

    (6)重定向可以跨域訪問,就像是網頁中點開了新的連接同樣。

1七、關於時間類型和字符串之間的轉換問題:

  使用org.apache.commons.lang3.time.DateFormatUtils和org.apache.commons.lang3.time.DateUtils兩個包。

  DateUtils.parseDate(str, parsePatterns);

  DateFormatUtils.format(date, pattern);

  建立自定義的轉換類:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class StringAndDateUtil {
    private static ThreadLocal<DateFormat> threadLocal=new ThreadLocal<DateFormat>(){
        @Override
        protected DateFormat initialValue() {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        }
    };
    public static Date parseString(String dateStr) throws ParseException {
        return threadLocal.get().parse(dateStr);
    }

    public static String formatDate(Date date) {
        return threadLocal.get().format(date);
    }
}對於調用threadLocal中關於initialValue()方法時,實際上調用的都是StringAndDateUtil類重寫的initialValue()方法。

1八、sleep() 與 wait()的區別

  sleep 方法:是 Thread 類的靜態方法,當前線程將睡眠 n 毫秒,線程進入阻塞狀態。當睡眠時間到了,會解除阻塞,進行可運行狀態,等待 CPU 的到來。睡眠不釋放鎖(若是有的話

  wait 方法:是 Object 的方法,必須與 synchronized 關鍵字一塊兒使用,線程進入阻塞狀態,當 notify 或者 notifyall 被調用後,會解除阻塞。可是,只有從新佔用互斥鎖以後纔會進入可運行狀態。睡眠時,釋放互斥鎖。

相關文章
相關標籤/搜索