Java后台面试记录
腾讯一面:
总结:考基础和代码(网址A是不是网址B的子域) + SQL(选出重复邮箱)(以下是没回答上来的)
- 逻辑回归公式(简历上写了协同过滤)
详见:https://blog.csdn.net/maymay_/article/details/80259104 - 谷歌论文有个关于AB实验的,讲了什么,具体实施流程是什么(简历上写了AB实现)
- 首先你要确定AB测试要达到的目标:验证xx是不是对搜索结果有影响
- 确定好目标以后,就应该设计你的变量是什么:提升有xx的某些搜索结果
- 流量分配:你是用原有的总流量的10%做实验,再将这10%分出50%给A版本,50%给B版本。这两个50%并不一定是均匀分配
- 查看效果:实验组的指标相对对照组是不是有提升
- Hadoop的map reduce过程(他们的工作涉及到,但我忘了)
详见:https://www.cnblogs.com/laowangc/p/8961946.html - SQL题基础
详见:https://blog.csdn.net/paul0127/article/details/82529216
腾讯二面:
总结:从项目出发问问题,代码题(合并得到最大数字-最大堆),Java开发和Http相关的内容还需要了解(以下都是简历中涉及但没回答上来的)
- Http状态码
参考:https://www.cnblogs.com/binguo666/p/10940198.html - 怎么知道是不是一个客户反复登录
Session保存用户的key - Http返回数据在Http请求哪个部分
*Http请求数据分为请求行,请求头,请求数据
*Http响应数据分为状态行,消息报头,响应正文
具体见:https://blog.csdn.net/bamboo_cqh/article/details/90403740 - 无痕浏览怎么实现
系统隔离技术,通过一些轻量级的虚拟系统实现,具体原理:轻量级的虚拟系统可以实现与主机系统相互隔离目标。沙盒技术可以重定向主机系统环境操作到其他的存储空间,以及重定向变量,同时沙盒退出后会自动消失原先的虚拟环境连接由此达到安装到沙盒中的应用程序不在主机系统中保留痕迹的目的。这类产品有:360安全浏览器,Google 浏览器等。
“沙盒”技术的实践运用流程是:让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分表演,“沙盒”会记下它的每一个动作;当疑似病毒充分暴露了其病毒属性后,“沙盒”就会执行“回滚”机制:将病毒的痕迹和动作抹去,恢复系统到正常状态。想象一下,在一个装满了平整细沙的盒子里,我们可以尽情随意地在上面作画、涂写,无论画的好坏,最后轻轻一抹,沙盒又回到了原来的平整状态。沙盒的魅力就在于他允许你出错,还可以给你改正的机会。
这种技术也称之为“沙箱技术”。 - nginx重启方式
- 启动:Nginx 安装目录 -c nginx
- 停止:ps -ef|grep nginx && kill -quit 进程号
- 重启:./nginx -s reload
- nginx有多少种分发请求的方式
- 轮询:每个请求按时间顺序逐一分配到不同的后端服务器
- weight:按权分配
- ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器
- fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配
- url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
腾讯三面:
总结:算法+简历项目深挖(以下是回答不好的)
- 算法:一个数组,分成2部分(个数不超过1),使得差不超过1.(40分钟写了个DFS。。)
- AB实验流量怎么保证均等分配:不能按query,按(请求+用户id)轮训(具体不清楚)
- Java正则取前5个字符:.{2}
- Niginx源码:。。。
腾讯HR面:
总结:看你的意愿和对这个工作的渴望程度
- 你期望的团队是什么样的
- 你的家庭是什么样的
- 你父母对你的期望
- 你自己觉得最有用的一门课是什么
- 你觉得自己提升最大的一段时间是什么时候
阿里Ocean DB一面:
总结:一面考基础,但有个程序设计题不太会
程序设计题:
//评测题目: 实现一个 RateLimiter
// 网站或者API服务有可能被恶意访问导致不可用,为了防止被DOS攻击,通常会进行访问频率限制。
// 请实现一个 RateLimiter 类,包含 isAllow 方法。每个请求包含一个唯一的 clienId,如果某个 client 在 1 秒钟内有超过 100 次请求,就拒绝响应。
// 提示:考虑并发和可扩展性
// 实现语言为Java,需要实现以下接口
// public interface IRateLimiter {
// boolean isAllow(String clientId);
// }
阿里云Polar DB一面:
总结:基础+项目,以下是回答不太好的
- DNS顶层缓存在哪,有没有遇到DNS找不到ip的情况
全国DNS包括一些运营商的DNS(电信、移动、联通),还有阿里腾讯等大公司的DNS - 服务器架构是什么样的
Nginx + 服务拆分 + redis缓存 + 分布式数据库(读写分离) - HTTP心跳包
利用TCP/IP协议层为内置的KeepAlive功能来实现,默认2小时
阿里云弹性计算一面:
总结:简历上项目挖掘+基础+算法(一个数组,找出一个和为每个值的子序列),以下是不知道的问题
- hashmap遇到hash攻击怎么办?
首先我们需要增加权限验证,最大可能的在计算哈希之前把非法用户拒绝,其次再做数据大小与参数白名单验证。
阿里钉钉一面:
总结:这面比较惨,项目,问了Mybatis(忘了),基础的回答不太完整(有点紧张了发挥不好)。基本都问看过什么开源(除了Java多线程集合,以后还需要补Spring,Mybatis,redis等)+算法(简单双指针+快排)。以下是不知道的问题:
- 权限控制(不一样的人看到不一样的界面)
简历项目中没涉及到,Spring Security可以完成这个处理工作,可以学习 - Mybatis从连接数据库到工作的一套流程
MyBtis是一个开源的数据持久层框架。MyBatis内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置,这样实现了SQL与程序代码的分离,可以在不修改程序代码的情况下直接在配置文件中修改SQL。 - 创建MyBatis核心配置文件。MyBatis核心配置文件主要用于配置数据库连接和Mybatis运行时所需要的各种特性,包含了行为的设置(setting)和属性(properties)信息。命为为"mybatis-config.xml"以区分各个配置文件。
- MyBatis会创建一个数据库连接池,连接池中的一个连接将会被用作数据库操作,一旦数据库操作完成,MyBatis会将此连接返回给连接池,在开发或测试环境中,经常使用此方式。
(数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,可以克服上述缺点,极大地节省系统资源和时间) - 数据库连接池的主要操作如下:
(1)建立数据库连接池对象(服务器启动)。
(2)按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。
(3)对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。
(4)存取数据库。
(5)关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)
(6)释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。
项目里用的连接池是:com.mchange.v2.c3p0.ComboPooledDataSource,C3P0连接池
简单的mybatis操作可以见:https://blog.csdn.net/yuli_nine/article/details/79842643?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task - List, Set, Map哪些能够存放 null key
List都可以添加null元素
HashMap可以有1个key为null的元素,TreeMap不能有key为null的元素
Set底层是Map, 所以HashSet可以有1个null的元素,TreeSet不能有key为null的元素。
阿里淘系互动一面:
总结:基础+Java项目+算法(树深度的2中实现),以下是回答不太好的:
- b+树和b树是如何保证所有叶子节点都在同一层的,比如二叉搜索树就不行?
添加,删除的操作&优缺点详见这一篇:https://blog.csdn.net/qq_25940921/article/details/82224418 - 模板方法的缺点
常见设计模式的优缺点详见这一篇:https://www.cnblogs.com/wxlevel/articles/5972592.html - Http数据请求和响应的格式
具体见:https://blog.csdn.net/bamboo_cqh/article/details/90403740
此外http1.0是一种非持久连接,http1.1是一种持久连接,用keepalive保持,不会立刻关闭TCP连接 - JDBC的事物有哪些
三种操作方式:setAutoCommit() 设置自动提交(默认是自动提交)、commit() 提交事务、rollback() 回滚事务
JDBC提供了5中事务隔离级别:除了常见的四种常见的数据库隔离级别,还有一个不支持事物
具体见:https://blog.csdn.net/weixin_42950079/article/details/99674292 - 自己有什么新颖的技术
随便说了个Nginx,面试官笑了 - 除了设计复杂的实体关系模型之外,还做过什么数据库的优化
详见:https://blog.csdn.net/qq_42677001/article/details/84978969
大概的几条:
- 合理的建立索引,在常用的字段上会大大加快查询效率,但是太多的索引会增加数据库的维护成本
- 主键和外键的设置,表现出实体之间的联系
- 范式标准尽量满足,但不一定是最好的的,有时为了提高系统效率,常常需要降低范式标准,达到时间换空间的目的
- 消除多对多的关系,如用户和课程,通过增加一个实体表,标称2个一对多的关系
- 用视图简化SQL联表查询,再三层视图(一个视图在另一个视图上创建)都不够用的情况下,再尝试增加临时表(视图简化查询,避免多次排序操作,隐藏基表,但是临时数据量大时,还是得用临时表)
- 字段太多垂直分割,数据太多水平分割
- MySQL服务的配置参数都在my.cnf或者my.ini文件:如key_buffer_size:表示索引缓冲区的大小;table_cache:表示同时打开表的个数;max_connections:表示最大连接数,该值不是越大越好,过多的连接数可能会导致MySQL服务器僵死。
阿里支付宝一面:
总结:java基础+数据+项目+算法(1000个数找出最大的10个数),以下是回答的不太好的:
- 项目中遇到的最大的难点:
- 两个表找A表有,B表没有的数据:
全连接去掉B是null的记录;用not in
阿里菜鸟一面:
总结:基础,以下是回答的不太好的地方
- tomcat的加载机制
具体可看:https://blog.csdn.net/m0_37556444/article/details/83049827
Tomcat的类加载机制是违反了双亲委托原则的,对于一些未加载的非基础类(Object,String等),各个web应用自己的类加载器(WebAppClassLoader)会优先加载,加载不到时再交给commonClassLoader走双亲委托。 - concurrent hashmap java8的实现
1.8中放弃了Segment臃肿的设计,取而代之的是采用Node + CAS + Synchronized来保证并发安全进行实现
PUT: 直接定位到桶,拿到first节点后进行判断,1、为空则CAS插入;2、为-1则说明在扩容,则跟着一起扩容;3、else则加锁put(类似1.7)
GET: 基本类似,由于value声明为volatile,保证了修改的可见性,因此不需要加锁。
RESIZE: 支持并发扩容,扩容前在桶的头部放置一个hash值为-1的节点,这样别的线程访问时就能判断是否该桶已经被其他线程处理过了
SIZE: 因为元素个数保存baseCount中,部分元素的变化个数保存在CounterCell数组,累加baseCount和CounterCell数组中的数量,即可得到元素的总个数;
阿里蚂蚁大数据一面:
总结:java基础+项目难点,以下是回答的不太好的:
- 设计一个抢购系统会怎么设计?
当时说redis缓存一致性(高性能)+zookeeper(临时有序节点控制资源)+过期消息拦截(中间机器拦截+前端拦截)
分布式redis缓存请求(一致性hash算法),超量直接返回false,不超量的再写数据库
如:https://blog.csdn.net/hyy147/article/details/89676576 - mybatis有什么缺点
当时说如果做读写分离,多数据源需要自己写代码配置。
缺点一:对SQL语句依赖程度很高;并且属于半自动,数据库移植比较麻烦,比如mysql数据库编程Oracle数据库,部分的sql语句需要调整。
缺点二:debug要看log,不能打断点 - 爬虫系统和用户系统用什么java堆应该采用什么策略
当时说用户系统的话长期对象多,应该适当调大老年代,但是面试官点评应该从实时性考量,用户系统要保证请求响应够快 - mybatis中#{}和${}的区别:
{}是预编译处理,$ {}是字符串替换;mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;mybatis在处理 $ { } 时,就是把 ${ } 替换成变量的值;使用 #{} 可以有效的防止SQL注入,提高系统安全性。
- ARP攻击是什么
地址解析协议,网络层协议,将ip地址解析成mac地址;当局域网中的电脑遭遇到ARP攻击时,会持续向局域网中的计算机发送大量ARP欺骗包,处理不及时会被阻塞。解决办法:使用静态的ARP协议,不让主机刷新;ip包使用proxy代理
字节广告风控一面:(一面说技术可以了,实习时间不够-_-||)
总结:基础+项目+算法(反转链表),以下是不太会的
- MySQL查找非主键索引的过程
从辅助索引,查到主键索引,找2次 - 介绍MyBatis,MyBatis的隔离级别
Mybatis提供的事务隔离级别完全契合数据库事务隔离级别方式。 - SQL注入的防御
构造的sql语句时使用参数化形式而不使用拼接方式能够可靠地避免sql注入 - Redis的有序集合怎么用
说一个场景,每个元素都有一个score,比如热点,score大,可以把位置相应的往上提,做一个系统的优化 - distinct和group by的区别
distinct只是做一个去重,但是group by还可以进行某些聚合操作
字节广告风控二面:
总结:基础(字节不是java居多,基础问的少,项目问得多)+简历+算法(链表去重+子数组最大和),以下是不会的
- 用户态和核心态,哪些linux指令涉及到核心态
- TCP四次挥手的具体过程,time out在哪个阶段
- 杀掉含有test的所有进程,指令是:ps -ef | grep test | grep -v grep | awk '{print $2}' | xargs kill -9
字节广告风控三面:
总结:基础+简历,以下是不了解的
- zookeeper简介,概述
- kafka的简介概述
- SQL的执行顺序
- from子句组装来自不同数据源的数据;
- where子句基于指定的条件对记录行进行筛选;
- group by子句将数据划分为多个分组;
- 使用聚集函数进行计算;
- 使用having子句筛选分组;
- 计算所有的表达式;
- 使用order by对结果集进行排序。
美团Java后台一面:
总结:基础+简历+算法,以下是回答的不是特别好的
time_wait出现意义:
a.防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次连接中所有的重复包都会消失)
b.可靠的关闭TCP连接。在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。另外这么设计TIME_WAIT 会定时的回收资源,并不会占用很大资源的,除非短时间内接受大量请求或者受到攻击。进程之间发信号
Java后台面试记录的更多相关文章
- Java后台面试 常见问题
Java后台面试 常见问题 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米.百度.阿里.京东.新浪.CVTE.乐视家的研发岗offer.我找的是java后台开发,把常见的问题分享 ...
- java后台面试知识点总结
本文主要记录在准备面试过程中遇到的一些基本知识点(持续更新) 一.Java基础知识 1.抽象类和接口的区别 接口和抽象类中都可以定义变量,但是接口中定义的必须是公共的.静态的.Final的,抽象类中的 ...
- 2019上海爱奇艺大数据Java实习生-面试记录
目录 一轮 电话面试 二轮 代码笔试 三轮 技术面试 总结 附:电话面试问题点解惑 补充:面试未通过 一轮 电话面试 2019.04.28 16:21 [w]:面试官,[m]:我,下面的内容来自电话录 ...
- Java后台-面试问题汇总(转载)
总结这些天面试Java开发过程中的大多数问题,综合分类有Java基础,框架,多线程,网络通信,Linux,数据库,设计模式,算法,缓存等几个模块,由于问题太多,下面先列出问题,之后有时间在写文章解答, ...
- Java后台面试之java基础
经典类概念性问题 1.java支持的数据类型有哪些?什么是自动拆装箱? 12.Java有哪些特性,举个多态的例子. 14.请列举你所知道的Object类的方法. 15.重载和重写的区别?相同参数不同返 ...
- java后台面试之计算机网络问题集锦
1.http和https的区别 2.对称加密和非对称加密 3.三次握手与四次挥手的流程 4.为什么TCP需要三次握手?两次不可以吗?为什么 5.为什么TCP挥手需要四次?三次不行吗? 6.TCP协议如 ...
- JAVA 后台面试之操作系统问题集锦
1.进程和线程以及他们的区别 2.进程间通信的几种方式 3.线程同步的方式 4.死锁 5.分页和分段有什么区别?(内存管理) 6.操作系统中进程调度的策略有哪几种? 7.页面置换算法: 8.系统颠簸 ...
- java后台常见问题
Java后台面试 常见问题 Nginx负载均衡 轮询.轮询是默认的,每一个请求按顺序逐一分配到不同的后端服务器,如果后端服务器down掉了,则能自动剔除 ip_hash.个请求按访问IP的hash结果 ...
- Java后台工程师面试杂记——不跳不涨工资星人跳槽经历
经过接近一个月的时间,完成换工作这件“小事”,前后总计面试了多家公司,最后也没接到几个offer,不过最终总算尘埃落定,就对这个过程进行一个总结吧. 在某互联网公司工作了近一年的时间,但是频繁的业务需 ...
随机推荐
- eclipse、myeclipse使用常用的小技巧
1.修改类名称上的@author *** Preference----Java----Code Style----Code Templates----->Comments----->Ty ...
- H5 video 标签 详解
昨天使用H5 video 标签 写了视频播放 本打算参考爱奇艺的代码进行修改 发现 它是动态数据 静态页面需要拆解代码 我情急之下 使用了 video 整理一下笔记 后面有人用 ...
- ChatterBot聊天机器人呢结构(五):ChatterBot对话流程
原文地址:http://www.bugingcode.com/blog/ChatterBot_Dialogue_process.html 创建机器人 部署机器人的各种属性,根据前面的章节里聊天机器人的 ...
- 前端学习之路CSS基础学习一
CSS CSS定义如何显示HTML元素,当浏览器读到一个样式表,它就按照这个样式表来对文档进行格式化. CSS实例 每个CSS样式由两个组成部分:选择器和声明.声明又包括包括属性和属性值.每个声明之后 ...
- 涉嫌垄断的App Store,到底做了什么让开发者暴怒
Store,到底做了什么让开发者暴怒" title="涉嫌垄断的App Store,到底做了什么让开发者暴怒"> 什么行业最赚钱?不是你想象中的餐饮.互联网. ...
- kali pinyin
重装了kali,原来一直用的ibus pinyin重装之后再apt-get install的时候总是找不到包,换了各种源都不行,纠结N久果断换别的输入法了. apt-get install fcitx ...
- 从谷歌到脸书:为何巨头纷纷“钟情于”VR相机?
VR的火爆,自然无需多言.而基于VR这一个概念,已经在多个相关行业不断衍生出新的产品.服务或内容.VR眼镜.VR头盔.VR相机.VR游戏.VR影视.VR应用--但VR产业的发展并不是齐头并进,而是出现 ...
- STM32F103驱动ADS1118
ADS1118 作为常用温度测量芯片被越来越多的开发者熟知,TI官方给出的是基于 MSP430 的驱动测试程序,由于 STM32 的普及,闲暇中移植了 MSP430 的 ADS1118 驱动程序到 S ...
- TCP传输连接管理
TCP传输连接管理 一.传输连接的三个阶段 1.1.概述 传输连接就有三个阶段,即:连接建立.数据传送和连接释放. 连接建立过程中要解决以下三个问题: 要使每一方能够确知对方的存在. 要允许双方协商一 ...
- 整合 KAFKA+Flink 实例(第一部分,趟坑记录)
2017年后,一大波网络喧嚣,说流式处理如何牛叉,如何高大上,抱歉,工作满负荷,没空玩那个: 今年疫情隔离在家,无聊,开始学习 KAFKA+Flink ,目前的打算是用爬虫抓取网页数据,传递到Kafk ...