1.Redis應用場景
答:分布式會話,分布式鎖,計數器,緩存,消息隊列,排行榜,最新列表。
2.如何訪問一個類的私有方法?
答:使用反射進行訪問,代碼如下:
package cn.entity;
public class PrviteMhtod { private PrviteMhtod(){ //私有構造 System.out.println("zzz"); } private void pm(){//私有無參方法 System.out.println("我是一個私有的方法哦"); } private void pm1(int i){//私有有參方法 System.out.println("我是豬"+i); } }
主代碼:
@Test
public void TT1() throws Exception { Constructor constructor=PrviteMhtod.class.getDeclaredConstructor(); constructor.setAccessible(true); //調用是否可訪問的方法 true為可以, false為不可訪問。 PrviteMhtod prviteMhtod = (PrviteMhtod)constructor.newInstance();//實例化PrviteMhtod類 for (Method method:PrviteMhtod.class.getDeclaredMethods()) { method.setAccessible(true);//設置PrviteMhtod類的方法是可以訪問的。如果不設置是訪問不到的, if (method.getName().equals("pm")){//獲取方法名為pm的方法 method.invoke(prviteMhtod);//調用pm方法 }else if (method.getName().equals("pm1")){ method.invoke(prviteMhtod,4);//如果是有參方法,需要傳入參數。 }else if (method.getName().equals("pmss")){//如果沒有此方法不進入該條件。 System.out.println("aaa"); } } }
3. 這幾個對象使用==的對比結果是?
String s1="a";
String s2=new String("a");
Integer a1=12;
Integer a2=12;
Integer a3=128;
Integer a4=128;
答:s1和s2 false a1和a2 true a3和a4 false a3.equels(a4) true
@Test
public void Th() throws InterruptedException { String s1="a"; String s2=new String("a"); Integer a1=12; Integer a2=12; Integer a3=128;//Integer的作用范圍是-128 到127,超出此范圍,而是相當於new出一個新對象。 Integer a4=128; System.out.println(s1==s2);//false System.out.println(a1==a2);//true System.out.println(a3==a4);//false System.out.println(a3.equals(a4));//true }
4. 有兩張表 一張用戶表 用戶表有用戶編號和商品編號和消費時間 一張商品表 有商品編號和商品價格
4.1 查詢每個用戶總共消費多少元?
答:使用分組進行查詢 : SELECT SUM(price) ,uid FROM u,s WHERE u.`sid`=s.`sid` GROUP BY uid
4.2 使用sql查詢消費第三多的用戶?
答:使用order by進行倒序排序, 之后使用limit進行查詢第三個用戶即可。 :SELECT SUM(price) ,uid FROM u,s WHERE u.`sid`=s.`sid` GROUP BY uid ORDER BY SUM(price) DESC LIMIT 2,1
4.3 查詢出2018年所有用戶消費的平均值?
答:使用between關鍵字查詢出2018-01-01到2018-12-31之間的數據,between關鍵字的作用就是查兩個數值之間的數據。 :SELECT AVG(price) AS 平均消費 FROM s,u WHERE s.sid=u.sid AND u.time BETWEEN '2018-01-01' AND '2018-12-31'
5.lambda表達式的特點?
答:優點:簡潔, 並行容易計算, 結合 hashmap 的 computeIfAbsent 方法,遞歸運算非常快。 缺點:如果不是並行計算切效率還不如傳統的for循環。不容易調試,沒有接觸過lambda表達式的程序員不容易看懂。
6.在修改一條數據時使用索引作為判斷條件和不使用索引作為條件的區別。
使用主鍵作為修改條件(由於我數據太少,所以加主鍵和使用沒有索引的列的區別不是太大。)
使用無索引列作為修改條件
因為mysql索引都是以B+tree的方式存儲的,所以當不使用索引作為判斷條件時,數據庫底層會進行全局搜素,一條一條的去查找這個條件的數據,如果數據特別多的話,性能肯定是非常慢的,
但是如果是使用索引作為判斷條件數據庫就會很快的查詢出結果,性能也是特別快的。
7.servlet生命周期及生命周期中有哪些方法?
加載和實例化 初始化 請求服務 銷毀 , 初始化時調用init()方法 請求服務時調用service()方法 銷毀時調用distory()方法
8.session和cookie的區別?
cookie存儲量有限而session可以存儲無限量變量, cookie存儲在客戶端, session會話存儲在服務端, cookie存儲的數據相比於session安全性低, session存儲的數據安全性要比cookie高。
9.關系型數據庫和非關系型數據的區別?
答:關系型數據庫: 數據結構固定,靈活性稍欠, sql通用,可以用於復雜查詢, 支持一個表到多個表之間的非常復雜查詢。都是使用表結構,格式一致, 易於維護。 讀寫性較差,特別是海量數據的高效率讀寫。
非關系型數據庫:速度快, 高擴展, 成本低都是開源的, 學習成本較大, 無事務支持。復雜查詢稍欠,格式靈活,存儲的數據可以是 key-value ,圖片, 文檔形式等等。
10.String的常用方法有哪些?
答:有length方法(獲取長度) equals方法(比較值) valueof方法(類型轉換) trim方法(去除兩端空格) toLowerCase方法(字符串轉換小寫) toUpeeCase方法(字符串轉換大寫) charAt方法(輸入字符的下標獲取這個字符) subString方法(截取字符之間的內容)
@Test
public void contr() throws Exception { //使用String的length方法獲取一個字符串的長度 /*注:new String 和 s1="";的區別是 new String不管在String常量池中有沒有這個常量都會創建一個對象, 而 s1="";如果常量池中有這個常量,則會指向這個常量,不去開辟空間,如果沒有這個常量則創建出這個常量 存儲位置不同 s1="";存儲在方法區中, 而new String對象存儲在堆中。*/ String s1=new String("4sasqw521"); System.out.println(s1.length()); //使用String的charAt方法獲取某一個位置的字符 String s2="7q7as4xz1"; System.out.println(s2.charAt(2));//這個是按照下標獲取字符,每個字符的下標從零開始。 //使用String的equals方法比較對象的值是否相等 String s3="aaaxxz"; String s4="aaaxxz"; //注:因為String重寫了equals方法,如果沒有重寫equals那么和使用==比較沒有區別都是比較內存地址 System.out.println(s3.equals(s4)); //使用String的length方法獲取一個字符串的長度 String s5=new String("4sasqw521"); String s6=s5.substring(2);//獲取按照下標方式從下標為2的字符到以后的字符。 String s7=s5.substring(3,6);//獲取下標為3到下標為6之內的內容, 下標為3的打印,為6的那個字符不打印。 System.out.println(s6+"----"+s7); //字符串的大小寫轉換方法, toLowerCase方法(轉小寫)和toUpeeCase方法(轉大寫)。 String s8="ABcdeFg"; System.out.println(s8.toLowerCase()); System.out.println(s8.toUpperCase()); //字符串兩端去空格 (只去除兩端的空格。) String s9=" sa s "; System.out.println(s9.trim()); //類型轉換為字符串 int a=12; String s10=String.valueOf(a); System.out.println(s10); }