国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

A電面_JAVA_Hong

2019-11-06 06:35:06
字體:
來源:轉載
供稿:網友

1、內存分配

簡單通俗的講,一個完整的java程序運行過程會涉及以下內存區域:

寄存器:JVM內部虛擬寄存器,存取速度非常快,程序不可控制。

棧:保存局部變量的值,包括:1.用來保存基本數據類型的值;2.保存類的實例,即堆區對象的引用(指針)。也可以用來保存加載方法時的幀。

堆:用來存放動態產生的數據,比如new出來的對象。注意創建出來的對象只包含屬于各自的成員變量,并不包括成員方法。因為同一個類的對象擁有各自的成員變量,存儲在各自的堆中,但是他們共享該類的方法,并不是每創建一個對象就把成員方法復制一次。

常量池:JVM為每個已加載的類型維護一個常量池,常量池就是這個類型用到的常量的一個有序集合。包括直接常量(基本類型,String)和對其他類型、方法、字段的符號引用(1)。池中的數據和數組一樣通過索引訪問。由于常量池包含了一個類型所有的對其他類型、方法、字段的符號引用,所以常量池在Java的動態鏈接中起了核心作用。常量池存在于堆中

代碼段:用來存放從硬盤上讀取的源程序代碼。

數據段:用來存放static定義的靜態成員。

2、函數的參數在哪里分配,怎么分配

JAVA語言只有值傳遞。 

函數的參數分配,需要分情況討論。

1、如果參數類型是原始類型,比如 public void func(int a) , 那么程序執行這個func方法的時候,會在棧中開辟空間,存放a的值。但是這樣的操作并不會改變棧中另一塊內存存在的a的值。棧內存之間互相不影響。

2、如果參數類型是引用類型,比如public void func(String a),那么開始程序執行String a="hello"的時候,在棧中開辟了空間,放a,a指向堆內存中常量池“hello”。 當a作為參數傳入func的時候,內存在棧中重新開辟空間,這個空間也指向a指向的那塊常量“hello”,這個時候如果函數里面改變了這個string,那么所有指向這個常量的引用的值都變了。

【http://www.cnblogs.com/lixiaolun/p/4311863.html】

3、用偽代碼實現單鏈表

【http://www.cnblogs.com/_popc/p/4025684.html】

具體的思路是:

1、首先定義一個Node節點類。成員變量1是next指針,指向后一個元素的指針。成員變量2是data,保存該節點的數據。

2、定義一個單連邊。首先Node一個頭節點。然后定義一個position來指明該節點的位置。

3、定義鏈表的相關方法。首先是初始化頭節點,this.first=null。 然后是插入和刪除頭節點。然后是一般節點的增刪查。

4、如何把鏈表反轉(你的算法,算法的缺點,時間復雜度,能否改進)

鏈接:https://www.nowcoder.com/questionTerminal/75e878df47f24fdc9dc3e400ec6058ca來源:牛客網

public class Solution { publicstatic ListNode ReverseList(ListNode head) { if(head==null) returnnull; ListNode reversedHead=null; ListNode current=head; ListNode tmp=null; ListNode PRe=null; while(current!=null){ tmp=current.next; current.next=pre; if(tmp==null) reversedHead=current;            pre=current; current=tmp;   } returnreversedHead; }}鏈表的反轉操作很多,上面這個是典型的遞歸思想。

遞歸的方法是,利用遞歸走到鏈表的末端,然后更新每一個node的next值,實現鏈表的反轉,而newhead的值沒有發生變化,為尾節點。

鏈表的反轉還有非遞歸思想的,三指針的,利用棧的。。。。

5、了解操作系統嗎?

http://blog.csdn.net/youngchang06hpu/article/details/8009947

6、講一下你理解的進程

進程:一個程序在一個數據集合上的一次運行過程。

http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html

假設CPU是一座工廠,假設CPU是單核的,一次只能運行一個任務的那種。 那就進程就像是工廠里的一個車間,單核的CPU一個確切的時間只允許一個車間工作,其他車間休息。一個車間里可以有很多工人,這些工人就叫線程。工人們在同一個車間里工作,所以進程的內存空間是被線程共享的。

因此,操作系統可以總結為:

1、以多進程的形式,允許多個任務同時運行。

2、以多線程的形式,允許單個任務分成不同的部分運行。

3、提供協調機制,防止進程間的沖突,允許線程之間共享數據。

7、進程之間是如何通信的

http://jingyan.baidu.com/article/3a2f7c2e17e12b26afd611cb.html

進程之間有8種通信方式:

1、信號sinal :信號處理器

2、信號量 semophore :本質上是一個計數器。P、V操作

3、消息隊列 message queue :一個消息隊列可以被多個進程共享。 本質上是消息的鏈接表。

4、共享內存 shared memory :多個進程可以訪問同一塊內存。

5、套接字 socket: 可用于不同機器之間的進程間通信。

6、管道 pipe 只能在父子進程中使用,是一種半雙工的通信方式。

7、高級管道 popen :將一個程序當做一個新的進程在當前程序進程中啟動。

8、有名管道 named pipe :允許無親緣關系的進程間半雙工通信。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万源市| 西安市| 闽侯县| 渑池县| 凌云县| 白水县| 电白县| 静乐县| 新丰县| 谢通门县| 额尔古纳市| 原平市| 山东| 阆中市| 金沙县| 通江县| 遂溪县| 辛集市| 苍梧县| 嘉定区| 新兴县| 广饶县| 搜索| 迁安市| 二连浩特市| 湖南省| 凌云县| 平乐县| 英山县| 包头市| 土默特右旗| 林芝县| 仁布县| 玉树县| 和硕县| 扶沟县| 张掖市| 万安县| 衡阳市| 丹江口市| 镇雄县|