快手提前批--Java开发面经
一面
泊松分布下,出現(xiàn)8次的概率已經(jīng)非常低了
hashmap在jdk1.8中的變化? 如何實(shí)現(xiàn)解決死循環(huán)? 經(jīng)常問(wèn)
參考鏈接
hashMap很不錯(cuò)的總結(jié)
hashMap在Jdk1.7中為何出現(xiàn)死循環(huán)?
https://blog.csdn.net/qq_36520235/article/details/86653136
CAS與ABA問(wèn)題?什么時(shí)候出現(xiàn)ABA問(wèn)題?
空間擔(dān)保失敗
Cms的過(guò)程,四個(gè)過(guò)程
Cms與G1的區(qū)別 不會(huì)的面經(jīng)中有
G1收集器有什么特點(diǎn)?哪些會(huì)stop the world?
讓三個(gè)線程順序執(zhí)行的方法,一直問(wèn),很多很多
join() countdownLatch wait()和notify() 使用線程池 將所有線程放入一個(gè)阻塞隊(duì)列 ,保證順序輸出 通過(guò)一個(gè)ReentrantLock和三個(gè)conditon實(shí)現(xiàn) synchronized+一個(gè)狀態(tài)變量 信號(hào)量零拷貝
mmap: 通過(guò)內(nèi)存映射,將文件映射到內(nèi)核緩沖區(qū),同時(shí),用戶空間可以共享內(nèi)核空間的數(shù)據(jù)。這樣,在進(jìn)行網(wǎng)絡(luò)傳輸時(shí),就可以減少內(nèi)核空間到用戶空間的拷貝次數(shù)sendFile:數(shù)據(jù)被 DMA 引擎從文件復(fù)制到內(nèi)核緩沖區(qū),然后調(diào)動(dòng) write 方法時(shí),從內(nèi)核緩沖區(qū)進(jìn)入到 Socket,這時(shí),是沒(méi)有上下文切換的,因?yàn)樵谝粋€(gè)用戶空間。最后,數(shù)據(jù)從 Socket 緩沖區(qū)進(jìn)入到協(xié)議棧。區(qū)別: mmap 適合小數(shù)據(jù)量讀寫,sendFile 適合大文件傳輸。 mmap 需要 4 次上下文切換,3 次數(shù)據(jù)拷貝;sendFile 需要 3 次上下文切換,最少 2 次數(shù)據(jù)拷貝。 sendFile 可以利用 DMA 方式,減少 CPU 拷貝,mmap 則不能(必須從內(nèi)核拷貝到 Socket 緩沖區(qū))。內(nèi)存映射文件
內(nèi)存映射文件,是指文件和內(nèi)存邏輯地址映射起來(lái)。 mmap()返回一個(gè)指針ptr,可以通過(guò)指針進(jìn)行讀寫,而不必通過(guò)read()或者write() ptr指向一個(gè)邏輯地址,需要MMU把邏輯地址轉(zhuǎn)換成物理地址。mmap,和 read,write的區(qū)別,mmap減少了哪一次拷貝?
1:mmap是一種內(nèi)存映射文件的方法,即將一個(gè)文件映射到進(jìn)程的地址空間,實(shí)現(xiàn)文件磁盤地址和進(jìn)程地址空間之間的映射 2:進(jìn)程就可以使用指針讀寫這一段內(nèi)存,而系統(tǒng)會(huì)自動(dòng)回寫臟頁(yè)面到對(duì)應(yīng)的文件磁盤上,不必再調(diào)用read,write等系統(tǒng)調(diào)用函數(shù)。 相反,內(nèi)核空間對(duì)這段地址區(qū)域的修改也直接反映到用戶空間,從而可以實(shí)現(xiàn)不同進(jìn)程間的文件共享區(qū)別: 系統(tǒng)調(diào)用read(), 讀文件時(shí)需要先將文件頁(yè)從磁盤拷貝到頁(yè)緩存中,由于頁(yè)緩存處在內(nèi)核空間,不能被用戶進(jìn)程直接尋址,所以還需要將頁(yè)緩存中數(shù)據(jù)頁(yè)再次拷貝到內(nèi)存對(duì)應(yīng)的用戶空間中。 這樣,通過(guò)了兩次數(shù)據(jù)拷貝過(guò)程,才能完成進(jìn)程對(duì)文件內(nèi)容的獲取任務(wù)。 write() 寫操作也是一樣,也是需要兩次數(shù)據(jù)拷貝而使用mmap操作文件中,創(chuàng)建新的虛擬內(nèi)存區(qū)域和建立文件磁盤地址和虛擬內(nèi)存區(qū)域映射這兩步,沒(méi)有任何文件拷貝操作。 而之后訪問(wèn)數(shù)據(jù)時(shí)發(fā)現(xiàn)內(nèi)存中并無(wú)數(shù)據(jù)而發(fā)起的缺頁(yè)異常過(guò)程,可以通過(guò)已經(jīng)建立好的映射關(guān)系,只使用一次數(shù)據(jù)拷貝,就從磁盤中將數(shù)據(jù)傳入內(nèi)存的用戶空間中,供進(jìn)程使用。Redis速度快的原因?
單線程會(huì)有什么問(wèn)題?
然后問(wèn)io多路復(fù)用,epoll模型的過(guò)程? 使用什么數(shù)據(jù)結(jié)構(gòu)
eventpoll結(jié)構(gòu)體
用戶態(tài)與核心態(tài)
拜占庭算法
大數(shù)據(jù)相關(guān)問(wèn)題,我不會(huì)
為什么使用B+樹(shù)?
覆蓋索引
性別上建索引會(huì)用到嗎? 重復(fù)度超過(guò)30%不會(huì)走索引
ACID特性
幻影讀
bin log/ redo log的區(qū)別
算法,最長(zhǎng)回文子串
數(shù)據(jù)服務(wù)部門,做大數(shù)據(jù)的
java技術(shù)棧,spring, spring cloud, mysql, redis,卡夫卡,然后還有大數(shù)據(jù)的開(kāi)發(fā)的工具,比如hadoop啥的
9.3 二面
Spring
Servlet的生命周期
ArrayList插入元素時(shí)其他元素怎么移動(dòng)?
LinkedHashMap的實(shí)現(xiàn),這次加深了理解了
Java中樂(lè)觀鎖悲觀鎖,各自怎么實(shí)現(xiàn)?有什么優(yōu)缺點(diǎn)?
Mysql中的語(yǔ)句
算法:計(jì)數(shù)器
int calculate(String exp)
exp = “3-125+34*5”
正整數(shù) ±*
#coding=utf-8 import sys #str = raw_input() import collectionsdef mul(exp):res = 0i = 0stack = []while i < len(exp):if '0'<=exp[i]<='9':start = iwhile i < len(exp) and '0' <= exp[i] <= '9':i += 1stack.append(int(exp[start: i]))i -= 1else:if len(stack) >= 2:res *= (stack.pop() * stack.pop())i += 1return resexp = '9*2*3*2' print(mul(exp))def calculate(exp):s1 = exp.split('+') # "3-12*5, 3*4*5"s2 = []for s in s1:s3 = s.split('-') # 3 12*5, 3*4*5s2.append(s3)mapp = collections.defaultdict()for ex in s2:if '*' in ex:mapp[ex] = mul(ex)for key, value in mapp: # 3-60+60exp.replace(key, value)res = 0i = 0sign = [1]while i < len(exp):if '0'<=exp[i]<='9':start = iwhile i < len(exp) and '0' <= exp[i] <= '9':i += 1res += (sign.pop()* int(exp[start: i]))i -= 1elif exp[i] == '+':sign.append(1)elif exp[i] == '-':sign.append(-1)i += 1return res重寫了一下!
def calExp(strs):if not strs: return []stack1 = []stack2 = []i = 0while i < len(strs):if '0' <= strs[i] <= '9':start = iwhile i < len(strs) and '0' <= strs[i] <= '9':i += 1num = int(strs[start:i])stack1.append(num)i -= 1elif strs[i] == '+' or strs[i] == '-':stack2.append(strs[i])elif strs[i] == '*':pre = stack1.pop()i = i + 1start = iwhile i < len(strs) and '0' <= strs[i] <= '9':i += 1#print(start, i)cur = int(strs[start: i])print(start, i, cur)stack1.append(pre*cur)i -= 1i += 1stack1.reverse()stack2.reverse()while stack1 and stack2:first = stack1.pop()second = stack1.pop()op = stack2.pop()if op == '+':stack1.append(first + second)else:stack1.append(first - second)return stack1[0]strs = '90+8*3*40-9-19+23' res = calExp(strs) print(res)''' 90+8*3*40-9-19+23數(shù)字 stack1 = [90, 8] 操作 stack2 = [+]'''總結(jié)
以上是生活随笔為你收集整理的快手提前批--Java开发面经的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PIC16F877A单片机 (中断与定时
- 下一篇: java微信小程序支付-回调(Jsapi