牛客网刷题错题记录
目錄
Java
1.靜態內部類
2.關于String,StringBuilder以及StringBuffer
3.java語言特性
4.非抽象類實現接口的問題
5.互斥鎖
6.?Socket?通信編程
7.類的初始化順序
8.變量的存儲區
9.jvm線程共享問題
10.java內存回收問題
11.關于java concurrent包四個類的區別
12.Statement在JDBC中相當于SQL語句的載體
Java
1.靜態內部類
靜態內部類可以訪問外圍類的靜態數據,包括私有數據,但不能訪問非靜態數據;
非靜態內部類可以直接訪問外圍類的數據,包括私有數據
2.關于String,StringBuilder以及StringBuffer
- 對String對象的任何改變都不影響到原對象,相關的任何change操作都會生成新的對象
- java中的字符串存儲在字符串常量區,不會改變,發生改變是會新創建一個對象
- StringBuffer是線程安全的
- StringBuilder是線程不安全的
- 可以修改StringBuffer和StringBuilder的內容
- StringBuilder和StringBuffer底層都是以字符數組存放的,可以修改內容
3.java語言特性
- java致力于檢查程序在編譯和運行時的錯誤
- java能運行虛擬機實現跨平臺
- java自己操作內存減少了內存出錯的可能性
- java還實現了真數組,避免了覆蓋數據的可能性
- ps:內存連續就是真數組,內存不連續就是假數組
4.非抽象類實現接口的問題
- 非抽象類實現接口后,必須實現接口中的所有抽象方法,除了abstract外,方法頭不一定一致
- 方法名相同,參數類型相同
- 子類返回類型小于等于父類方法返回類型
- 子類拋出異常小于等于父類方法拋出異常
- 子類訪問權限大于等于父類方法訪問權限
5.互斥鎖
- synchronized關鍵字是同步代碼塊關鍵字,對對象加互斥鎖
? ?筆記:
- final關鍵字在多線程中的作用表現為:1.創建過程保證不可給其他線程訪問;2.構造函數退出時,final域的值對其他線程可見
6.?Socket?通信編程
- 服務端通過new ServerSocket()創建
- 服務器端通過TCP連接對象調用accept()方法創建通信的Socket對象
- 客戶端通過new Socket()方法創建通信的Socket對象
Socket套接字?
就是源Ip地址,目標IP地址,源端口號和目標端口號的組合
服務器端:ServerSocket提供的實例
ServerSocket server= new ServerSocket(端口號)
客戶端:Socket提供的實例
Socket soc=new Socket(ip地址,端口號)
7.類的初始化順序
- 初始化父類中的靜態成員變量和靜態代碼塊
- 初始化子類中的靜態成員變量和靜態代碼塊
- 初始化父類中的普通成員變量和代碼塊,在執行父類中的構造方法
- 初始化子類中的普通成員變量和代碼塊,在執行子類中的構造方法
8.變量的存儲區
- 類中的成員變量,存放在堆區
- 堆區:只存放類對象,線程共享;
- 方法中的局部變量,存放在棧區
- 棧區:存放方法局部變量,基本類型變量區、執行環境上下文、操作指令區,線程不共享;
- 方法區:又叫靜態存儲區,存放class文件和靜態數據,線程共享;
9.jvm線程共享問題
- 程序計數器是一個比較小的內存區域,用于指示當前線程所執行的字節碼執行 到了第幾行,是線程隔離的
- 原則上講,所有的對象都是在堆區上分配內存,是線程之間共享的
- Java方法執行內存模型,用于存儲局部變量,操作數棧,動態鏈接,方法出口等信息,是線程隔離的
- 方法區:
- 1.又叫靜態區,跟堆一樣,被所有的線程共享。方法區包含所有的class和static變量。
- 2.方法區中包含的都是在整個程序中永遠唯一的元素,如class,static變量。
10.java內存回收問題
- java的內存回收是自動的,Gc在后臺運行,不需要用戶手動操作
- java中不允許使用指針
- 內存回收線程可以釋放無用的對象內存
- 內存回收線程負責釋放無用內存
11.關于java concurrent包四個類的區別
- Semaphore:類,控制某個資源可被同時訪問的個數(與并發編程的鎖機制相關)
- ReentrantLock:類,具有與使用synchronized方法和語句所訪問的隱式監視器鎖相同的一些基本行為和語義,但功能更強大(與并發編程的鎖機制相關)
- Future:接口,表示異步計算的結果(線程任務的返回結果的‘欠條’)
- CountDownLatch: 類,可以用來在一個線程中等待多個線程完成任務的類(與并發編程的鎖機制相關)
12.Statement在JDBC中相當于SQL語句的載體
- Statement是最基本的用法,采用字符串拼接的方式,存在注入漏洞
- PreparedStatement對Statement中的SQL語句進行預編譯,同時檢查合法性,效率高
- CallableStatement接口擴展 PreparedStatement,用來調用存儲過程,它提供了對輸出和輸入/輸出參數的支持。CallableStatement 接口還具有對 PreparedStatement 接口提供的輸入參數的支持
- BatchedStatement不是標準的Statement類
轉載聲明:https://blog.csdn.net/zzxzzxhao/article/details/82893167#1.
總結
- 上一篇: 汇编语言LENGTHOF运算符:计算数组
- 下一篇: 汇编语言PTR运算符:重写操作数的大小类