2017 Java后端面试总结
来源:互联网 发布:网站数据库设计 编辑:程序博客网 时间:2024/06/07 06:51
前言
又到新的一年了,随着招聘高潮的到来,我也加入了这波~
在这里记录一下面试过程中印象比较深的一些问题吧。持续更新直到入职为止:),
已入职,后续就记录一些工作上的学习经验吧~
数据库类
作为后端开发,可以说数据库是重之又重。提问的比例也相当之大。所以这里先记录下这个。
如何快速导入10万条数据到MySQL数据库?
这个应该当时很紧张,居然半天说不出来。其实当时心里有一个答案了,就是存储过程。但是因为平常开发基本上没用到过这东西,所以都不敢说了。。
网上还有有一些答案说批处理,通过sql文件进行导入等等,这个有时间可以去验证一番。MySQL主从配置时,如果在主服务器修改某个数据,然后在从服务器中读取,因为延迟或者宕机的问题,导致没有读到数据,应该怎么办?
这个面试官很厉害啊,很多问题都是提一些开放性的东西,只让你提供思路,没有正确与否的标准答案。
网上找了下,有以下两种技术可以做到主从断开,数据不一致的处理。相信肯定还有更多的技术可以做到,这里只做抛砖引玉~- GTID复制;
- 推荐关注:pt-table-checksum /pt-table-sync
SSH相关
SSH(SpringMVC、Struts 2、Hibernate)这几个框架可以说做Java后端开发的基本都接触过,但是真正深入去了解的又有几个呢?一般也就能应付一下工作就完事了吧。。没办法呀,谁让工作的压力太大呢,各种改需求,各种修Bug~
唉,我也不例外,因为我重心就不在这个,想逐渐转到做大数据相关的开发,所以对这块也没浪费精力去深入了解的。但是没办法啊,目前找后端工作还是会经常问到的。
说一下SpringMVC 处理客户端请求的过程?
额,当时一听到这个问题就懵了。其实当初刚开始学习这个的时候还真花力气去学过这方面,但是随着工作下去,反而逐渐忘记了。一般我们用都是在web.xml中配置一下DispatchServlet,然后在配置文件中添加自动扫描注解组件,再到类上面添加Controller注解,最后在方法上面添加RequestMapping注解就完事了。但是面试肯定不能这样说啦,我当时也是没办法就把这套给说上去了,感觉还是挺丢人的。这里贴一下图:
PS:图片来自Spring In Action 第四版说一下Hibernate的懒加载机制?
这是一个面试时高概率碰到的问题,之前刷面试题的时候也遇到过这个问题。但是苦逼如我,事到临头反而紧张的搞忘记了。。
网上找的一篇说明:
延迟加载,也叫懒加载,它是hibernate为提高程序执行效率而提供的一种机制,即只有真正使用该对象的数据时才会创建。
Hibernate中主要是通过代理(proxy)机制来实现延迟加载。它的具体过程:Hibernate丛数据库获取某一个对象数据时、获取某一个对象的集合属性值时,或获取某一个对象所关联的另一个对象时,由于没有使用该对象的数据,hibernate并不是数据库加载真正的数据,而只是为该对象创建一个代理对象来代表这个对象,这个对象上的所有属性都是默认值;只有在真正需要使用该对象的数据时才创建这个真实对象,真正从数据库中加载它的数据,这样在某些情况下,就可以提高查询效率。
服务器
Nginx
- Nginx如何配置防止DDOS攻击?
因为我也从没遇到过DDOS攻击,所以对这块了解的非常之少。当时也就硬着头皮说根据请求封IP了,其实真正防御起来,花样繁多。最简单有效的方法是堆硬件了。但是成本太高了。。网上找的一些经验,记录一下,万一以后遇到了呢- 限制每秒请求数
ngx_http_limit_req_module模块通过漏桶原理来限制单位时间内的请求数,一旦单位时间内请求数超过限制,就会返回503错误。配置需要在两个地方设置:
nginx.conf的http段内定义触发条件,可以有多个条件;
在location内定义达到触发条件时nginx所要执行的动作。 - 限制IP连接数
ngx_http_limit_conn_module的配置方法和参数与http_limit_req模块很像,参数少,要简单很多。 - 白名单设置
http_limit_conn和http_limit_req模块限制了单ip单位时间内的并发和请求数,但是如果Nginx前面有lvs或者 haproxy之类的负载均衡或者反向代理,nginx获取的都是来自负载均衡的连接或请求,这时不应该限制负载均衡的连接和请求,就需要geo和map 模块设置白名单。Nginx参考文章:
http://www.escorm.com/archives/452
- 限制每秒请求数
Java
transient关键字的作用?
这是在笔试的时候遇到的,原题是给了一段程序片段,问的是序列化的问题。如果在类的属性上添加这个关键字就表示序列化时忽略该属性。new ArrayList<>(20)
其容量一共扩充了几次?
这个题其实也是一个陷阱,如果构造的时候给予一个容量大小,其初始化的时候就会使用该大小的,不会进行扩充。扩充是在调用add方法。又一个关于
String
的老生常谈问题,代码片段如下:
String s1 = "hello";String s2 = "he";String s3 = "he" + new String("llo");System.out.println(s1 == s3);
问打印结果为什么?
false,因为手动new String("llo")
的形式,会创建2个对象,一个是在常量池中的,一个是在堆上面的对象。如果将s3改为String s3 = "he" + "llo";
那么结果就是true了。
- 2017 Java后端面试总结
- Java后端面试总结
- Java后端开发面试总结 精选
- JAVA后端总结
- 后端面试总结(转载请标明)
- 2017 后端面试经历分享
- 2017 后端面试经历分享
- 2017 后端面试经历分享
- 2017 后端面试经历分享
- 【面试】PHP/JAVA等后端面试题
- Java后端开发常见面试题目汇总
- 2017 Java 工程师面试总结
- 一个初级python web后端开发工程师的面试总结
- 一个初级python web后端开发工程师的面试总结
- Java后端程序员1年工作经验总结
- Java后端程序员1年工作经验总结
- Java后端程序员1年工作经验总结
- java后端程序员1年工作经验总结
- 《MySQL必知必会》学习笔记十一(操作表)------掌握部分
- pinyin4j汉字转换拼音的工具类
- 第二天笔记
- c++中String类(1)
- 【springmvc 3】----配置 VS 注解方式
- 2017 Java后端面试总结
- 练习
- Rotate Array
- 每天一个 Linux 命令(4):mkdir
- Lucene初探之索引文件的基本类型与基本规则
- HDU5616 Jam's balance
- Java学习:coursera课程笔记(一)
- AndroidStudio无法启动模拟器问题
- Android 友盟分享详细集成过程及所遇问题解决