面試題-實例

1.什么是線程池?

線程池就是事先將創建好的線程進行整合,當需要使用的時候,直接拿出來進行使用,不用現去創建,可以節約開辟的時間,提高效率。

2.線程池有哪些種類?

在java.util.concurrent.Executors包中提供了許多靜態方法。

Executors.newsingleThreadPool? 單例線程池

Executors.newFixedThreadPool? 定長容量的線程池

Executors.newSechodedThreadPool 執行周期任務的線程池

Executors.newCachedThreadPool 可緩存線程池

3.線程池的工作原理

當首次進行execute提交任務時,才會去創建線程。首先是由核心線程來執行。當核心線程都被使用時,會進入等待隊列中進行緩存,當等待隊列中滿了后,就會由救急線程來進行執行。當前方都滿了,就會執行拒絕策略,默認是拋出一個異常。

4.線程池的核心參數

corePoolSize 核心線程數? ?

maxmumPoolSize 最大線程數? ?核心+救急

workQure 等待隊列????????????????? ? keepAliveTime? 救急線程生存時間

unit 時間單位? ? ? ? ? ? ? ? ? ? ? ? ? ? ? unit? ?時間單位

threadFactory 線程工廠? ? ? ? ? ? ?workQueue? 等待隊列

handleExecutor 拒絕策略? ? ? ? ? ThreadFactory? 線程工廠

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? handler? ?拒絕策略

5.springmvc的工作流程

用戶發送請求,dispatcherservlet前端控制器進行接收,它屬于一個調度中心。調用handlemapping處理器映射器,返回一個handleExecutorchain對象,它里面就是包含了一個controller對象。返回給dispatcherServlet。再次調用handleadptor,處理器適配器,將處理器包裝為適配器,他會找到對應的controller進行邏輯執行,返回一個modelandview對象給前端控制器。如果先后端不分離,就會調用viewresover試圖解析器,將對象解析為view對象,將mode數據渲染到試圖上,然后返回。先后端分離,就可以直接responsebody返回json數據給前端。

6.springmvc常用的注解,spring........注解

@RestController

@Service

@Mapper

@Autowired

@SpringBootApplication

@RequestMapping

@GetMapping

@PostMapping

@PutMapping

@DeleteMapping

@PathVarible

@RequestParam

@Param

@Aspect

@Around .....

@Bean

@Configuration

@Data

@Sl4J

@Component

7.spring中bean的生命周期

0 首先要對bena的基本信息進行封裝,bean的全部信息封裝為一個beanDifination對象

1 調用構造方法,進行實例化

2 set注入,依賴注入,常用的autowired就是這一步

3 aware結尾的接口是否實現,如果實現就要重新方法

4 beanPostProcossor before 前置處理器

5.是否自定義init方法,是否實現initiatingIiitialingBean接口,是否使用beanConstruct@PostContruct注解

6.beanPostProcossor after前置處理器的后置處理器,此處對bean進行增強,可以產生代理對象。 CGlib代理對象

7.銷毀

8.spring中事務是怎么實現的

aop實現,在調用方法前開啟事務,對方法前后進行攔截,try catch 一下,執行后,如果拋出運行時異常,進進行回滾,無異常提交。

9.spring中事務失效的場景

1.默認只會處理運行時異常,會對運行時異常進行捕獲。如果出現異常自己進行catch處理后,也要拋出運行時異常

2.拋出檢索異常檢查異常,要想進行回滾,可以設置注解的rebackFor 為 Exception.class

3.方法前要使用public修飾。

10.spring中的bean是線程安全的嗎?

不是安全的。如果說bean是無狀態的那就是安全的。所謂無狀態就是他的成員沒有被修改,那么注入這種無狀態的bean,就是線程安全的。所以就是說某種程度上來說是安全的。

不安全的時候,如果在bean中定義了可修改的成員變量,可以scope改變bean的模式有singlton改為prototype多例的。或者自己加鎖實現。

11.什么事aop,是否使用過?

aop是面向切面編程,把公共代碼進行抽離方便復用,且可以不改變原代碼邏輯。

使用過,例如使用的事務底層就是aop實現。或者記錄操作日志

使用切點表達式+環繞通知,也可以自定義注解切點表達式可以使用路徑名或者自定義注解。可以獲取到很多參數,例如:入參,類名,方法名,返回值,注解,請求方式,信息等

12.springboot自動配置的原理

我們在啟動項目時會實例化bean交給springioc容器進行管理。所以就和啟動項很密切,就要說到啟動類的注解@SpringbootApplication注解。它封裝了3個注解。@SpringBootConfiguration這個注解內部其實就是封裝了@Configuration注解,標明這就是一個配置類。@ComponentScan注解就是包掃描,不重寫的話,默認就是當前類下及其子包下都會掃描到,掃描哪些@Component注解的類,交給容器來管理。@Enable開頭的注解,這個注解往往都和第三方的技術關聯性很大。它里面封裝了@Import注解,這個注解的參數有三種。.class,配置類,importSeletor接口實現類。在源碼中是接口實現類這種。實現類中有個方法selectImports()方法,返回值是String[]數組,他會將一個文件轉換為String數組,這個文件包含的就是第三方的依賴的全限定類名。要將這些類交給ioc容器來管理,但不是所有的bean都會被加載,因為有一些conditoinal修飾的,他會根據條件進行裝配(環境中是否有class文件、是否有對應的bean、是否有對應的屬性和值)。這個文件在mate-inf下的spring.factory文件和spring下有個import結尾的文件。

13.springboot中定時任務。

@Secheduled注解

14.springboot打成的jar包和普通的jar包的區別

打成的jar包是可以java -jar進行運行的。而普通的jar包時可以進行引用的,文件和包名一樣。

15.RequestMapping和GetMapping的區別

他們功能很相似,可以說getmapping是requestmapping的特例,getmapping更具有語義化。

16.Springboot中的run方法做什么了?

IOC初始化的操作。

17.spring、springmvc、springboot的區別

spring有兩大核心 di依賴注入 ioc控制反轉目的:解耦。mvc的特點就是適合快速搭建web項目,利用dispatchservlet,modelandview,viewResolver一些簡單的概念,來簡化web開發 。springboot的特點是自動裝配starter啟動項,利用這兩項來簡化大量配置,快速構建項目,簡化開發,簡話配置代碼,約定大于配置。

18.循環引用(循環依賴)講解一下?具體?

兩個bean相互引用,形成閉環,當然3個也行,1個也行。

絕大多說的循環依賴都可以由三級緩存來解決。

一級緩存:存放生命周期已經走完的bean。單利池

二級緩存:生命周期沒有走完的半程bena。

三級緩存:一個bean的工程,可以生產代理對象和正常bean對象。ObjectFactories對象工廠

?一級緩存+二級緩存就可以解決普通對象的循環依賴。

三級的出現,是為了解決代理對象的出現。這三級緩存可以解決大部分循環依賴(主要是bean生命周期中構造一下的循環引用)

19.如何實現的?

場景:A引用B,B引用A。

A首先進行實例化,原始對象A會生成一個ObjectFactories對象放入三級緩存。在實例化的過程中,需要依賴B對象,這時候就會把A放入三級緩存中。接著走B的邏輯,因為此時B不存在,所以B進行實例化,原始B會生成一個ObjectFactories對象放入三級緩存,B又需要依賴A,這時候就會到三級緩存中,由beanFactory生產A對象,此時可以是代理對象,接著把A放入二級緩存中。接著走B的邏輯,將A注入給B,B就可以初始化完成B創建成功,就會把B放入到一級緩存中。接著走A的邏輯,因為B已經初始化完成,所以A就可以直接引用B,來完成初始化,接著把A放入一級緩存中。接著將二級緩存中的B進行刪除。

20.構造方法中出現循環引用,怎么辦?

但是三級緩存解決不了構造方法中的引用。此時就需要使用@Lazy注解,懶加載,當什么時候用到,什么時候再進行加載。

21.如何定位慢查詢?

可以使用mysql自帶的explain來查看是否具有進一步的優化空間。 type、key、key_len等等

mysql中開啟慢日志查詢(一般調試階段,接口設置為2秒響應)

當然也可以使用運維工具,檢測接口的運行時長。

22.sql語句執行很慢,如何分析?

看是否命中索引,索引是否生效。key 和 key_len

看type是否有進一步優化的空間。 是否存在全盤掃描/全索引掃描

通過extra判斷是否有回表情況。? 如果出現回表,可以添加索引或修改返回字段來修復。其實就是覆蓋索引。

索引這有機會再理解一下。

23.什么是索引?

是一種快速檢索的數據機構,提高檢索效率,采用的是B+樹,這種樹,層數低路徑短,階數高,是一種矮胖的樹

24.底層的數據結構是什么樣的?

飛葉子節點存儲指針,葉子節點存儲數據。而且便于掃庫區間掃描,因為葉子節點采用雙向鏈表,可以快速檢索。

25.什么是回表查詢?

說到回表,就需要直到聚簇索引和非聚簇索引,聚簇索引指他的非葉子節點存儲指針數據和索引放在一起,葉子節點存儲的是整行的數據。非聚簇索引,索引和數據分開發非葉子節點存儲的是整行數據的id。而回表指不能一次查詢出結果,需要先進行非聚簇索引查出id,再有id查出聚簇索引的整行數據。

26.什么是聚簇索引?什么是非聚簇索引?

上方已經解釋。

27.什么是覆蓋索引?

所謂覆蓋索引就是指可以不用回表就可以查出的數據,因為返回的數據中在索引中已經全部包含了。

28.索引的創建原則,什么情況使用?

數據量大30萬,效果比較明顯。

數據量大,查詢頻繁的表

連接條件,where,order group的字段

如果字符串必須是索引可以采用前綴索引。

區分度高的字段。

也要控制索引的數量,并不是越多越好,維護起來成本比較大。

盡量使用聯合索引?

如果字段不為空,可以加非空約束,添加約束。

29.mysql超大分頁怎么處理?

采用覆蓋索引+子查詢。

30.什么情況下,索引失效?

首先違背最左原則。1,12,123,正常的。13只有1會執行,23都不會執行。

索引不能使用函數。

索引模糊查詢? ?只有后%是好使的。

>= 這種范圍查詢 右邊不能使用索引

字符串索引,不加'',造成索引失效。(類型轉換異常)

31.事務的特性?

原子性、事務是最小操作單元,要么同時成功同時失敗

一致性、

隔離性、不會受別的事務影響

持久性

32.并發事務會帶來哪些問題?

臟讀、不可重復讀、幻讀、

33.如何解決這個問題?

讀未提交,讀已提交、重復度、序列化

改變事務的隔離級別,默認是可重復度。但是解決不了幻讀。需枷鎖處理。

34.Mybatis的執行流程?

不太會。

1.讀取MyBatis配置文件:mybatis-config.xml 加載運行環境和映射關系。

2.構造會話工程sqlSessionFactory,一個項目只有一個,是單例的,一般由spring管理

3.會話工廠創建sqlSession對象,包含了執行sql語句的所有方法。

4.操作數據庫的接口,Executor執行器,同時負責查詢緩存的維護。

5.Executor接口的執行方法中有一個MappedStatement類型的參數,封裝了映射信息

6.輸入參數映射? ?java -> 數據庫

7.輸出結果映射? 數據 -> java

35.git指令?

git init

git clone

git remote add origin 地址

git push --set-upstream master

git checkout -b 分支名

git checkout 分支名

git pull = git fetch + git merge

git push

git push origin master

git status

git-log

git reset --hard commitId

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10739.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10739.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10739.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

EPAI手繪建模APP工程圖頂部工具欄

7、工程圖 圖 302 工程圖 工程圖包括頂部常用工具欄、右側工程圖工具欄、左側模型列表欄、中間的工程圖。 (1) 常用工具欄 ① 刪除,選中場景中工程圖元素后,刪除。可以選擇多個工程圖元素同時刪除。 ② 設置,打開工程圖設置頁面&#xff0…

Java基礎(29)表達式語言(EL)的隱式對象及其作用

表達式語言(Expression Language,簡稱EL)是JSP 2.0及以上版本中引入的一種簡化頁面代碼編寫的語言,它提供了一種在JSP頁面中更容易使用JavaBean屬性及集合的方式。EL主要用于簡化對Java代碼的調用,特別是從后端到前端的…

2024 年最新本地、云服務器安裝部署 miniconda 環境詳細教程(更新中)

Anaconda 概述 Anaconda 是專門為了方便使用 Python 進行數據科學研究而建立的一組軟件包,涵蓋了數據科學領域常見的 Python 庫,并且自帶了專門用來解決軟件環境依賴問題的 conda 包管理系統。主要是提供了包管理與環境管理的功能,可以很方便…

picoCTF-Web Exploitation-More SQLi

Description Can you find the flag on this website. Additional details will be available after launching your challenge instance. Hints SQLiLite 先隨便輸入個賬號密碼登錄一下,得到查詢SQL,接下來應該對SQL進行某些攻擊來繞過密碼登錄成功 -- …

微信小程序踩坑,skyline模式下,簡易雙向綁定無效

工具版本 基礎庫版本 Skline模式 頁面json設置 問題描述 skyline模式下,textarea,input標簽設置簡易雙向綁定 model:value是無效的,關閉skyline模式就正常使用了 截圖展示 這里只展示了textarea標簽,input標簽的簡易雙向綁定也是無效的 總結 我在文檔里面是沒找到skyline里面不…

Android OpenMAX(八)如何學習OMXNodeInstance

前面一篇文章中我們看到media.codec service創建OMX組件后會把組件傳遞給一個OMXNodeInstance對象,并且把OMXNodeInstance對象返回到Framework層,Framework通過調用OMXNodeInstance的API來操作OMX組件。從這一篇開始,我們一起學習OMXNodeInstance,在這里我要強調一下,接下…

動態規劃----股票買賣問題(詳解)

目錄 一.買賣股票的最佳時機: 二.買賣股票的最佳時機含冷凍期: 三.買賣股票的最佳時期含?續費: 四.買賣股票的最佳時機III: 五.買賣股票的最佳時機IV: 買賣股票的最佳時機問題介紹:動態規劃買賣股票的最佳時機是一個經典的…

windows使用Docker-Desktop部署lobe-chat

文章目錄 window安裝docker-desktop下載和啟動lobe-chatAI大語言模型的選擇lobe-chat設置大模型連接 window安裝docker-desktop docker-desktop下載地址 正常安裝應用,然后啟動應用,注意啟動docker引擎 打開右上角的設置,進入Docker Engine設…

算法學習系列(六十):區間DP

目錄 引言區間合并模板一、石子合并二、環形石子合并三、能量項鏈 引言 關于這個區間 D P DP DP ,其實是有套路和模板的,題型的話也是變化不多,感覺就那幾種,只不過有些題會用到高精度或者是要記錄方案,所以整體來說…

Unity編輯器如何多開同一個項目?

在聯網游戲的開發過程中,多開客戶端進行聯調是再常見不過的需求。但是Unity并不支持編輯器多開同一個項目,每次都得項目打個包(耗時2分鐘以上),然后編輯器開一個進程,exe 再開一個,真的有夠XX的。o(╥﹏╥)o沒錯&#…

Hive 與 SQL 標準和主流 SQL DB 的語法區別

文章目錄 1.Hive 簡介2.Hive 與 SQL 標準和主流 SQL DB 的語法區別參考文獻 1.Hive 簡介 Hive是一種基于Hadoop的數據倉庫軟件,可以將結構化數據文件映射為一張數據庫表,并提供了類SQL查詢接口,使得用戶可以使用SQL類語言來查詢數據。Hive可…

7-117 死亡隧道

小毛驢要回家了,憑借著剛從老毛驢處學到的閃爍魔法,小毛驢信心滿滿地出發了。這一次它來到了另一條死亡隧道口,但是,小毛驢不知道死亡威脅隨時存在,因為它所打算穿過的這條死亡隧道即將于T秒時間后坍塌。 已知小毛驢行走的速度是每秒17米,而小毛驢擁有的閃爍法術可以使它…

返回類型后置,一個用途是為了邏輯上的體現?

大家一般都是先關心參數,然后最后再看返回的是什么類型。 在這里把返回類型后置,可能就是一種邏輯上的體現吧 fmt的一個函數。 \fmt\core.h 這個函數的意義,應該就是用變長參數初始化成一個format_arg_store類型的變量,并返回。…

Rust學習筆記(上)

前言 筆記的內容主要參考與《Rust 程序設計語言》,一些也參考了《通過例子學 Rust》和《Rust語言圣經》。 Rust學習筆記分為上中下,其它兩個地址在Rust學習筆記(中)和Rust學習筆記(下)。 編譯與運行 Ru…

成功解決No module named ‘huggingface_hub.inference._text_generation‘

成功解決No module named huggingface_hub.inference._text_generation 目錄 解決問題 解決思路 解決方法 解決問題 No module named huggingface_hub.inferen

python使用yaml文件以及元組樣式字符串使用eval的類型轉換

編程中,對于可變內容,最好是將其放入配置文件中,經過這段時間的學習,感覺使用yaml文件很方便。我的環境:win10,python3.8.10。 python使用yaml文件,首先要安裝庫。 pip38 install pyyaml 安裝…

AWTK 開源串口屏開發(18) - 用 C 語言自定義命令

AWTK-HMI 內置了不少模型,利用這些模型開發應用程序,不需要編寫代碼即可實現常見的應用。但是,有時候我們需要自定義一些命令,以實現一些特殊的功能。 本文檔介紹如何使用 C 語言自定義命令。 1. 實現 hmi_model_cmd_t 接口 1.1…

實現二叉樹的基本操作

博主主頁: 碼農派大星. 關注博主帶你了解更多數據結構知識 1我們先來模擬創建一個二叉樹 public class TestBinaryTreee {static class TreeNode{public char val;public TreeNode left;public TreeNode right;public TreeNode(char val) {this.val val;}}public TreeNode …

交叉編譯u-boot,qemu啟動測試

交叉編譯u-boot 1 配置交叉編譯工具鏈: 下載地址 https://releases.linaro.org/components/toolchain/binaries/ ### CROSS-COMPILE export AARCH64_LINUX_GNU_TOOLS/media/wmx/cross_compile_tools/aarch64-linux-gun/gcc-x86_64_aarch64-linux-gnu/bin export …

linux 安裝 mangodb 并設置服務開機自啟

1、下載 wget http://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz 2、解壓 tar -zxvf mosquitto-1.6.8.tar.gz 3、編譯安裝cd mosquitto-1.6.8 make sudo make install4、在當前目錄。進入mosquitto服務文件存放的文件夾 cd service/systemd可以看到3個文件 點擊read…