面试问题及知识汇总
来源:互联网
项目
工作中遇到的印象深刻的问题
挑复杂的,能说清楚就行,不一定是自己做的
工作中遇到的问题如何排查
先脑子里过一遍流程,按顺序、按可能性一个个排查
也可以第一反应就去看日志、数据库等
项目开发性设计,自己设计,自己定规则
介绍一个项目中遇到的问题
a.产品设计过程中面对的挑战和难点;b、周围同事对我的评价;c、产品设计考虑的几个点
算法
链表
链表操作(在线写代码)
用单向链表表示十进制整数,求两个正整数的和。
相当于链表倒序相加的变种,先反转链表,再倒序相加,最后再反转即可
两个单链表求和
合并K个有序链表(我依然用了优先队列,也可以使用分治)。
实现一个有顺序的LinkedList,实现deleteAll(int val)方法删除所有值为val的节点,和save(int val)方法添加一个值为val的节点。
单链表非递归翻转,不借助其他数据结构
栈
栈,增加一个max方法;
stack实现一个min方法,O(1)的复杂度
数组
一个无序数组找其子序列构成的和最大,要求子序列中的元素在原数组中两两都不相邻
输入一个int数组,返回一个数组,其中奇数都在左边,偶数都在右边
给一个数组和一个整数,输出数组中所有和为给定整数的元素下标
一个有序数组,求一个数出现的次数
两个线程,一个只能存有数组1、2、3和另一个存有a、b、c,然后通过调度,最终结果输出1a2b3c
给个数组,只有重复的,求所有和为21的下标:不用n2的暴力算法,要考虑数字相同的下标,先说思路没问 题才能共享屏幕写
给你一个连续素数数组 让你找出增长比第k小的位置
有序数组 A = [1, 2, 2, 3, 3, 5, 5, 5],b = 5,在A中找出b的序号的上下界,考察思路和代码熟练度
k路归并排序
字符串
给定字符串的全排列
最小公共子串得长度,最大不重复子串的长度
是输入[I love byte bytedance] Ilovebytebytedance,然后判断中括号里的单词能否组成括号外的语句中括号里的单词用空格符隔开,括号外的语句不能由单词重叠组成,如果输入这个[I love byte bytedance] Ilovebytedance,预期结果返回true
树
给出一棵二叉树的根节点,现在有这个二叉树的部分节点,要求这些节点最近的公共祖先。
给定一个二叉树,返回二叉树每层的最左的值。
二叉树镜像
反转二叉树
根据二叉树前序遍历生成avl树
二叉树的bfs
LRU
LRU cache(实现构造函数与get、put,我是用了LinkedHashMap,如果不用LinkedHashMap该如何设计)。
LRU的实现
lru原理要非常详细的数据结果和过程结构
编码实现LRU算法
大数据量
大数据量的IP去重
大量数据第K大的数(我说可以用优先队列,问到priorityQueue的底层实现,小顶堆的实现方式(数组)、插入删除过程)。
10G文件1G内存,
一个100G的文件,内存只有8G,如何给文件排序,文件内容都是按行存储的URL
统计大量访问日志(分几百M 和 几百G的场景);得出访问次数最多的前K个人 (单台机器实现)
接雨水问题。用数组表示不同高度的台阶,下雨后(足够多的),能存多少水。
左右两个指针即可
一个n边形(P0到Pn), 每一边都是垂直或水平的线段,给定数值k,以P0为起点将它平均分成k段,请打印出所有的k等分点坐标
先算一遍周长?还是说由于都是垂直或水平,会有捷径?
缺失的第一个正数(leetcode第41题)
现有一个随机数生成器可以生成0到4的数,现在要让你用这个随机数生成器生成0到6的随机数,要保证生成的数概率均匀。
有 N 枚棋子,每个人一次可以拿1到 M 个,谁拿完后棋子的数量为0谁就获胜。现在有1000颗棋子,每次最多拿8个,A 先拿,那么 A 有必胜的拿法吗?第一个人拿完后剩余棋子的数量是8的倍数就必胜,否则就必输。
手里有一副扑克牌。按照下列规则吧他堆放桌上。一,拿出最上面的一张牌,放桌上,然后把接下来的一张牌放在扑克牌的最下面。循环,直到没有手牌。现在已知桌上牌的顺序。求原手牌的顺序
一排盒子,每个盒子上标了能走的最大步数,从第一个盒子开始,判断能否走到最后的盒子
输入一串空格分开的整数,相邻不会重复如:1 2 4 3 5,只返回其中一个峰值就可以,比如返回 4 或者 5
峰值定义:大于相邻两个数字就是峰值;对于头尾两个数字,分别大于相邻的一个数字即算峰值
附加条件 不使用额外的空间
找到一个文件里出现次数最多的的数字,文件大小远大于内存容量
打印重复数字
查找前topK
B B+ 跳表区别 时间复杂度
贪心算法
ab 轮流抛硬币,谁先抛出正面胜出,先抛胜出概率多少
假设是一个抽奖的游戏,不同的人是有不同的概率倍数,是一个整数,例如1、3、5...输入100万人,要求抽奖抽出来2万个人;并且假设每个人都有一个唯一id
搜索引擎倒排原理及实现方式
策略
分布式
分布锁
分布式ID(讲讲雪花算法怎么实现的)
限流
让你设计一个限流的系统怎么做?
令牌桶
限流。限流算法。令牌桶的不足
任务系统怎么保证任务完成后发奖一定成功
让你设计一个延时任务系统怎么做
说了两个方案,一个是使用 redis 的 ZSET 来实现,考虑分片来抗高并发,使用 redis 的持久化来实现落地,使用 redis 的哨兵实现故障转移。一个是使用时间轮的方法。
设计一个文本编辑器实现插入/删除/查询
头条文章向用户推送避免重复推送的问题
微博限定用户每次输入最多140个字符,用户如果传字符串很长的链接,怎么办
多个人玩贪吃蛇设计
设计群消息已读功能
缓存设计
写一个函数做下抽奖,输入和输出的数据结构自己设计
微信扫码登录
数据库
分库分区分表
数据库分表 / 分库 / 集群
如何分库分表
索引
数据库聊到了索引,B+树(大致结构、为何要用、插入删除大致流程)。复合索引(设计索引,为何最左原则),hash索引(范围查找为何不适用)。
数据库如何建索引
数据库3个字段的联合索引,在用单字段时能否命中索引
数据库索引:表有3列a,b,c,需支持查询(a,b)(b) (b,c),索引如何建
主键索引和非主键索引的区别
数据库索引+前缀匹配
where a>1 and b>1;where a = 1; where b = 2,如何为这种条件语句建立索引;
主键与索引的联系和区别
索引的实现方式,为什么会采用这种数据结构
sql
Sql查询第三大的age
每门课程都大于80分的学生名字
sql优化
数据库查询优化
事务、隔离级别、锁
数据库事务的隔离级别
乐观锁 / 悲观锁
自增ID与uuid的优劣
数据库表(id, name, parentId)如何组装成树?
MySQL
索引
mysql索引的使用和原理
Mysql的索引结构 聚簇索引
存储引擎
两种存储引擎比较
mysql的innodb与myisam区别
MySQL 事务的四个隔离级别?
先说了四个级别的区别,然后说了每个级别可能产生的问题
binlog 日志和 redolog 日志清楚吗?
说了两个日志的作用以及两阶段提交
PostgreSQL
ORM
Java
基础
JDK基础 集合 锁
fail-fast
string转double
JVM
GC CMS,CMS的参数
JVM的一些排查工具jstat, jstack ,jmap
out Of memory Error 跟 stack Over flow Error 的比较
源码
Hash相关数据结构
Set实现、HashSet
解决哈希冲突的方法(详细说说实现)、哈希一致性算法(为什么是环形结构,聊到应用场景会问到分布式缓存)
问HashSet底层实现的时候自然而然提到HashHashMap、HashMap底层实现、1.8改进、线程安不安全、为什么不安全,解决方式。
Hashtable、concurrentHashMap(并发、分段锁、cas、synchronized、锁粒度)
HashMap
hashmap实现方式
自己设计hash;
Map 底层原理
java 的 array 跟 list的比较,底层原理上的
多线程
线程池的工作流程。线程的几种状态,什么情况会进入阻塞
java多线程知识点,如synchronized,reentrantLock以及两者比较
java线程池,submit跟execute的区别
java线程池基础知识、自己实现一个线程池
并发控制(乐观锁,悲观锁)
异常处理
异常处理(参考阿里巴巴Java开发手册)
设计模式
中间件
Redis
数据结构
数据结构有哪些?分别怎么实现的?
ZSET
zset 延时队列怎么实现的
Redis 的 ZSET 怎么实现的?
尽量介绍的全一点,跳跃表加哈希表以及压缩链表
Redis 的 ZSET 做排行榜时,如果要实现分数相同时按时间顺序排序怎么实现?
说了一个将 score 拆成高 32 位和低 32 位,高 32 位存分数,低 32 位存时间的方法。问还有没有其他方法,想不出了
集群
哨兵
持久化
分布式锁
redis内存不足,如何解决
Redis的事务以及实现方式
redis达到十万的并发
redis 高可用怎么实现、redis过期怎么实现
Redis高可用方案
Redis缓存删除策略
用redis做限流
RabbitMQ
集群
持久化
多个生产者,多个消费者 并发控制queue
Kafka
MongoDB
ELK(Elasticsearch、Logstash、Kibana)
框架
Spring Boot
Security
JPA
Spring Cloud
Zuul:网关组件,提供智能路由、访问过滤等功能
Ribbon:客户端负载均衡的服务调用组件
操作系统
Linux的Ctrl c发生了什么,与Ctrl z区别,说到了信号、管道、进程通信的方式,进程调度。
linux 系统里,一个被打开的文件可以被另一个进程删除吗?
epoll和poll,select的区别
计算机网络
TCP的拥塞窗口、滑动窗口。
一个 10M 大小的 buffer 里存满了数据,现在要把这个 buffer 里的数据尽量发出去,可以允许部分丢包,问是用TCP好还是UDP好?为什么?
UDP / TCP 协议
三次握手
Socket
Http
Http重定向的具体流程
一个完整的 HTTP 请求会涉及到哪些协议?
http状态码/header/请求方法, 哪些请求方法是幂等的
https加密原理
http的返回码/状态码
Https与http区别, tls的加密流程
HTTP状态码 502/504
安全
xss && csfr
对称性加密跟非对称性加密的比较,使用场景
加密算法RSA
C++
C++ 的动态多态怎么实现的?
C++ 的构造函数可以是虚函数吗?
Python
python协程原理/缺点
python GIL, 为什么有GIL 还需要threading
python gevent协程调度原理/缺点
python的装饰器
其他
Hbase 底层原理
dubbo的容错机制有哪些、负载均衡机制有哪些
redis和memcached项目
工作中遇到的印象深刻的问题
挑复杂的,能说清楚就行,不一定是自己做的
工作中遇到的问题如何排查