大家好,關(guān)于spring常用注解面試很多朋友都還不太明白,不過沒關(guān)系,因?yàn)榻裉煨【幘蛠頌榇蠹曳窒黻P(guān)于junit常用注解的知識(shí)點(diǎn),相信應(yīng)該可以解決大家的一些困惑和問題,如果碰巧可以解決您的問題,還望關(guān)注下本站哦,希望對(duì)各位有所幫助!
Java程序員面試中容易被問哪些問題
1.前臺(tái)后臺(tái)都做嗎?10分
這一般是我的第一個(gè)問題,超過90%的人會(huì)回答:"都做,后臺(tái)多一點(diǎn),前臺(tái)少一點(diǎn)"
這不是我想要的答案,鬼都知道程序員都要多少涉及一下前臺(tái),后臺(tái)更不用說了.
碰到過一個(gè)聰明人,他是這么回答的:前臺(tái)js寫的比較熟練,html的框架模板也能搭建的非常整齊美觀,只是特效能力比較差
這個(gè)問題我不想過多討論,加分但不減分
2.事務(wù),什么是事務(wù),為何用事務(wù)10分
大部分面試者,就會(huì)舉各種各樣的例子(比如銀行存錢,這個(gè)最多)來說明這個(gè)問題,其實(shí)他們都理解.
但這不是我想要的答案,我期望的答案只有一句:"保證數(shù)據(jù)的一致性和完整性",可惜只有5%左右的人答出來了
這個(gè)問題可以大概了解出面試者的分析能力,以及語言總結(jié)能力,還有他們對(duì)這個(gè)玩意的理解程度
答不出減分,舉例子不加分
3.面向切面(AOP),原理是什么10分
這個(gè)就是對(duì)技能的掌握程度了
大部分又是舉例子,什么找中介啊之類的,其實(shí)就是來掩蓋他們懂一點(diǎn)實(shí)現(xiàn)邏輯,但是不知道源碼怎么實(shí)現(xiàn)的.
但還真是有學(xué)霸能把代理的原理講出來,非常好.
答不出減分,舉例子不加分,講出原理雙倍分.
4.兩個(gè)項(xiàng)目之間如何通信10分
很基礎(chǔ)的問題,答上來就有分,說明你接觸或者了解過網(wǎng)絡(luò)
5.在上個(gè)問題基礎(chǔ)之上問,碰到亂碼怎么解決,utf-8和gbk可以直接轉(zhuǎn)換么10分
大部分應(yīng)聘者到這里基本就開始胡扯了.有說聲明字符串編碼接收的,有說改項(xiàng)目編碼的,各種各樣五花八門.
更有甚者,utf-8和gbk可以直接轉(zhuǎn)換...
直接說明了他們完全沒有遇到過此類問題,也并不了解編碼.
答不出不減分,胡扯減分,答對(duì)雙倍分.
6.簡述一項(xiàng)技術(shù)或設(shè)計(jì)模式的原理20分
這個(gè)幾乎是送分的,但90%的人答不出.我很不解.
答不出減分,答出加分
-----------------------------------------------------------------------------------------------------------------------------
問完以上幾個(gè)問題大概可以判斷出應(yīng)聘者的技術(shù)程度
不管怎么樣
希望多鍛煉自己的口才與技術(shù).
springboot跳轉(zhuǎn)頁面的注解是哪個(gè)
在SpringBoot中,用于跳轉(zhuǎn)頁面的注解是`@RequestMapping`,其主要作用是將HTTP請求映射到控制器的處理方法,并可以指定返回的視圖名稱或視圖路徑。
但是在SpringBoot2.0之后,為了規(guī)范,Spring官方推薦使用更為明確的注解`@GetMapping`、`@PostMapping`等來替代`@RequestMapping`來標(biāo)記請求的方法。所以,一般情況下我們會(huì)使用`@GetMapping`注解來進(jìn)行頁面的跳轉(zhuǎn)。
springboot常用注解有哪些
springboot常用的注解有如下幾個(gè):
1、SpringBootApplication;
2、Repository;
3、Service;
4、RestController;
5、ResponseBody;
6、Component等
spring如何通過注解知道哪些類需要
?1、使用asm技術(shù)掃描.class文件,并將包含@Component及元注解為@Component的注解@Controller、@Service、@Repository或者其他自定義的的bean注冊到beanFactory中。
2、然后spring在注冊處理器。
3、實(shí)例化處理器,然后將其放到beanPostFactory中,然后我們就可以在類中進(jìn)行使用了。
4、創(chuàng)建bean時(shí),會(huì)自動(dòng)調(diào)用相應(yīng)的處理器進(jìn)行處理。
SpringBoot中,@Autowired和@Resource使用起來到底有什么區(qū)別
這個(gè)問題也有一段時(shí)間了,當(dāng)初也就隨手一寫,直到最近還有網(wǎng)友在看,為了保證大家看的時(shí)候不會(huì)出現(xiàn)理解方面的問題,于2021-5-10編輯一次,希望能更加嚴(yán)謹(jǐn)一點(diǎn),至少不會(huì)誤導(dǎo)大家。
首先,這個(gè)問題有點(diǎn)不準(zhǔn)確,這2個(gè)注解是使用Spring框架過程中常用的注解,而SpringMVC和SpringBoot等框架都是基于Spring的進(jìn)階框架,并沒有對(duì)這2個(gè)注解的使用進(jìn)行修改或者調(diào)整,所以,只討論Spring框架如何處理這2個(gè)注解即可,而不是討論在SpringBoot中的使用區(qū)別。
【結(jié)論】在絕大部分情況下,使用這2個(gè)注解的任何一個(gè)都可以實(shí)現(xiàn)自動(dòng)裝配,在使用方面是無感的。
如果要討論區(qū)別,基本上就是2點(diǎn):
所屬不同:@Resource注解是javax包的;@Autowired是Spring聲明的;裝配機(jī)制不同:@Resource會(huì)優(yōu)先byName來裝配,即使名稱不匹配,也會(huì)嘗試byType來裝配;@Autowired則是先查找匹配類型對(duì)象的數(shù)量,如果有且僅有1個(gè),則直接裝配,如果為0個(gè),則無法裝配,此時(shí)需要考慮該注解的required屬性,默認(rèn)是true,就會(huì)因?yàn)椤氨仨氀b配卻沒有匹配類型的對(duì)象”而拋出異常,如果顯式的設(shè)置為false,則不裝配,保持被自動(dòng)裝配的屬性為null值,如果匹配類型的對(duì)象超過1個(gè),則會(huì)嘗試byName,如果成功,則裝配,如果失敗,則拋出異常。如果一定要說還有其它區(qū)別,可以是:
作用范圍不同:@Resource用于對(duì)字段、Setter方法進(jìn)行注解,@Autowired可用于構(gòu)造方法、Setter方法和字段;當(dāng)同一種類型的對(duì)象有多個(gè)時(shí)(例如聲明的類型是接口,在Spring容器中有2個(gè)或多個(gè)實(shí)現(xiàn)類的對(duì)象),需要指定名稱,@Resource可直接配置name屬性來指定bean-name,而@Autowired需要配合@Qualifer注解,由@Qualifer注解來指定bean-name,當(dāng)用于字段時(shí),直接在字段的聲明之前使用這2個(gè)注解,當(dāng)用于Setter方法時(shí),在方法的聲明之前使用@Autowired,在方法的參數(shù)之前使用@Qualifer;另外,還有很多關(guān)于使用@Autowired的細(xì)節(jié)問題,例如“是不是不建議使用了”、“到底應(yīng)該怎么用”等等,所以,接下來主要討論這些問題。
關(guān)于“是不是不建議使用了”,這種問題的主要原因應(yīng)該是最近幾年IntelliJIDEA越來越流行了,而許多版本的IntelliJIDEA對(duì)@Autowired的預(yù)判是有問題的!也就是說:IntelliJIDEA會(huì)在編碼期實(shí)時(shí)預(yù)判是否存在可以裝配的對(duì)象,如果它認(rèn)為沒有,就會(huì)報(bào)錯(cuò),事實(shí)上,它的判斷并不完全準(zhǔn)確!
例如,嘗試在Service組件中裝配一個(gè)Mapper接口類型的字段時(shí):
(截圖來自IntelliJIDEA2020.1.4)
以上報(bào)錯(cuò)就是IntelliJIDEA預(yù)判錯(cuò)誤導(dǎo)致的,如果使用的是Eclipse就不會(huì)有這樣的問題,解決方案可以是:
在UserMapper接口上添加@Repository注解;將以上代碼中的@Autowired配置為@Autowired(required=false),因?yàn)锧Autowired默認(rèn)是required=true,同時(shí)IntelliJIDEA認(rèn)為沒有可裝配對(duì)象,所以報(bào)錯(cuò),顯式的配置為required=false之后,即使IntelliJIDEA認(rèn)為沒有可裝配對(duì)象也不會(huì)報(bào)錯(cuò)了;將以上代碼中的@Autowired改為@Resource。再例如在使用SpringSecurity進(jìn)行配置時(shí)也會(huì)有類似的問題,只不過這次它認(rèn)為“存在多個(gè)匹配類型的對(duì)象”:
(截圖來自IntelliJIDEA2020.1.4)
解決以上報(bào)錯(cuò)信息的方式可以是:
將聲明的UserDetailsService接口類型改為你的UserDetailsServiceImpl實(shí)現(xiàn)類類型,例如privateUserDetailsServerImplservice;即可;將以上代碼中的@Autowired改為@Resource。由于許多類似問題都可以通過“將@Autowired改為@Resource”來解決,加上一些相關(guān)說法(詳見下文),且某些片面的斷章取義,導(dǎo)致網(wǎng)上還存在“使用@Resource取代@Autowired”、“以后不要再用@Autowired”的說法,而這些說法都是錯(cuò)誤的,沒有任何官方(開發(fā)工具的IntelliJIDEA,或框架官方Spring)說過這樣的話!
首先,使用Spring實(shí)現(xiàn)自動(dòng)裝配時(shí),有3種方式:
通過構(gòu)造方法注入;通過Setter注入(即與字段屬性匹配的set方法);通過字段注入;基本示例參見下圖:
以上圖片來自Spring官方提供的資料,可以看到最后還附了個(gè)URL,是國外網(wǎng)友寫的一篇主題為《whyfieldinjectionisevil》的討論文章,有興趣且有一定英語閱讀能力的朋友可以自行上網(wǎng)查看全文,大意是“使用字段注入時(shí)可能導(dǎo)致NPE”!為什么會(huì)這樣呢?假設(shè)你有如下代碼:
如果你因?yàn)槟撤N原因直接創(chuàng)建對(duì)象,即通過UserServiceservice=newUserService();來創(chuàng)建對(duì)象,其中的userRepository屬性肯定是沒有值的,后續(xù)使用這個(gè)service對(duì)象時(shí),只要涉及調(diào)用userRepository就會(huì)出現(xiàn)NPE了!
既然UserService是一個(gè)組件,為什么還會(huì)直接創(chuàng)建對(duì)象呢?其實(shí)這也算是一個(gè)低概率的特殊情況,在彼此不太熟悉的協(xié)同工作中可能出現(xiàn),例如你和我一起開發(fā)項(xiàng)目,我對(duì)你寫的那部分代碼不太了解……再就是測試使用時(shí),也可能出現(xiàn)直接創(chuàng)建對(duì)象的情況……
如果將代碼改為下面這樣:
則剛才的問題就不存在了!因?yàn)楝F(xiàn)在的構(gòu)造方法是需要參數(shù)的,你不給參數(shù),就創(chuàng)建不了對(duì)象!如果能創(chuàng)建出對(duì)象,就肯定給了參數(shù),則userRepository肯定有值,就不會(huì)出現(xiàn)NPE!當(dāng)然,如果你一定要傳個(gè)null進(jìn)去就沒辦法了,Nozuonodiewhyyoutry?
所以,使用構(gòu)造方法傳遞參數(shù)是一種強(qiáng)制依賴的做法,可以保證不會(huì)出現(xiàn)NPE,但是,如果參數(shù)太多會(huì)不會(huì)很奇怪?真的有必要把代碼寫得這么滴水不漏嗎?這個(gè)就看你自己了!首先,是IntelliJIDEA并不建議你使用字段注入:
(截圖來自IntelliJIDEA2020.1.4)
而Spring的觀點(diǎn),可參見下圖:
可以看到,Spring是無所謂的,反正都能用(Springdoesn'tcare,canuseeither),當(dāng)然,也列舉了使用構(gòu)造方法注入和使用Setter注入的區(qū)別(雖然我在前面都是寫的字段注入,在NPE問題上,字段注入和Setter注入是一樣的)。
既然Spring都無所謂了,我們?yōu)槭裁催€要糾結(jié)注入方式呢?還是那句話,只要你能保證不出錯(cuò),怎么都行!可能95%以上的Java從業(yè)者不是在寫大廠的大型項(xiàng)目,合格的程序員也不會(huì)亂寫代碼,由Setter或字段注入導(dǎo)致NPE的概率本來就極低,不一定需要為了“保證極端情況下也不出錯(cuò)”而刻意的把代碼調(diào)整為構(gòu)造方法注入,只要注意規(guī)避這個(gè)問題即可!
另外,我在上面的代碼演示中,在構(gòu)造方法上加了@Autowired注解,在這里解釋一下:
如果類中只存在默認(rèn)構(gòu)造方法(無論是你顯式的添加的,還是根本不寫,由編譯器添加的),則無需@Autowired注解,Spring會(huì)自動(dòng)調(diào)用,當(dāng)然,加了也不會(huì)出錯(cuò);如果類中只存在唯一的構(gòu)造方法,Spring會(huì)自動(dòng)調(diào)用,且會(huì)自動(dòng)從Spring容器中找對(duì)象裝配為調(diào)用構(gòu)造方法的參數(shù),這種情況也是不需要添加@Autowired注解的,加了也不會(huì)出錯(cuò);如果類中存在多個(gè)構(gòu)造方法,且都沒有添加@Autowired注解時(shí),當(dāng)存在無參數(shù)構(gòu)造方法時(shí),Spring會(huì)自動(dòng)調(diào)用無參數(shù)構(gòu)造方法,如果你想要Spring調(diào)用另外某一個(gè)構(gòu)造方法,就在那個(gè)構(gòu)造方法上添加@Autowired注解;如果類中存在多個(gè)構(gòu)造方法,且超過1個(gè)構(gòu)造方法上都添加了@Autowired注解……你別作,你不需要知道Spring怎么處理,你只要把@Autowired刪得只有1個(gè)了,就肯定沒問題!所以,從道理上來說,應(yīng)該推薦顯式的為某1個(gè)構(gòu)造方法添加@Autowired注解,哪怕是不需要添加也能用,因?yàn)檫@樣會(huì)保證多構(gòu)造方法的情況下代碼更加直觀,增加代碼的可讀性,但是,從實(shí)際工作出發(fā),可能就變成了“有啥好加的?這點(diǎn)道理都不懂還上什么班?”……大家都懶得加了,所以,又不是什么很難懂的原理,加不加就自行把握吧。
最后,再總結(jié)一下使用原則:
@Autowired和@Resource在使用時(shí)可以不糾結(jié)它們的區(qū)別,使用它們的目的就是為了裝配對(duì)象,只要能裝得上,裝的是對(duì)的,無所謂使用哪個(gè)?一定要區(qū)分選取,先保證“在同一個(gè)項(xiàng)目中使用同一個(gè)”,不要一個(gè)類使用@Autowired,另一個(gè)類又使用@Resource,然后,我個(gè)人建議使用@Autowired,原因嘛,很簡單,你既然用Spring框架,就用它帶的注解唄;關(guān)于@Autowired的使用方式,不怕麻煩就都使用構(gòu)造方法注入,且顯式的添加@Autowired,如果怕麻煩,只要不出錯(cuò),就隨意吧。Spring官方也考慮到了網(wǎng)友關(guān)于@Resource或相關(guān)注解的問題,因?yàn)闆]什么需要特別解釋的了,就直接貼圖好了,大家自行查閱,以下圖片仍是來自Spring官方資料:
最后,近期因?yàn)楣ぷ鞯年P(guān)系看了不少Spring的官方資料,包括官方的Spring學(xué)習(xí)教程,有些感慨,給我的感覺,Spring對(duì)外提倡實(shí)用主義,極少和你講理論,源碼什么的更是少得可憐,這也和面向?qū)ο蟮乃枷氡3忠恢拢思叶紟湍阕龊昧耍愫煤糜镁托辛耍槐仃P(guān)心實(shí)現(xiàn)細(xì)節(jié),希望大家也能這樣!現(xiàn)在IT行業(yè)真的被一些大廠帶節(jié)奏了,網(wǎng)上各種吸引眼球的XX源碼解析、XX底層原理、XX加載過程分析、XX算法、大廠案例、大廠面試題……很多時(shí)候真的想噴一句“你咋不從操作系統(tǒng)開始做軟件研發(fā)呢”……真的,絕大部分Java從業(yè)者一輩子都進(jìn)不了大廠,也接觸不到超過20臺(tái)以上服務(wù)器才能扛得住的項(xiàng)目,除非是為了應(yīng)付面試,你甚至不需要知道i++和++i的區(qū)別,如果只是自己寫代碼自己用,你也不需要知道private和public的區(qū)別……如果你只想開自己的私家車,不想修車也不想造車,除了吹牛,你都不需要知道發(fā)動(dòng)機(jī)的型號(hào)……多掌握實(shí)用技術(shù),多積累解決問題的經(jīng)驗(yàn),原理什么的能不管就不要管,當(dāng)熟練到一定程度后,再考慮要不要深入了解原理。
好了,就這么多,如果有錯(cuò)別字,大家將就一下吧(可編輯次數(shù)有限),如果有覺得不對(duì)的地方,歡迎留言討論。
spring ioc和aop面試題
1、Spring的IOC和AOP機(jī)制?
2、Spring中`@Autowired`和`@Resource`注解的區(qū)別?
3、依賴注入的方式有幾種,各是什么?
4、講一下什么是Spring?
5、Spring的AOP理解:
6、Spring的IOC理解
7、解釋一下Springbean的生命周期
8、解釋Spring支持的幾種bean的作用域
9、Spring基于xml注入bean的幾種方式:
10、Spring框架中都用到了哪些設(shè)計(jì)模式?
11、聊一聊Spring中@Transactional注解及其失效的六種場景
12、SpringAOP(思想)以及AspectJ框架(重點(diǎn))
文章到此結(jié)束,如果本次分享的spring常用注解面試和junit常用注解的問題解決了您的問題,那么我們由衷的感到高興!