更新一下:收到了农银金科的面试通过通知,周五线下面谈,周日体检,好像周一就让签约。。。有点顶啊,有人知道签约要不要押双证嘛 楼主秋招的目标基本上是国企,面试了渤海银行,农业银行,农银金科,交通银行,中国系统(面试30分钟啥技术没问直接给挂了),目前0offer,心累了,球球来个offer让我躺吧 本着造福人类的原则和目标,整理了最近面试的经验,全部是Java后端开发,总的来说今年国企的难度比去年师兄师姐们秋招的难度大了不止一倍啊     [头秃]  以下是最近的面经,没有手撕算法题是没想到的,白刷了         渤海银行          先问项目:balabalabalabala            微服务:balabalabalabala            1.springboot的启动注解             答:@SpringBootApplication             2.springboot启动注解包含了spring的哪些注解             答:1. @SpringBootConfiguration:组合了spring中@Configuration的注解,实现配置文件的功能             2.@EnableAutoConfiguration:打开自动配置功能,也可以关闭某个自动配置的选项             3. @ ComponentScan:类比Spring的组件扫描             3.自动装配  @Aurowired用的多么             答:非常多             4.@Autowired和  @Resource的区别             答: @Autowired 默认是按照类型装配注入的 ,默认情况下它要求依赖对象必须存在(可以设置它 required 属性为 false )。 @Resource 默认是按照名称来装配注入的 ,只有当找不到与名称匹配的 bean 才会按照类型来装配注入。             5.如果想要@Autowired根据名称自动装配,需要和哪个注解配合使用?             答:需要和@Qualifier注解一起使用             6.MyBatis用的也很多吧,说一下#和$的区别吧             答:1. #{} 是占位符,预编译处理; ${} 是拼接符,字符串替换,没有预编译处理。             2. Mybatis 在处理 #{} 时, #{} 传入参数是以字符串传入,会将 SQL 中的 #{} 替换为 ? 号,调用 PreparedStatement 的 set 方法来赋值。 3.Mybatis 在处理${}时,是原值传入         ,就是把$ {} 替换成变量的值,相当于 JDBC 中的 Statement 编译 4.变量替换后, #{} 对应的变量自动加上单引号 ‘’ ;变量替换后, ${} 对应的变量不会加上单引号             7.#和$在使用的时候哪个会引起SQL注入?             答:${}             8.9.10.11.redis集群和一大堆Linux命令....            答:1. Redis 集群实现了对 Redis 的水平扩容,即启动 N 个 redis 节点,将整个数据库分布存储在这 N 个节点中,每个节点存储总数据的 1/N 。 2.Redis 集群通过分区( partition )来提供一定程度的可用性( availability ):         即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。             Linux:            1.查看进程  ps -ef | grep redis            2.vi里面搜索一个东西怎么搜  /+要搜索的关键字            3.vi跳转到最后一行或者第一行  :$跳转到最后一行,:0或者1跳转到第一行            4.翻页:ctrl+f向下翻页,ctrl+b向上翻页            5.普通的应用一般是放在什么地方执行 tomcat            6.Linux后台启动命令  只是在命令前要加上nohup:nohup command &                        然后换另一个面试官提问              1.数据库的索引是什么?             答: 索引时数据库管理系统中一个排序                  的数据结构,以协助快速查询,更新数据库中表的数据             2.like会用到索引么?             答:这个需要分 情况,如果like后面是%开头并且没有使用覆盖索引的话那就会索引失效。             3.查询的时候怎么实现分页查询             答:在查询语句最后一行加上limit语句              农行研发中心          1.Redis有哪些高可用方案           答:1.主从模式:通过主从复制实现一主多仆或者薪火相传的Redis结构            2.哨兵模式:在主从模式下单独加一个哨兵集群,可以对主机从机进行监控,当主机宕机后,自动选举出一个从机升级为主机            3.集群模式:实现了 Redis 的分布式存储,对数据进行分片,也就是说每台 Redis 节点上存储不同的内容,假设有n个节点,那么每个节点就会存储数据的1/n            2.Redis的数据结构/数据类型           答:String,list,set,zset,hash            3.用哪种数据类型可以实现简单的消息队列呢           答:list就可以            4.缓存穿透、缓存击穿、缓存雪崩           答:1.缓存穿透是指用户要查询的数据不存在,在Redis中没查到会转向数据库查询,如果这时候有大量的并发请求发给数据库,会造成数据库的压力骤增,导致数据库被压垮。            2.缓存击穿是指用户要查询的数据存在,但是在Redis中过期了,在Redis中没查到会转向数据库查询,如果这时候有大量的并发请求发给数据库,会造成数据库的压力骤增,导致数据库被压垮。            3.缓存雪崩是指用户要查询的多个数据存在,但是在Redis中全部过期了,在Redis中没查到会转向数据库查询,如果这时候有大量的并发请求发给数据库,会造成数据库的压力骤增,导致数据库被压垮。            5.如果Redis中的数据过期了,那Redis是怎么删除的这个数据呢           答:过期的策略通常有三种:            1.定时过期:给每个设置了过期时间的key都加一个定时器,到了过期时间就自动清除,这个策略对内存友好,可以立即清除过期key            2.惰性过期:不需要给设置了过期时间的key加定时器,只是当用户每次查询的时候,才去检验这个被查询的key是不是过期,如果过期了就再从数据库查询并缓存到Redis中            3.定期过期:每间隔一定时间,就会自动扫描一定数量的expires字典中一定数量的key,如果过期了就删除。            Redis中同时使用了惰性过期和定期过期两种过期策略。            6.Redis的淘汰策略           答:1.volatile-lru:从已经设置了过期时间的key中,选取最近很少使用的key进行淘汰            2.volatile-ttl:从已经设置了过期时间的key中,选取快要过期的key进行淘汰            3.volatile-random:从已经设置了过期时间的key中,随机选取key进行淘汰            4.allkeys-lru:从所有数据中,选取最近很少使用的数据进行淘汰            5.allkeys-random:从所有数据中,随机选取数据进行淘汰            6.no-enviction:禁止驱逐            7.除了还知道哪些缓存数据库           答:memcatched            Memcatched只支持字符串类型,没有Redis这么多元化。而且不支持持久化机制。            8.Springboot的监视器说一下           答:springboot的监视器叫springboot actuator,可以帮助开发人员访问生产环境中正在运行的应用程序的当前状态,有几个指标必须在生产环境中检查和监控。            9.springboot中yaml是什么           答:yaml是一种人类可读的数据序列化语言,通常用于配置文件。它更加结构化,能分层配置数据。            Yaml相比properties更加配置有序,并且支持数组,但是不支持@PropertySource注解导入自定义的配置            10.springboot中的核心配置文件叫什么           答:application.properties和bootstrap.properties,后缀也可以是yml和yaml。            11.cookie和session           答:1.cookie是用户向服务器发请求时,服务器给客户端的浏览器颁发的一个文件,记录了用户的相关信息,客户端每次向服务器发请求,都需要带着这个cookie来服务器验证,验证通过后服务器返回给客户端相关信息。            2.Cookie是有大小限制的,单个不超过4kb,多数浏览器规定一个站点只允许保存20个。            3.Session是服务器端的,是客户端和服务器在会话过程中,服务器分配的一块存储空间,cookie中默认有sessionID,在验证时session会和cookie中的sessionid验证。            12.在一个分布式的系统里,session肯定不能每个服务器都存放,那么如何实现在分布式系统里共享session呢?           答:可以放到Redis里实现在分布式系统上共享session            13.说一下tcp的三次握手吧           答:1.第一次是客户端向服务器发出一个SYN请求,SYN置1,同时传递一个初始序列号给服务器,发送完成后客户端进入SYN-SEND状态。            2.第二次是服务器接收到来自客户端的SYN请求后,返回给客户端一个SYN+ACK报文,同时发送一个序列号,发送完毕后,服务器进入了SYN-RECEIVED状态。            3.第三次是客户端收到了来自服务器的SYN+ACK信号后,返回给服务器一个ACK报文,发送完毕后,客户端进入了established状态,当服务器收到这个ACK后,服务器也进入established状态,这样tcp连接就建立了。              农银金科          1.介绍项目,说几个spring的组件           答:springmvc、springdao、springcore、springaop、springcontext、springorm、springweb            2.什么是jwt           答:1.jwt全程是json web token,是一个json形式的web应用使用的令牌,用于在各方之间安全的把信息通过json对象来实现传输,是一个开放标准。            2.jwt常常被用来做授权和信息交换。            3.jwt由三部分组成,header.payload.signature,三部分之间以一个.来连接。其中header中保存着json的加密算法和数据格式,payload中保存中用户信息,signature作为一个签名,三者连接起来共同组成一个字符串,就是jwt串。            3.jwt是有时效的,那么同一个用户多次发出请求,jwt要是过期了怎么办,你们是怎么处理这一块的?           答:应该是把jwt放到redis中,当一个用户每发出一次请求后,就把redis中的jwt串刷新一次,这样每次都是一个新的过期时间。            4.java的反射机制了解吗?           答:对于任何一个对象,程序都能够在运行时获取它的所有属性和方法;对于任何一个对象,程序都能在运行时调用的它的所有属性和方法。这种在运行时动态的获取对象的参数和方法的机制就是java的反射机制。            5.举几个应用了反射的例子           答:spring框架中就大量的应用了反射,还有spring的aop中使用的动态代理也是以反射为基础            6.设计模式了解过哪些           答:只会使用单例模式            7.介绍一下springmvc吧           答:1.springmvc是一个基于mvc架构的控制层框架,是springboot和spring集成了的用于开发web应用的模块,其中包含了三个层面:model、view、controller。            2.model层里,java程序的大部分代码都集中在这一层,view层是程序呈现给用户的部分,是用户和程序交接的接口,controller使用来处理用户输入数据,以及更新业务模型的部分。            3.springmvc的运行流程是这样的:           (1)用户向服务器发出请求,请求被前端控制器DispatcherServlet捕获           (2)DispatcherServlet对请求的url解析,得到请求资源标识符uri。然后根据这个URI,调用handlermapping获得该handler配置的所有相关对象,最后以HandlerExecutionChain对象的形式返回           (3)DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter           (4)提取request中的模型数据,填充Handler入参,开始执行Handler(Controller)。           (5)Handler执行完成之后,会给DispatcherServlet返回一个模型视图ModelAndView对象           (6)根据返回的ModelAndView,选择一个合适的ViewResolver返回给DispatcherServlet           (7)ViewResolver结合model和view,渲染视图           (8)将渲染的结果返回给客户端            8.数据库如何删除一个表的数据           答:可以使用delete后面不加where限定条件,也可以直接使用truncate和drop来删除            9.连接池           答:连接池的作用:连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。这样性能上得到了提高。     这里没答好,感觉应该从池化的思想入手,类比线程池,jedispool等常用的,有大佬给指明一下吗??                    交行软开          1.介绍项目            2.jvm调优有了解吗           答:首先调优工具有这些:            jvisualvm:虚拟机监视和故障处理平台             jps :查看当前 Java 进程             jstat:显示虚拟机运行数据             jmap:内存监控             jhat:分析 heapdump 文件             jstack:线程快照             jinfo:虚拟机配置信息           有了这些工具就可以利用这些工具进行调优:            1、堆信息查看            可查看堆空间大小分配(年轻代、年老代、持久代分配)            提供即时的垃圾回收功能            垃圾监控(长时间监控回收情况)            查看堆内类、对象信息查看:数量、类型等            对象引用情况查看            有了堆信息查看方面的功能,我们一般可以顺利解决以下问题:            年老代年轻代大小划分是否合理            内存泄漏            垃圾回收算法设置是否合理             2、线程监控            线程信息监控:系统线程数量            线程状态监控:各个线程都处在什么样的状态下             Dump 线程详细信息:查看线程内部运行情况            死锁检查             3、 热点分析             CPU 热点:检查系统哪些方法占用的大量 CPU 时间;            内存热点:检查哪些对象在系统中数量最大(一定时间内存活对象和销毁对象一起统计)这两个东西对于系统优化很有帮助。我们可以根据找到的热点,有针对性的进行系统的瓶颈查找和进行系统优化,而不是漫无目的的进行所有代码的优化。             4、快照            快照是系统运行到某一时刻的一个定格。在我们进行调优的时候,不可能用眼睛去跟踪所有系统变化,依赖快照功能,我们就可以进行系统两个不同运行时刻,对象(或类、线程等)的不同,以便快速找到问题。            举例说,我要检查系统进行垃圾回收以后,是否还有该收回的对象被遗漏下来的了。那么,我可以在进行垃圾回收前后,分别进行一次堆情况的快照,然后对比两次快照的对象情况。             5、内存泄露检查            内存泄漏是比较常见的问题,而且解决方法也比较通用,这里可以重点说一下,而线程、热点方面的问题则是具体问题具体分析了。            内存泄漏一般可以理解为系统资源(各方面的资源,堆、栈、线程等)在错误使用的情况下,导致使用完毕的资源无法回收(或没有回收),从而导致新的资源分配请求无法完成,引起系统错误。内存泄漏对系统危害比较大,因为它可以直接导致系统的崩溃。 3.dump检查           答:不会,求大佬来知道            4.问个数据库相关的吧,给定一个作者表,一个书籍表,查询出出版了大于等于2本书籍的作者名           答:select 作者表.作者名 from 作者表 join 书籍表 on 作者表.作者名 = 书籍表.作者名 group by 作者表.作者名 having count(书籍表.书籍) >= 2              中国系统         。。。。一言难尽           
点赞 14
评论 9
全部评论

相关推荐

08-01 11:19
电气工程师
点赞 评论 收藏
分享
07-10 14:08
已编辑
江西农业大学 Java
拒绝无效加班的小学生...:期望3k吗?java这辈子有了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务