面试

Spring bean的生命周期

非 Y 不嫁゛ 提交于 2021-02-20 08:53:34
一、bean的生命周期 1.简介 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Singleton模式产生单一实例,在spring中,singleton属性默认是true,只有设定为false,则每次指定别名取得的Bean时都会产生一个新的实例,Spring只帮我们管理单例模式Bean的完整生命周期,对于prototype的bean,Spring在创建好交给使用者之后则不会再管理后续的生命周期。 2.生命周期图 3.代码示例 spring 容器中的bean的完整生命周期一共分为十一步完成: 1.bean对象的实例化 2.封装属性,也就是设置properties中的属性值 3.如果bean实现了BeanNameAware,则执行setBeanName方法,也就是bean中的id值 4.如果实现BeanFactoryAware或者ApplicationContextAware ,需要设置setBeanFactory或者上下文对象setApplicationContext 5.如果存在类实现BeanPostProcessor后处理bean

Spring | Bean 的生命周期

谁说胖子不能爱 提交于 2021-02-20 08:37:27
作者:sunshujie1990 www.jianshu.com/p/1dec08d290c1 S pring Bean的生命周期是Spring面试热点问题。 这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易! 本文希望能够从源码角度入手,帮助面试者彻底搞定Spring Bean的生命周期。 只有四个! 是的,Spring Bean的生命周期只有这四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Spring的生命周期,首先要把这四个阶段牢牢记住。实例化和属性赋值对应构造方法和setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段。在这四步之间穿插的各种扩展点,稍后会讲。 实例化 Instantiation 属性赋值 Populate 初始化 Initialization 销毁 Destruction 实例化 -> 属性赋值 -> 初始化 -> 销毁 主要逻辑都在doCreate()方法中,逻辑很清晰,就是顺序调用以下三个方法,这三个方法与三个生命周期阶段一一对应,非常重要,在后续扩展接口分析中也会涉及。 createBeanInstance() -> 实例化 populateBean() -> 属性赋值 initializeBean() -> 初始化 源码如下,能证明实例化

知乎万赞:计算机应届生月薪大多是多少?

て烟熏妆下的殇ゞ 提交于 2021-02-20 04:27:05
注:这个回答是我一位朋友在知乎上的万赞匿名回答,取得了他的同意,特此在这里转发,并写下一点自己的感想。 (但是,想了下,由于这个回答是匿名的,似乎也很难证明这个回答就是我朋友的。。。但是我让他在回答下帮我置顶了一条的评论,应该勉强算一个证明了哈哈哈) 问题: 计算机应届生月薪大多是多少? 月薪4k,6k,8k,10k的各占百分之多少呢,想了解一下知乎上大家的就业情况。好对自己有个定位,亲身经历或者朋友同学什么的都可以说说哈。 我的朋友回答: 能做到以下几点,绝对可以在北上杭深拿到15K(小北注:这是18年的回答了)以上: 撒比算法题,各大公司笔试面试基本都考这个,别的不说,《剑指offer》所有题目背下来,leetcode刷个四五百题起码的吧。搞过ACM也可以,反正刷个四五百题是必须的。我也觉得考这些撒比算法题很撒比,但是大家都这么考,你不准备,那不挂你挂谁? 数据结构,不说要彻底给面试官手推各种数据结构的均摊复杂度,也不要求你手写红黑树,至少AVL 哈希表 堆这些简单的数据结构得自己实现过;链表、线性表必须熟悉到不能再熟悉,比如vector为什么要用加倍扩容而不是每次增加一个固定的扩容容量;BBST各种都能扯一下,达到这个程度就差不多了。 计算机组成原理, 至少《深入理解计算机系统》得过一遍吧?配套实验也得做一下吧? 计算机网络,这个最简单了,随便找本书,把应用层、传输层看完就行

干货:熟悉面试中常见的的 web 安全问题

强颜欢笑 提交于 2021-02-20 01:10:22
背景 之前出去面试的时候, 经常会被问到一些 安全方面 的问题。 安全涉及的领域很大, 我也仅仅是了解一些皮毛, 每次面试前都要找资料复习, 很麻烦。 所以我就根据之前搜集的一些资料和面试的经验,系统的梳理了一下,希望对大家有所帮助。 「 正文 」 首先简单介绍 几种常见的攻击方式 : SQL注入 XSS CSRF 点击劫持 中间人攻击 1 SQL 注入 这是一种比较简单的攻击方式。 如果后台人员使用用户输入的数据来 组装SQL查询语句 的时候不做防范, 遇到一些 恶意的输入 , 最后生成的SQL就会有问题。 举个例子 比如地址栏输入的是: articlrs/index.php? id = 1 发送一个 get 请求, 调用的查询语句是: sql = " SELECT * FROM articles WHERE id = ", $id 正常情况下, 返回 id = 1 的文章。 如果攻击者想获得所有的文章,语句就可以改成: articlrs/index.php? id = -1 OR 1 = 1 这样就可以了, 为什么呢? 这是因为,id = -1 永远是 false,1=1 永远是true,所有整个where语句永远是ture. 所以 where 条件相当于没有加where条件,那么查询的结果相当于整张表的内容,攻击者就达到了目的。 现在的系统一般都会加入 过滤 和 验证 机制,

2021金三银四想进字节大厂必看:LeetCode算法收割机+算法刷题宝典

核能气质少年 提交于 2021-02-19 20:53:57
最近有看到很多朋友想进大厂,四面竟然都考了算法, 很多同学面对算法的问题都很头大,因为自己做项目很难用到,但是但凡高薪的职位面试都会问到。 最近我整理了一份刷题宝典,这份刷题宝典,也让我进了心仪的大厂。今天给大家分享一下: 毕竟现在大厂里用的都是算法,所以这块内容不吃透肯定是不行的。 目录如下:图文并茂,附有刷题答案源码。 第一份:LeetCode算法收割机 由于篇幅原因,为了避免影响到大家的阅读体验, 在此只以截图展示部分内容,详细完整版的看文末有免费的获取方式! 部分目录展示: 第二份:算法刷题宝典 刷题任务的题目,是根据题目的类型来汇总的,总结了八个类别,每个类别下面也总结了5个左右的题型,帮助大家分门别类的突破,所以刷起来相对会更有重点和针对性。如果从头到尾的刷,每周按顺序刷42题,很容易让自己坚持不下来,也会觉得很枯燥。所以在制定计划的时候可以让这个计划变得更“有趣"和针对性,让它看起来更容易实现一点,才会更容易坚持。 部分内容展示: 第三份:LeetCode(520 道题) 除此之外,这里再跟大家推荐一本前不久火爆 GitHub 的 LeetCode 中文刷题手册, 这本小册里面共包含刷 LeetCode 后整理的 520 道题,每道题均附有详细题解过程。自发布以后,受到技术圈内广大开发者的赞赏,建议大家收藏阅读。 目录如下: 部分目录展示:

【比赛游记】THUWC2019酱油记

时光怂恿深爱的人放手 提交于 2021-02-19 12:28:21
往期回顾: THUSC2018酱油记 day 0 早上 7 点的动车,不知道是从哪儿到哪儿的(雾),只知道从福建到广东 233333 一个值得思考的问题:福建人会不会 被广东人吃 啊? 动车上玩空洞骑士,可快乐了,发现笔记本没插电的时候游戏会很卡,不过幸好车上有电。 广州地铁简直毒瘤,黄陂(béi)站简直有毒吧。第一次坐地铁被赶下车的。 (话说站点的名字中有好多“公园”) 晚上住宾馆,打了一场 CF,光荣切 3 题后被教练叫去睡觉了…… day 1 THU 时间安排好紧凑哦,报道和 day1 居然是同一天。 先被带去了宿舍,在初中部,看起来一般般…… 然后被带去高中部,隔了好远距离啊 去交展中心领了个狗牌,还有个袋子,装了个清华招生本本 qwq 居然还有个外套,本校学生都领取了蓝色的外套~ 居然还有一叠饭票,据说每顿值 40 元(然而中午吃的饭我并不觉得有 40 元) 不过看了看时间安排,居然有第三场? 早上试机,进去的时候啥都没看,导致不知道系统密码,不知道 OJ 账户,不知道 OJ 密码,还坐错了位置。 跑回去看了两次才调整好位置,敲了个 NTT 实现 a+b,想用 LCT 实现,结果 LCT 写不出来了…… 才发现 OJ 上有试机题,这都是啥啊??去年 SC 的 AC 自动机神仙题和前年 SC 的求十维超球的所有超公切面,这能做? 下午就开始 day1 了。 看了看 T1

C#高级技师语法,你会吗?

情到浓时终转凉″ 提交于 2021-02-19 12:10:17
【导读】 呀,最近太忙了,没什么时间去看和学习,既然长篇文章一时半会吐不出来,短篇还是可以搞搞,操作系统绝不会断更 。本文我们来搞点C#中高逼格语法。 =>这玩意从C#6开始支持方法,运算符和只读属性的表达式主体定义。从C#7.0开始支持构造函数,终结器以及属性和索引器访问器的表达式主体定义。所以本文来讲讲=>运算符 高级语法 我们正常写一个方法,都是很明确的方法主体,我们称之为“块主体”,比如如下 static string Say ( ) { return "Hello World" ; } 用了=>运算符,我们可以将上述方法简化到极致 Console.WriteLine(Say()); static string Say ( ) => "Hello World" ; 如上就通过=>运算符隐式转换为方法主体的返回类型,最终还是翻译成第一种写法。 C#中的lambda表达式绝对秒杀Java,用过Java我也是这么认为,不服可以一战,我们看用过最多的大概是对集合的处理,集合中内置使用几种委托,继而委托简化为lambda,比如如如下Where过滤条件调用Func委托 var list = new List< string >() { "h" , "e" , "l" , "l" , "o" }; list = list.Where(d => d.Equals( "o" ))

C#高级技师语法,你会吗?

孤街浪徒 提交于 2021-02-19 12:09:58
【导读】 呀,最近太忙了,没什么时间去看和学习,既然长篇文章一时半会吐不出来,短篇还是可以搞搞,操作系统绝不会断更 。本文我们来搞点C#中高逼格语法。 =>这玩意从C#6开始支持方法,运算符和只读属性的表达式主体定义。从C#7.0开始支持构造函数,终结器以及属性和索引器访问器的表达式主体定义。所以本文来讲讲=>运算符 高级语法 我们正常写一个方法,都是很明确的方法主体,我们称之为“块主体”,比如如下 static string Say ( ) { return "Hello World" ; } 用了=>运算符,我们可以将上述方法简化到极致 Console.WriteLine(Say()); static string Say ( ) => "Hello World" ; 如上就通过=>运算符隐式转换为方法主体的返回类型,最终还是翻译成第一种写法。 C#中的lambda表达式绝对秒杀Java,用过Java我也是这么认为,不服可以一战,我们看用过最多的大概是对集合的处理,集合中内置使用几种委托,继而委托简化为lambda,比如如如下Where过滤条件调用Func委托 var list = new List< string >() { "h" , "e" , "l" , "l" , "o" }; list = list.Where(d => d.Equals( "o" ))

java nio详解

蹲街弑〆低调 提交于 2021-02-19 11:41:58
NIO简介 NIO是一种同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,对应 java.nio 包,提供了 Channel , Selector,Buffer等抽象。 NIO中的N可以理解为Non-blocking,不单纯是New。它支持面向缓冲的,基于通道的I/O操作方法。 NIO提供了与传统BIO模型中的 Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。阻塞模式使用就像传统中的支持一样,比较简单,但是性能和可靠性都不好;非阻塞模式正好与之相反。对于低负载、低并发的应用程序,可以使用同步阻塞I/O来提升开发速率和更好的维护性;对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发。 NIO的特性/NIO与IO区别 如果是在面试中回答这个问题,我觉得首先肯定要从 NIO 流是非阻塞 IO 而 IO 流是阻塞 IO 说起。然后,可以从 NIO 的3个核心组件/特性为 NIO 带来的一些改进来分析。如果,你把这些都回答上了我觉得你对于 NIO 就有了更为深入一点的认识,面试官问到你这个问题,你也能很轻松的回答上来了。 1、Non-blocking IO(非阻塞IO) IO流是阻塞的,NIO流是不阻塞的。 Java

PHP的垃圾回收机制以及大概实现

心不动则不痛 提交于 2021-02-19 10:57:16
垃圾回收,简称gc。顾名思义,就是废物重利用的意思。如果用过C语言,那么申请内存的方式是malloc或者是calloc,然后你用完这个内存后,一定不要忘了用free函数去释放掉,这就是传说中手动垃圾回收,一般都是扫地神僧用这种方式。 那么,在用的最普遍地最传统的web开发中,php的自动垃圾回收机制是怎样的呢? 这个问题我们先这么想,就是都知道php是C语言实现的,现在把C语言给你放在这里了,然后你想想如何用C语言实现对一个变量的统计以及释放。 PHP进行内存管理的核心算法一共两项:一是引用计数,二是写时拷贝,请理(bei)解(song)。当你声明一个PHP变量的时候,C语言就在底层给你搞了一个叫做zval的struct(结构体);如果你还给这个变量赋值了,比如“hello world”,那么C语言就在底层再给你搞一个叫做zend_value的union(联合体),总体看来就是这样的: 好了,进入代码实战阶段,注意两点: 1.用的PHP版本是7.1.17(记住!这个很重要!不同版本的PHP有极大可能会出现不相同的结果!我试过6个版本的PHP,三个PHP5版本,三个7版本,其中PHP7版本变化尤其多,但不影响业务代码不会出bug,放心),运行环境是cli。 2.下面的原理解只针对PHP7,不再说5了。你面试的时候,只需要说5的我不太了解,7的我深入看过一些即可,面试官不会难为你的。