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

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

生活随笔

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

编程问答

抓住金三银四好机会,超齐全java大厂面试题汇总(请自寻学习查找答案)

發(fā)布時(shí)間:2025/3/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 抓住金三银四好机会,超齐全java大厂面试题汇总(请自寻学习查找答案) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一、JDK源碼

1.HashMap

2.concurrentHashMap

3.volatile

4.linkedList、ArrayList

5.線程池

6.設(shè)計(jì)模式

二、JVM、GC、G1

1.jvm內(nèi)部

2.加載

3.堆

4.方法區(qū)

5.jit即時(shí)編譯器

6.垃圾回收

7.垃圾回收器

三、springboot、springcloud

1.注解

2.spring源碼

3.AOP

4.事務(wù)

5.自動(dòng)配置原理

6.請(qǐng)求處理原理

7.springcloud

四、docker、k8

五、netty

六、xxljob

七、處理生產(chǎn)問(wèn)題

八、redis

1.string

2.hash

3.list

4.set(無(wú)序)

5.zset

九、es

十、mysql


一、JDK源碼

1.HashMap

jdk7:hash沖突會(huì)存放在鏈表中,

jdk8:hash沖突過(guò)多,鏈表會(huì)轉(zhuǎn)變?yōu)榧t黑樹(shù)。‘

紅黑樹(shù)(Red Black Tree) 是一種自平衡二叉查找樹(shù)。’

2.concurrentHashMap

jdk7:分段鎖。

jdk8:不用分段鎖了,使用cas+

3.volatile

可見(jiàn)性,不保證原子性,防止指令重排序。

cas:比較并交換

4.linkedList、ArrayList

CountDownLacth:他經(jīng)常用于監(jiān)聽(tīng)某些初始化操作,等初始化執(zhí)行完畢后,通知主線程繼續(xù)工作。

CyclicBarrier:只要有一個(gè)人沒(méi)有準(zhǔn)備好,大家都等待

Semaphore信號(hào)量

Callable和Future的使用

CopyOnWriteArrayList(讀寫(xiě)分離,寫(xiě)時(shí)復(fù)制)、CopyOnWriteArraySet(HashSet不安全)、

5.線程池

??newFixedThreadPool()、newSingleThreadExecutor()、newCachedThreadPool()、newScheduledThreadPool()

線程池七大參數(shù)

1.corePoolSize:線程池中的常駐核心線程數(shù)。

????在創(chuàng)建了線程池后,當(dāng)有請(qǐng)求任務(wù)來(lái)之后,就會(huì)安排池中的線程去執(zhí)行任務(wù),近似理解為今日當(dāng)值線程。

????當(dāng)線程池中的線程數(shù)目達(dá)到corePoolSize后,就會(huì)把到達(dá)的任務(wù)放到緩存隊(duì)列當(dāng)中。

2.maximumPoolSize:線程池能夠容納同時(shí)執(zhí)行的最大線程數(shù),此值必須大于等于1。

3.keepAliveTime:多余的空閑線程的存活時(shí)間。

????當(dāng)前線程池線程數(shù)量超過(guò)corePoolSize時(shí),當(dāng)空閑時(shí)間達(dá)到keepAliveTime值時(shí),多余空閑線程會(huì)被銷(xiāo)毀直到只剩下corePoolSize個(gè)線程為止。

4.unit:keepAliveTime的單位。

5.workQueue:任務(wù)隊(duì)列,被提交但尚未被執(zhí)行的任務(wù)。

6.threadFactory:表示生成線程池中工作線程的線程工廠,用于創(chuàng)建線程,一般用默認(rèn)的即可。

7.handler:拒絕策略,表示當(dāng)隊(duì)列滿了并且工作線程大于等于線程池的最大線程數(shù)(maximumPoolSize)時(shí)如何來(lái)拒絕。

6.設(shè)計(jì)模式

設(shè)計(jì)模式簡(jiǎn)介 | 菜鳥(niǎo)教程

二、JVM、GC、G1

1.jvm內(nèi)部

類加載子系統(tǒng)、堆、棧、方法區(qū)、直接內(nèi)存、垃圾回收系統(tǒng)、執(zhí)行引擎、本地方法棧、PC寄存器

2.加載

加載-鏈接(驗(yàn)證、準(zhǔn)備、解析)-初始化

類加載器:系統(tǒng)類加載器、擴(kuò)展類加載器、引導(dǎo)類加載器(啟動(dòng)類加載器)、用戶自定義加載器

雙親委派打破:1.jdk1.2之前還沒(méi)有,引入了線程上下文類加載器,熱代碼替換熱部署

3.堆

jdk7:新生代、老年代、永久代

jdk8:新生代、老年代、元空間

參數(shù)

-Xms、-Xmx設(shè)置堆內(nèi)存大小

新生代一般占1,老年代占2,eden比Survivor為8:1:1,朝生夕死。

垃圾收集:

頻繁在新生區(qū)收集,很少在養(yǎng)老區(qū)收集,幾乎不再永久區(qū)/元空間收集。

TLAB:線程私有緩存,避免線程不安全問(wèn)題,TLAB僅占有eden區(qū)的百分之一,優(yōu)先在TLAB分配,分配失敗會(huì)加鎖然后在eden區(qū)分配內(nèi)存。

逃逸分析、標(biāo)量替換(JIT即時(shí)編譯器會(huì)將對(duì)象拆解為基本數(shù)據(jù)類型):棧上分配。

4.方法區(qū)

jdk7:方法區(qū)-永久代

jdk8:元空間-方法區(qū)

常量池(數(shù)量值、字符串值、類引用、字段、方法引用)vs運(yùn)行時(shí)常量池(int、string)

方法區(qū)的垃圾回收(很難回收)

方法區(qū)的演變

?

?

?

5.jit即時(shí)編譯器

6.垃圾回收

stop?the?world、安全點(diǎn)與安全區(qū)域,強(qiáng)軟弱虛、內(nèi)存溢出與內(nèi)存泄漏。

引用計(jì)數(shù)法(循環(huán)引用問(wèn)題無(wú)法解決)、可達(dá)性分析算法(GC?ROOts,棧引用的對(duì)象、本地方法引用的對(duì)象、靜態(tài)屬性引用的對(duì)象、方法區(qū)中引用的對(duì)象例如字符串常量、同步鎖持有的對(duì)象、系統(tǒng)類加載器加載的對(duì)象等等)

finalize(),對(duì)象被銷(xiāo)毀之前會(huì)調(diào)用(只有一次復(fù)活機(jī)會(huì))

標(biāo)記-清除算法,復(fù)制算法,標(biāo)記-壓縮算法,分代回收,分區(qū)算法(G1)

7.垃圾回收器

串行新生代老年代回收(serial?GC)單核cpu

并行垃圾新生代老年代回收器(parallel?GC),吞吐量?jī)?yōu)先

parnew +?CMS并發(fā),但是需要有個(gè)兜底方案(低延遲)

G1區(qū)域化分代式,混合回收。分區(qū)域所以有個(gè)記憶集的概念,

zgc,革命性的。

三、springboot、springcloud

1.注解

@Bean、@Configuration、@ComponentScan掃描包(包括排除等等@Filter排除規(guī)則)、@Scope("prototype")(設(shè)置單實(shí)例多實(shí)例)、@Lazy-bean懶加載、@Conditional-按照條件注冊(cè)bean、@Import導(dǎo)入組件

@Controller、@Service、@Repository、@Component注冊(cè)名稱都是類名首字母小寫(xiě)

@Value賦值、@PropertySource加載配置文件、@EnableConfigurationProperties + @ConfigurationProperties自動(dòng)配置綁定

@Autowired自動(dòng)注入(優(yōu)先按照類型,多個(gè)類型就根據(jù)屬性名查找)@Autowired:可以標(biāo)注 構(gòu)造器、參數(shù)、方法、屬性。

@Qualifier指定需要裝配的組件名稱

@Primary裝配首選bean

@Resource默認(rèn)是按照屬性名裝配

@Inject自動(dòng)裝配,與@Autowired一樣

@RestController、@Controller、@ResponseBody、@RequestMapping("/hello")

@SpringBootApplication啟動(dòng)類,容器注冊(cè)

@PathVariable、@RequestHeader、@ModelAttribute、@RequestParam、@MatrixVariable、@CookieValue、@RequestBody、@RequestAttribute

@ControllerAdvice+@ExceptionHandler處理全局異常(推薦)

2.spring源碼

BeanPostProcessor后置處理器,bean賦值,注入其他組件、@Autowired、生命周期注解功能、@Async、等等很多功能都用到了BeanPostProcessor。

ApplicationContextAwareProcessor注入源碼

3.AOP

前置?后置?環(huán)繞?異常?返回通知。

在組件創(chuàng)建完成之后,判斷組件是否需要增強(qiáng),需要增強(qiáng)就返回一個(gè)代理對(duì)象。

攔截器鏈的概念

4.事務(wù)

@Transactional

底層使用AOP,

5.自動(dòng)配置原理

@EnableAutoConfiguration

* SpringBoot先加載所有的自動(dòng)配置類 xxxxxAutoConfiguration

* 每個(gè)自動(dòng)配置類按照條件進(jìn)行生效(@Conditionalxxxx),默認(rèn)都會(huì)綁定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件進(jìn)行了綁定

* 生效的配置類就會(huì)給容器中裝配很多組件

* 只要容器中有這些組件,相當(dāng)于這些功能就有了

* SpringBoot默認(rèn)會(huì)在底層配好所有的組件。但是如果用戶自己配置了以用戶的優(yōu)先(@ConditionalOnMissingBean)

*定制化配置:① 用戶直接自己@Bean替換底層的組件② 用戶去看這個(gè)組件是獲取的配置文件什么值就去修改。

xxxxxAutoConfiguration ---> 組件 ---> xxxxProperties里面拿值 ----> application.properties

6.請(qǐng)求處理原理

HttpServlet -> HttpServletBean -> FrameworkServlet -> DispatcherServlet(實(shí)現(xiàn)doService-> doDispatch方法處理請(qǐng)求)

處理請(qǐng)求、解析參數(shù)、攔截器HandlerInterceptor

7.springcloud

nacos、feign?openfeign、hystrix、gateway、sleuth?zipkin、

sentinel、seata(AT模式、SAGA模式)

四、docker、k8

docker使用

五、netty

RPC框架、心跳檢測(cè)、http服務(wù)器、即時(shí)通訊、消息推送

Channel通道,用來(lái)讀寫(xiě)連接等,

EventLoop用來(lái)處理事件。

異步非阻塞。

CPU核心數(shù)*2

bossGroup:接收連接。

workerGroup:負(fù)責(zé)具體的處理,交由對(duì)應(yīng)的 Handler 處理。

自帶的解碼器

六、xxljob

分布式任務(wù)調(diào)度,配合springbatch使用(但是springbatch比較復(fù)雜,reader、writer、processor等,所以直接用的tasklet)

七、處理生產(chǎn)問(wèn)題

jstack 、?jmap

jps:顯示當(dāng)前java縣城

jstack:查看當(dāng)前進(jìn)程的線程棧,通常查看死鎖、鎖等待等。

jmap:顯示各種信息,還可以生成堆dump快照(會(huì)stop應(yīng)用,生產(chǎn)慎用)

jstat查看堆內(nèi)存

八、redis

string

hash

list

set

zset(sortedSet)

bitmap(位圖)

HyperLogLog(統(tǒng)計(jì))

GEO(地理)

stream

1.string

set?get

ttl?查看過(guò)期時(shí)間

setnx?不存在創(chuàng)建

商品id等、點(diǎn)贊數(shù)、閱讀量,incr命令遞增

2.hash

hset?hget

做緩存用

3.list

lpush:向左添加

rpush:向右添加

訂閱列表

4.set(無(wú)序)

sadd、srem

交集、差集、并集運(yùn)算,隨機(jī)彈出元素(SPOP彈出并刪除,SRANDMEMBER彈出不刪除)。

抽獎(jiǎng)小程序、點(diǎn)贊用戶列表

微博社交關(guān)系(關(guān)注的人、我關(guān)注的人也關(guān)注她、可能認(rèn)識(shí)的人、共同關(guān)注等)

5.zset

zadd、

商品排序(排行榜)、抖音熱搜、

分布式鎖、redisson、內(nèi)存淘汰策略lru(最近最少使用)

哨兵、集群、持久化(快照、aof)

九、es

elk、查詢、倒排索引、IK分詞器、javaAPI

Relational?DB(MySQL)

Elasticsearch

數(shù)據(jù)庫(kù)(database)

索引(indices)(就和數(shù)據(jù)庫(kù)一樣)

表(tables)

類型types(慢慢會(huì)被棄用)

行(rows)

文檔documents

字段(columns)

字段fields

十、mysql

MyISAM和InnoDB(支持行鎖)

索引:單值索引、唯一索引、主鍵索引、復(fù)合索引

B+樹(shù),真實(shí)數(shù)據(jù)存在葉子結(jié)點(diǎn),非葉子節(jié)點(diǎn)不存儲(chǔ)真實(shí)數(shù)據(jù),只存儲(chǔ)索引方向。

需要索引:主鍵、頻繁查詢、頻繁更新、高并發(fā)下更傾向于用復(fù)合索引、排序字段、統(tǒng)計(jì)分組字段。

不需要:表記錄少、經(jīng)常刪改的、重復(fù)多的字段

explain:

id越大越先被執(zhí)行

type最好達(dá)到ref級(jí)別

key_len:越短越好。

索引失效:

1.全值匹配我最愛(ài)。

2.最佳左前綴法則。

3.不在索引列上計(jì)算、函數(shù)、類型轉(zhuǎn)換,字符串不加引號(hào)導(dǎo)致類型轉(zhuǎn)換。

4.范圍索引右邊的列會(huì)失效。

5.盡量使用覆蓋索引,少用select*

6.!= <>無(wú)法用索引

76.is?null?is?not?null

8.like以通配符開(kāi)頭的

9.少用or

慢查詢?nèi)罩尽ruid會(huì)有sql執(zhí)行時(shí)間

樂(lè)觀鎖悲觀鎖

總結(jié)

以上是生活随笔為你收集整理的抓住金三银四好机会,超齐全java大厂面试题汇总(请自寻学习查找答案)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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