日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Java 阶段面试 知识点合集 - 我们到底能走多远系列(15)

發(fā)布時間:2023/11/30 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 阶段面试 知识点合集 - 我们到底能走多远系列(15) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我們到底能走多遠(yuǎn)系列(15)

扯淡:這些知識點來源是通過面試涉及到的,面的公司不多,知識點涉及也不多,我每次面試后都在備忘錄里寫下有用的東西,集合起來分享一下,因為是知識點,所以就不出什么面試題目啦。不涉及任何公司,也不談?wù)撁娼?jīng),純粹是學(xué)習(xí)而已。

  《我們到底能走多遠(yuǎn)系列》的階段性目標(biāo)已經(jīng)達(dá)到啦,15個,先給自己鼓勵一下吧。

  有目的性學(xué)習(xí)的確會讓人不偷懶,能讓人在短時間里努力,自我激勵的方式很多,每天花點時間做一件事對你肯定有幫助,好吧先講一個故事,口癢了,哈哈。

  可能很多朋友都聽過了,沒關(guān)系,再聽一遍,你就可以熟練的講給你的朋友們聽了。

  從前有兩個和尚他們分別住在河對岸的兩個廟里,每天他們都會來河邊打水,每天都會見面,時間一長他們就相當(dāng)于那啥,心靈相通,成了好朋友,但他們誰也沒跨過河去看望過對方。這樣年復(fù)一年,一日,住在東岸的和尚沒來打水,西岸的和尚就疑惑了,一天不打水,他喝什么呢?第二天,西岸的和尚還是沒來,連續(xù)半個月東岸的和尚都沒見到西岸的和尚,于是他就想他朋友是不是病了。于是就挑著水去到西岸的廟里,他看到他的朋友一點沒事,就問他:你怎么不來河里打水了呢,沒有水,你喝什么呢?西岸的和尚把他朋友領(lǐng)到園子里,指著角落里的一口井說,這是我挖的一口井,有了井,就不用再去河邊打水了。東岸的和尚又問了:我們平時在廟里怎么忙,幾乎沒有空閑的時間,你怎么可能有時間挖一口井呢?回答:我每天就在那個地方掘一下,年復(fù)一年,它就成了井。

  你在掘你的井嗎?

?

主題:

關(guān)于數(shù)據(jù)結(jié)構(gòu):有不正確的地方或改進(jìn)的地方希望你能指出來,我會感謝你給我進(jìn)步的機會。

1,stack

來自《Introduction to Algorithms》的圖:

遵循先進(jìn)后出(FILO)的原則,下面是模擬的代碼:

package code.structures;public class Stack {private String[] s;// 用數(shù)組來模擬private int top;private int length;// 初始化public Stack(int index){this.s = new String[index];this.top = 0;this.length = index;}// 放數(shù)據(jù)public void push(String str){if(str == null){return;}if(top == length){System.out.println("stack is full");return;}this.s[top] = str;this.top++;}// 拿數(shù)據(jù)public String pop(){if(this.isEmpty()){System.out.println("There is no data");return null;}String s1 = s[--top];//因為數(shù)組從0開始,順便每pop一次要把top減一s[top] = null;return s1;}// 取得最高位置public int getTop(){return this.top;}public boolean isEmpty(){if(this.top == 0){return true;}return false;} }

2,queue

來自《Introduction to Algorithms》的圖:

遵循先進(jìn)先出(FIFO)的原則,下面是模擬的代碼:

代碼使用標(biāo)志符的方式來控制內(nèi)部的數(shù)組不溢出和為空是不能取出數(shù)據(jù)。

package code.structures;public class Queue {private String[] s;// 用數(shù)組來模擬private int head; // 隊列頭private int tail; // 隊列尾private int length; // 隊列長度private boolean isFull; // 滿信號private boolean isEmpty; // 空信號public Queue(int index) {this.s = new String[index];this.head = 0;this.tail = 0;length = index;isFull = false;isEmpty = true;}// 放數(shù)據(jù)public boolean enQueue(String str) {if (isFull) { // 已滿的隊列就不能再放數(shù)據(jù)啦System.out.println("queue is full");return false;}// 放在隊列的尾部s[tail] = str;tail++; // 移動尾部// 頭尾相連if (tail == length) {tail = 0;}// 在放數(shù)據(jù)的時候出現(xiàn)頭尾相同時,就認(rèn)為是滿了if (head == tail) {isFull = true;}// 因為是放數(shù)據(jù),所以不可能出現(xiàn)空隊列if (isEmpty) {isEmpty = false;}return true;}// 拿數(shù)據(jù)public String deQueue() {if (isEmpty) {// 空隊列就不處理了System.out.println("queue is empty");return null;}// 從頭部取得數(shù)據(jù)String str = s[head];head++;if (head == length) {head = 0;}// 取數(shù)據(jù)的時候出現(xiàn)頭尾相同,就認(rèn)為出現(xiàn)空隊列if (head == tail) {isEmpty = true;}// 因為是取數(shù)據(jù),所以不可能出現(xiàn)一個滿隊列if (isFull) {isFull = false;}return str;}public boolean isEmpty(){return isEmpty;}public boolean isFull(){return isFull;} }

3,ArrayList和LinkedList

我們不看他們的源碼,但也有必要知道他們大概的實現(xiàn)方式:ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結(jié)構(gòu),LinkedList基于鏈表的數(shù)據(jù)結(jié)構(gòu)。這就是他們區(qū)別的關(guān)鍵之處,我想著相當(dāng)于是一個數(shù)組和一個鏈表在比較。

ArrayList基于數(shù)組的,看他的構(gòu)造方法:

public ArrayList(int initialCapacity) {super();if (initialCapacity < 0)throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity// 傳入ArrayList大小,就幫你創(chuàng)建一個這樣大小的Object數(shù)組this.elementData = (E[])new Object[initialCapacity];}public ArrayList() {this(10);//默認(rèn)的話,就是10大小的數(shù)組}

關(guān)于ArrayList的動態(tài)數(shù)組的實現(xiàn),是依靠啦一個方法:?System.arraycopy方法。

看下面兩個源碼方法就會明白:

public void ensureCapacity(int minCapacity) {modCount++;int oldCapacity = elementData.length;if (minCapacity > oldCapacity) {Object oldData[] = elementData;// 新數(shù)組長度是老數(shù)組的1.5倍int newCapacity = (oldCapacity * 3)/2 + 1;if (newCapacity < minCapacity)newCapacity = minCapacity;// 創(chuàng)建出新的數(shù)組elementData = (E[])new Object[newCapacity];// 把老數(shù)據(jù)拷貝到新數(shù)組里去System.arraycopy(oldData, 0, elementData, 0, size);}}public boolean add(E o) {ensureCapacity(size + 1); // 確定是否需要增長數(shù)組elementData[size++] = o;return true;}

ArrayList的remove方法,決定了它暴露了頻繁刪除數(shù)據(jù)性能不高的原因:

public E remove(int index) {RangeCheck(index);modCount++;E oldValue = elementData[index];//刪除的數(shù)據(jù)作為返回值int numMoved = size - index - 1;if (numMoved > 0)// 用一個自我拷貝,移動了刪除點后的全部數(shù)據(jù),所以會影響效率System.arraycopy(elementData, index+1, elementData, index,numMoved);// copy數(shù)據(jù)后,最后一位的數(shù)據(jù)還在,需要把它刪除elementData[--size] = null; // Let gc do its workreturn oldValue;}

而LinkedList是基于列表的,它的remove只需要斷開一個連接,連上一個連接,無論我們刪除那一個數(shù)據(jù)需要的時間是相同的。但是考慮到LinkedList的檢索需要更多的時間因為,最差的結(jié)果里,需啊喲遍歷整個Link。

所以:

1.對于隨機訪問get和set,ArrayList覺得優(yōu)于LinkedList。
2.對于新增和刪除操作add和remove,LinedList比較占優(yōu)勢。

3.若只對單條數(shù)據(jù)插入或刪除,ArrayList的速度反而優(yōu)于 LinkedList。但若是批量隨機的插入刪除數(shù)據(jù),LinkedList的速度大大優(yōu)于ArrayList.

?

3.HashMap和HashTable
1.HashMap 線程非安全 null可為key
2.HashTable 線程安全 null不可為key
3.HashTable有一個contains(Object value),功能和containsValue(Object value)功能一樣。

?

4.SQL基礎(chǔ)幾點

1,case語句的使用

select classId, count(case when sex = "男" then 1 end) from Test group by classTd;

2,group by :

select后面的所有列中,沒有使用聚合函數(shù)的列,必須使用group by!

3,having:

篩選滿足條件的組,條件經(jīng)常包含聚合組函數(shù).

4,left join 相當(dāng)于 left out join ,right join 相當(dāng)于 right out join 也就是說什么外連接就是左連接和右連接嘛(不知道準(zhǔn)不準(zhǔn)確),join 相當(dāng)于 inner join。

還有個full join,鏈表全部需要查出來嘛。

left join和right join相當(dāng)于是求有交集的兩個集合的一個集合的值。

inner join相當(dāng)于是純粹的交集。

full join 你懂的還剩下并集。

5,代碼規(guī)范

      可讀性:代碼是否可讀易讀,對于一個團隊來說,編碼標(biāo)準(zhǔn)是否一致,編碼風(fēng)格是否一致;

  ?功能性:代碼正確得實現(xiàn)了業(yè)務(wù)邏輯;

  ?可維護(hù)性:代碼邏輯是有層次的,是容易修改的;

  ?高效性:代碼實現(xiàn)在時間和空間的使用上是高效的;

?

  就這么多吧,sql方面還有很多需要學(xué)習(xí)的地方,發(fā)現(xiàn)以前寫的出的sql現(xiàn)在覺得很困難了,各位,有沒有學(xué)習(xí)提高sql的方法,或推薦的書。以前系統(tǒng)學(xué)過sql后幾個月沒用,就一下生疏了,然后重復(fù)撿起來,再生疏,難點復(fù)雜點的sql頭緒會很亂,有好的訓(xùn)練方法嗎?

?

讓我們繼續(xù)前行

----------------------------------------------------------------------

?

努力不一定成功,但不努力肯定不會成功。
共勉

轉(zhuǎn)載于:https://www.cnblogs.com/killbug/archive/2012/11/13/2769017.html

總結(jié)

以上是生活随笔為你收集整理的Java 阶段面试 知识点合集 - 我们到底能走多远系列(15)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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