日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

网易一面总结

發(fā)布時(shí)間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网易一面总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

先是自我介紹,期間面試官給我的感覺(jué)很好

接口和抽象類的區(qū)別:

抽象類:可以有構(gòu)造方法,可以有普通成員變量,可以有非抽象方法,抽象方法修飾符類型可以是public、protected、default,可以有靜態(tài)方法,也可以有靜態(tài)成員變量。

接口:不可以有構(gòu)造方法,沒(méi)有普通成員變量,不可以有非抽象方法,抽象方法修飾符必須是public,默認(rèn)是public abstract,不可以包含靜態(tài)方法,可以有靜態(tài)成員變量。

一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但是只能繼承一個(gè)抽象類。

接口是對(duì)動(dòng)作的抽象(has-a),抽象類是對(duì)根源的抽象(is-a)。

進(jìn)程與線程的區(qū)別:

進(jìn)程是操作系統(tǒng)資源分配的基本單位,而線程是處理器任務(wù)調(diào)度和執(zhí)行的基本單位,每個(gè)進(jìn)程都有獨(dú)立的代碼和數(shù)據(jù)空間(程序上下文),程序之間的切換會(huì)有較大的開(kāi)銷;線程可以看做輕量級(jí)的進(jìn)程,同一類線程共享代碼和數(shù)據(jù)空間,每個(gè)線程都有自己獨(dú)立的運(yùn)行棧和PC(程序計(jì)數(shù)器),線程之間切換的開(kāi)銷小。如果一個(gè)進(jìn)程內(nèi)有多個(gè)線程,則執(zhí)行過(guò)程不是一條線的,而是多條線(線程)共同完成的;線程是進(jìn)程的一部分,所以線程也被稱為輕權(quán)進(jìn)程或者輕量級(jí)進(jìn)程。同一進(jìn)程的線程共享本進(jìn)程的地址空間和資源,而進(jìn)程之間的地址空間和資源是相互獨(dú)立的。一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其他進(jìn)程產(chǎn)生影響,但是一個(gè)線程崩潰整個(gè)進(jìn)程都死掉。所以多進(jìn)程要比多線程健壯。每個(gè)獨(dú)立的進(jìn)程有程序運(yùn)行的入口、順序執(zhí)行序列和程序出口。但是線程不能獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制,兩者均可并發(fā)執(zhí)行。

tcp/udp:
1、 TCP面向連接 (如打電話要先撥號(hào)建立連接); UDP是無(wú)連接 的,即發(fā)送數(shù)據(jù)之前不需要建立連接,TCP提供可靠的服務(wù)。也就是說(shuō),通過(guò)TCP連接傳送的數(shù)據(jù),無(wú)差錯(cuò),不丟失,不重復(fù),且按序到達(dá);UDP盡最大努力交付,即不保證可靠交付,Tcp通過(guò)校驗(yàn)和,重傳控制,序號(hào)標(biāo)識(shí),滑動(dòng)窗口、確認(rèn)應(yīng)答實(shí)現(xiàn)可靠傳輸。如丟包時(shí)的重發(fā)控制,還可以對(duì)次序亂掉的分包進(jìn)行順序控制。

2、UDP具有較好的實(shí)時(shí)性,工作效率比TCP高,適用于對(duì)高速傳輸和實(shí)時(shí)性有較高的通信或廣播通信。每一條TCP連接只能是點(diǎn)到點(diǎn)的;UDP支持一對(duì)一,一對(duì)多,多對(duì)一和多對(duì)多的交互通。TCP對(duì)系統(tǒng)資源要求較多,UDP對(duì)系統(tǒng)資源要求較少。

TCP三次握手四次揮手:


?

?為什么三次握手:

? ? ? ? 防止重復(fù)連接引起連接混亂的問(wèn)題,同步初始化序列化來(lái)保證穩(wěn)定性。

數(shù)據(jù)庫(kù)MySQL默認(rèn)存儲(chǔ)引擎InnoDB,默認(rèn)隔離級(jí)別 可重復(fù)讀

數(shù)據(jù)庫(kù)隔離級(jí)別:

讀未提交RUread-uncommitted:在RU級(jí)別中,事務(wù)讀到的所有數(shù)據(jù)都是最新的數(shù)據(jù),可能是事務(wù)提交后的數(shù)據(jù),也可能是事務(wù)執(zhí)行中的數(shù)據(jù)(可能會(huì)被回滾)。當(dāng)隔離級(jí)別為RU時(shí):所有的讀不加鎖,讀到的數(shù)據(jù)都是最新的數(shù)據(jù),性能最好。所有的寫加行級(jí)鎖,寫完釋放。

讀已提交RCread-committed:使用MVCC技術(shù),在每一行加入隱藏的字段(DB_TRX_ID:修改該行的最后一個(gè)事務(wù)的idDB_ROLL_PTR:指向當(dāng)前行的undo log日志,DB_ROW_ID:行標(biāo)識(shí),DELETE_BIT:刪除標(biāo)志),它實(shí)現(xiàn)了不加鎖的讀操作。當(dāng)隔離級(jí)別為RC時(shí):寫操作:加行級(jí)鎖。事務(wù)開(kāi)始后,會(huì)在UNDO日志中寫入修改記錄,數(shù)據(jù)行中的隱藏列DATA_POLL_PTR存儲(chǔ)指向該行的UNDO記錄的指針。讀操作:不加鎖。在讀取時(shí),如果該行被其它事務(wù)鎖定,則順著隱藏列DATA_POLL_PTR指針,找到上一個(gè)有效的歷史記錄(有效的記錄:該記錄對(duì)當(dāng)前事務(wù)可見(jiàn),且DELETE_BIT=0)。

可重復(fù)讀RRrepeatable-read:當(dāng)隔離級(jí)別為RR時(shí):寫操作:加行級(jí)鎖。事務(wù)開(kāi)始后,會(huì)在UNDO日志中寫入修改記錄,數(shù)據(jù)行中的隱藏列DATA_POLL_PTR存儲(chǔ)指向該行的UNDO記錄的指針。讀操作:不加鎖。在讀取時(shí),如果該行被其它事務(wù)鎖定,則順著隱藏列DATA_POLL_PTR指針,找到上一個(gè)有效的歷史記錄(有效的記錄:該記錄對(duì)當(dāng)前事務(wù)可見(jiàn),且DELETE_BIT=0)。

可串行化serializable讀寫都會(huì)加鎖。

JVM五大內(nèi)存區(qū)域介紹:

?

1、程序計(jì)數(shù)器

??程序計(jì)數(shù)器是一塊很小的內(nèi)存空間,它是線程私有的,可以認(rèn)作為當(dāng)前線程的行號(hào)指示器。那么計(jì)數(shù)器記錄虛擬機(jī)字節(jié)碼指令的地址。如果為native【底層方法】,那么計(jì)數(shù)器為空。?這塊內(nèi)存區(qū)域是虛擬機(jī)規(guī)范中唯一沒(méi)有OutOfMemoryError的區(qū)域。

2、Java棧(虛擬機(jī)棧)

棧描述的是Java方法執(zhí)行的內(nèi)存模型。每個(gè)方法被執(zhí)行的時(shí)候都會(huì)創(chuàng)建一個(gè)棧幀用于存儲(chǔ)局部變量表,操作棧,動(dòng)態(tài)鏈接,方法出口等信息。每一個(gè)方法被調(diào)用的過(guò)程就對(duì)應(yīng)一個(gè)棧幀在虛擬機(jī)棧中從入棧到出棧的過(guò)程。平時(shí)說(shuō)的棧一般指局部變量表部分。局部變量表所需要的內(nèi)存空間在編譯期完成分配,當(dāng)進(jìn)入一個(gè)方法時(shí),這個(gè)方法在棧中需要分配多大的局部變量空間是完全確定的,在方法運(yùn)行期間不會(huì)改變局部變量表大小。

Java虛擬機(jī)棧可能出現(xiàn)兩種類型的異常:

  • 線程請(qǐng)求的棧深度大于虛擬機(jī)允許的棧深度,將拋出StackOverflowError。
  • 虛擬機(jī)棧空間可以動(dòng)態(tài)擴(kuò)展,當(dāng)動(dòng)態(tài)擴(kuò)展是無(wú)法申請(qǐng)到足夠的空間時(shí),拋出OutOfMemory異常
  • 3、本地方法棧

    本地方法棧是與虛擬機(jī)棧發(fā)揮的作用十分相似,區(qū)別是虛擬機(jī)棧執(zhí)行的是Java方法(也就是字節(jié)碼)服務(wù),而本地方法棧則為虛擬機(jī)使用到的native方法服務(wù),可能底層調(diào)用的c或者c++,我們打開(kāi)jdk安裝目錄可以看到也有很多用c編寫的文件,可能就是native方法所調(diào)用的c代碼。

    4、堆

    堆是java虛擬機(jī)管理內(nèi)存最大的一塊內(nèi)存區(qū)域,因?yàn)槎汛娣诺膶?duì)象是線程共享的,所以多線程的時(shí)候也需要同步機(jī)制。java虛擬機(jī)規(guī)范對(duì)這塊的描述是:所有對(duì)象實(shí)例及數(shù)組都要在堆上分配內(nèi)存,但隨著JIT編譯器的發(fā)展和逃逸分析技術(shù)的成熟,這個(gè)說(shuō)法也不是那么絕對(duì),但是大多數(shù)情況都是這樣的。即時(shí)編譯器:可以把把Java的字節(jié)碼,包括需要被解釋的指令的程序)轉(zhuǎn)換成可以直接發(fā)送給處理器的指令的程序)逃逸分析:通過(guò)逃逸分析來(lái)決定某些實(shí)例或者變量是否要在堆中進(jìn)行分配,如果開(kāi)啟了逃逸分析,即可將這些變量直接在棧上進(jìn)行分配,而非堆上進(jìn)行分配。這些變量的指針可以被全局所引用,或者其其它線程所引用。堆是所有線程共享的,它的目的是存放對(duì)象實(shí)例。同時(shí)它也是GC所管理的主要區(qū)域,因此常被稱為GC堆,又由于現(xiàn)在收集器常使用分代算法,Java堆中還可以細(xì)分為新生代和老年代。根據(jù)虛擬機(jī)規(guī)范,Java堆可以存在物理上不連續(xù)的內(nèi)存空間,就像磁盤空間只要邏輯是連續(xù)的即可。它的內(nèi)存大小可以設(shè)為固定大小,也可以擴(kuò)展。當(dāng)前主流的虛擬機(jī)如HotPot都能按擴(kuò)展實(shí)現(xiàn)(通過(guò)設(shè)置 -Xmx和-Xms),如果堆中沒(méi)有內(nèi)存內(nèi)存完成實(shí)例分配,而且堆無(wú)法擴(kuò)展將報(bào)OOM錯(cuò)誤(OutOfMemoryError)

    5、方法區(qū)

    方法區(qū)同堆一樣,是所有線程共享的內(nèi)存區(qū)域,為了區(qū)分堆,又被稱為非堆。方法區(qū)用于存儲(chǔ)已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量,如static修飾的變量加載類的時(shí)候就被加載到方法區(qū)中。在老版jdk,方法區(qū)也被稱為永久代。不過(guò)自從JDK7之后,Hotspot虛擬機(jī)便將運(yùn)行時(shí)常量池從永久代移除了。

    手撕代碼:

    輸入一個(gè)整型數(shù)組,數(shù)組中的一個(gè)或連續(xù)多個(gè)整數(shù)組成一個(gè)子數(shù)組。求所有子數(shù)組的和的最大值。

    class?Solution?{

    ????public?int?maxSubArray(int[]?nums)?{

    ????????int?prev?=?0;

    ????????int?maxAns?=?nums[0];

    ????????for(int?i=0;i<nums.length;i++){

    ????????????prev?=?Math.max(prev+nums[i],nums[i]);

    ????????????maxAns?=?Math.max(prev,maxAns);

    ????????}

    ????????return?maxAns;

    ????}

    }

    給你一個(gè)整數(shù)n,請(qǐng)你在無(wú)限的整數(shù)序列找到并返回第n位

    class Solution {
    public:
    ? ? int findNthDigit(int n) {
    ? ? ? ? long long arr[10];//打表,將10^10次方以內(nèi)的位數(shù)界限打出來(lái)
    ? ? ? ? for(int i=0;i<10;i++)
    ? ? ? ? {
    ? ? ? ? ? ? if(i!=0)
    ? ? ? ? ? ? ? ? arr[i] = (pow(10,i+1)-pow(10,i))*(i+1)+arr[i-1];
    ? ? ? ? ? ? else
    ? ? ? ? ? ? ? ? arr[i] = 9;
    ? ? ? ? }
    ? ? ? ? //確定位數(shù)
    ? ? ? ? int num1=0;
    ? ? ? ? for(int i=0;i<10;i++)
    ? ? ? ? {
    ? ? ? ? ? ? if(n<=arr[i])
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? num1=i;
    ? ? ? ? ? ? ? ? break;
    ? ? ? ? ? ? }
    ? ? ? ? }

    ? ? ? ? long long num2=0;
    ? ? ? ? if(num1==0)
    ? ? ? ? ? ? num2 = 0;
    ? ? ? ? else
    ? ? ? ? ? ? num2 = arr[num1-1];
    ? ? ? ??
    ? ? ? ? long long num3 = (n-num2-1)%(num1+1);
    ? ? ? ??
    ? ? ? ? long long num4 = (n-num2-1)/(num1+1);
    ? ? ? ??
    ? ? ? ? long long num5=pow(10,num1)+num4;
    ? ? ? ??
    ? ? ? ? string str = to_string(num5);
    ? ? ? ??
    ? ? ? ? return str[num3]-'0';
    ? ? }
    };

    總結(jié)

    以上是生活随笔為你收集整理的网易一面总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。