各公司面试题整理
一、前两道要求写出代码
后两道说思路即可
第一题是自己设计一个双向链表,并实现插入 删除 一开始忘了处理头尾节点的情况,面试官让再检查,然后补上了
第二题是字符串替换,在字符串s中找到字符串p,并替换成e 这个题问了面试官说可以用暴力,就直接暴力解了,但是忘了string的insert和erase怎么用了,太菜了…
第三题如何找链表的第k个节点,思路:倒数第k个就是正数第l-k+1个,即l-(k-1),也就是说让一个游标先走k-1步,到达第k个节点,再有另一个游标从头开始,这样当第一个游标到达最后一个节点的时候,第二个游标正好在第l-(k-1)个节点,即倒数第k个节点上
第四题场景:服务器可能被IP重放攻击,要找出访问量最大的k个IP并处理,抽象成topK问题,先哈希去重,再创建小顶堆维护k个节点即可,后面又问了需要多少内存,堆需要维护的内存直接忽略不计了,因为主要的内存消耗在创建哈希表上,当时脑子有点乱,太迷了…第一次说了个8G,后来一想肯定不对,重新算了下,应该是2^32 *8B左右
二、
二维矩阵中寻找元素,二维数组满足从左到右从上到下非递减, 从右上角或者左下角扫描,每次砍掉一行或者一列,时间复杂度max(m,n)
数据库的一些知识,mysql和redis,可以看我其他的面经,就不多提了
http 0.9 1.0 1.1 2.0 https tcp/udp等等
三、
https://blog.nowcoder.net/n/e5fe3fa16b774b469241029a6de4e65a#一java
这个链接比较详细
但是觉得这些参考价值一般,一和二都是直接内推的面试,注重了编程。
325搜狗
1项目经验
2poi限制输入
3final
4hashmap currenthashmap
5spring特征spring事务
6mysql死锁
7jvm G1 CMS
8卷积神经网络
9linux操作
325美团
1项目
2 mybitits hibenite 区别,哪个效率更高
3数据链路层和网络层设备和协议
4数据库左右连接,内连接自然连接,
5数据库二级索引 数据结构 数据怎么保存
6虚拟地址 为什么是2的64次方
7http的状态码
1gc
2三次握手 为什么三次握手
3http长连接短连接
4io多路复用
5数据库索引结构 为什么用b+树
6tcp怎么保证可靠的
7将字符串空格变为%23,从后往前解决
字节414
1==和equals
2重写equals和hashcode
3hashmap
4static和volatile
5第K大的数
6TCP可靠
7网络拥塞避免
8time-wait状态
阿里414
项目,excel面向任务流
最小生成树和图
Int long大小
贪心算法
红黑树
携程
1int大小integer
2gc
3jdk jre
4String stringbuilder 字符串常量池
5sychronized和volitile
6ssh
7
京东
1多线程 锁区别
2设计模式,单例(保证方法无状态无状态)
3数据库优化,数据库索引哪种情况需要建立 索引失效 mysql日志 执行过程
4redis 要注意key不能过大
5线程池 参数
6oom 栈溢出,堆溢出,常量池溢出
阿里文娱 实习一面 3.12 50nin
自我介绍
spring 是否看过源码
Bean生命周期
项目中一个难点
jdk看过源码 树在Java的应用 红黑树 b树b+树区别 使用场景
协程与线程的关系
设计一个上亿用户的登录模块
设计一个单点登录
排查后端性能思路
小组协同开发,编码规则
pb级集群日志里找重复行
编程邮件
蘑菇街 金融风控部门 实习一面 3.13 40min
项目经历
订单管理,订单快照实现
为什么使用ES
Activity 工作流 模板、嵌入、离开
工作分配换人 怎么实现
面向对象
注解怎么自己实现?都有哪些注解
Threadlocal
Start方法与run方法,start方法底层实现
Java线程状态 new、running、waitting、time-waitting、阻塞、终结
反射的一些方法
Spring
两种反射 区别 接口 cglib
Mybatis # $区别
SQL注入有哪些?可以怎么防范?从哪一层可以进行实现
Limit 参数使用
索引什么时候失效
左连接 右连接
腾讯 电脑管家深圳 简历面 3.16 20min
项目中ES、MySQL、redis的使用关系
保证redis一致性
为什么使用srio,与spring security的区别
处理大量读写请求
处理大量写请求
TF-IDF算法
阿里 企业智能事业部 3.16 20min
项目的一个技术难点
cookie session
http tcp
Tcp拥塞
浏览器发送cookie流程
如何保证cookie安全
面向对象、解释其三个特点
数据结构快排、插入、堆排序
核心平台
人人车 核心平台 3.24 35min
类加载机制
JVM数据区域
各个回收器
确定回收对象
MySQL存储引擎
Innodb mylsam分别哪种场景使用
建索引需要注意
索引失效的情况,explan
Java封装继承多态
怎么实现多继承
Java各种基本类型
自动拆箱、装箱
String为什么不可变类,为何这样设计
Java里的数据结构
怎么理解线程安全
实现线程几种方式
Runable 与 callable区别
Spring IOC与Spring AOP
动态代理
Spring bean 单例、多例
作业帮 一面 3.25 50min
数组Top k
快排
订单模块流程
购物车怎么实现
Redis 秒杀 watch 事务
知识图谱
短文本相似度计算
作业帮 二面 3.27 50min
订单流程
减库存与生成订单顺序
elasticSearch
MySQL与ES的同步
ES快20%是怎么得到的
TF-IDF详细步骤
192.168.255.255\28 有多少个IP
自己显示器坏了,怎么得到IP
1 2 3 4 5 1 2 3的页面序号访问,内存中有4页大小的空间,LRU替换策略,最后内存里面保留的是哪几页内容
消费端1s消费一个指令,但60s最多消化10个,怎么实现?
编程:A-Z AA-ZZ 一个整数对应列号
还了解哪些相似度计算算法
腾讯 后台 小程序 3.30 100min
商品库存存在哪
redis存哪些数据、如何解决库存问题
请求读多写少,如何设计?(分布式锁、手动过期、本地缓存)
在后台使用一个异步线程的时候,如何确保不同的服务只建立、运行一个线程,而不是多个线程呢?
Redis 本地缓存 MySQL的关系
不硬件扩容的基础上,如何提高redis性能
Redis RDB,AOF以及项目中怎么用
Redis集群的配置情况
Redis 分片节点如何操作
Reids 主从同步、新master选取
ES的使用情况(项目中如何使用、使用版本、单机or集群)
ES全文检索的底层原理
一个商品的不同信息是存在一个document中吗?(回答是,说我用的不是全文检索)
MySQL索引方式(b树与hash索引)
B树的应用,Innodb Mysriam存储引擎里索引的具体情况
Tcp接收端一直不处理收到的字节,会发生什么情况?(回答缓存、窗口,又问这些时间长会过期吗?)
服务端发送数据发给客户端后,数据经过了几次复制(用户态到内核态)
Tcp协议之上的有哪些协议
HTTP与HTTPS区别与两者端口
HTTPS过程
中间人攻击是什么?https如何解决中间人攻击?
原来使用http协议,后来升级为https,如何确保使用http时仍能访问到站点(307)
10个线程,每个加100,结果与1000的关系,如何解决?如何不适用代码块加锁(synchronized)的方式解决?
进程与线程有什么区别?
如何控制一个进程独占一个文件?
协程
编程:
1、有序链表去重
\2. 给定一个数组,有正数,负数,求和最大的连续子序列(动态规划,三种情况)
腾讯 后台 小程序 二面 3.31 80min
Java运行时数据区域
方法区放的有什么数据
类加载机制
加载、双亲委派
静态变量什么时候初始化
解析过程
Java里的锁,synchronized的锁实现
Synchronized锁升级
Mysql索引的方式,除了hash B树还能有什么
介绍不同的存储引擎
B+树为什么比B树快
树索引的缺点
Redo undo
接收窗口(和一面类似)
Tcp拥塞控制
四次挥手 二三次之间、2msl 最大报文时间
Socket编程?
虚拟内存、段、页
Spring IOC,AOP的实现方式
Spring用到的设计模式
Redis主从同步
编程:删除倒数第n个节点
系统设计:实时输出最近一个小时内访问频率最高的10个IP,要求:
1、实时输出
2、从当前时间向前数的1个小时
3、QPS可能会达到10W/s
广联达 大数据部门 一面 30min
项目中是怎么做的Mysql优化
Explain filesort?
解释Spring IOC 与 AOP
Spring 有哪些注入方式
Spring mvc 怎么做事务?
MySQL事务特点、隔离级别
MySQL锁,ABA问题
MySQL索引 具体细节
http 常用方法
https
重载与重写
String 为什么是不可变?优点是什么?
Stringbuilder 与 stringbuffer区别
Hashcode
腾讯 后台 3面 4.1 50min
项目中怎么用到的事务
Redis怎么存数据
Es在项目中怎么用?与MySQL的区别在哪里?
上次未回答出来的统计IP
100亿个数,找出中位数,4G内存
\3******输入两棵二叉树A,B,判断B是不是A的子结构。****
1 |
|
操作给定的二叉树,将其变换为源二叉树的镜像。
1 |
|
输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径
1 |
|
\17二叉树深度**
1 | public int TreeDepth(TreeNode root) {//递归 |
\36 赛车问题**
1 |
|
\42回溯法寻找二维数组中字符串**
1 | 用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 |
\48会场分配问题**
贪心算法,第一问题求出一个会场最大容纳数,每次贪心,选择可以进行的最早结束的会议当做下一次的选择
第二问题,最少需要多少会场,将开始时间和结束时间分别排序然后每次开始时间小于结束时间会场加一
1 | int j=0; |
\49区间合并问题**
对1,3 2,5 6,7 三个区间进行合并
Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
首先使用指定排序,根据数组的第一个数据进行排序
使用list对已经合并好的区间进行存储
将list转换为数组res.toArray(new int[0][]);
1 |
|
### 63求数组所有子集
采用经典回溯法,核心如下,加入新数字,递归,去掉加入的数字,回溯
1 |
|
\64组合总和**
题目 数组{2,3,5,7} 求和为7的组合,每个数字可以重复
和上面一样的思路,回溯法,每次加入新数字,递归,最后去除新数字
1 |
|
\67旋转数组**
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
三次翻转数组解决,第一次7654321,第二次5674321,第三次,5671234
1 | swap(nums,0,nums.length-1); |
\68回文链表**
1 |
|
\80乘积最大连续子数组**
动态规划,记录当前最大值和最小值,因为最小值负数乘以负数会成为最大值
1 | public int maxProduct(int[] nums) { |
\81除自身外数组乘积**
结果等于该数前面数字的乘积乘以后面数据的乘积,先循环计算该位置前面数的乘积,再循环计算前面数乘积乘以后面数乘积
1 |
|