面试指南:想跳槽,这些技术点你会了吗?
Posted 当年的春天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试指南:想跳槽,这些技术点你会了吗?相关的知识,希望对你有一定的参考价值。
前言
- 面试指南一中着重为大家分享了我换工作原因以及自己的目标,其中很重要的一点是需要制定一个计划,本篇博文就为大家分享我准备的计划核心内容—技术点;
- 本篇博文继续为大家带来技术干货,分享我珍藏多年的压箱底的技术点
看似是技术点,传起来是构建一个技术人的技术体系,希望能帮助广大的技术人
面试指南系列
这些技术点你会了吗?
Java基础
-
常用类
- Object中都有什么方法
-
jdk新特性
- lamda表达式studentList.stream.filter(a->a.getName.equals(“张三”)).count();
-
拼接字符串(参考博客)
- String
- StringBuffer
- StringBuilder 如何动态拼接在一起
-
数据结构
-
HashMap的底层实现:数组+链表 初始默认 16 扩容因子0.7 12->13;没有线程安全
-
线程安全 HashTable 通过synchronize保证线程安全,效率低
-
ConcureentHashMap 通过segement保证线程安全,效率高
-
HashMap存100万数据不考虑内存溢出,需要注意什么,防止冲突,如果给定数字,设置扩容因子
-
链表倒置(转成双链) a->b->c 如何变成 c->b->a
-
数组构造一个有序二叉树
- 将数组进行排序
- 找中间结点做为根结点,然后循环出左子树和右子树
-
时间复杂度,空间复杂度
-
无序的十万个数组中 排序最大的前10个数 排序的算法复杂度o(nlogn) 直接找o(n)(参考博文)
-
线性表分 链表和数组 优缺点
-
数组 查快
-
链表 修改方便 可以利用内存中的利用率高 o(n)
-
维护有序链表;数组放进去时经过比较
-
-
String为什么是不可变,实现方式 final String底层是用什么进行存储:char数组
-
红黑树(参考博文)HashMap在hash冲突时 形成链表,当链表长度超过8时 在1.8时用红黑树,之前用二叉查找树
-
-
并发,多线程
-
Jvm(参考博文)
-
IO NIO BIO(参考博文)
- NIO jdk自带和netty比对(参考博文)
-
反射
-
远程调用原理RPC
- 本质是通信原理,底层TCP、Socket
-
网络编程
- TCP UDP区别
- 1.TCP ;UDP实时性比较高
- TCP 三次握手四次挥手 为什么需要四次挥手 heakclose 网络编程 socket 单工 半双工 全双工
-
http 1.0和2.0区别
-
restful
- 其中url代表什么含义
SSM
- SpringMVC
- 拦截器
- 与Struts2区别
- Spring
- Spring和mybatis组合在一起原理,接口实现类是如何生成
- Spring事务 回滚中用注解中一般的参数和类型
- 事务传播机制 七种
- Spring 隔离级别
- mybatis
- $和# 区别
- resultType resultMap区别
- 和SpringData区别
- mybatis 和 ibatis 区别
- mybatis-plus
- mybatis 和 hibernate 区别
- 学习成本
- ORM mybatis 自定义sql hibernate 封装比较好,迁移改动少
- hibernate 多对多
- ssm优势
缓存
-
-
Redis数据类型
- String、Hash、List、Set、Zset(参考博文)
-
Zset 时间复杂度
-
set类型业务使用场景;
-
String类型存实体如何存?json 存序列化取反序列化;json太大, 一个数字4个字节tostring占的字节比较大,占用带宽极大 解决方案 protobuf
-
计数incr 判断课程余量,如何防止并发,执行incr或decr后就会返回个数
-
设置失效时间 expire key 查看多长时间过期命令 ttl key
-
Redis在系统中使用场景
-
Redis雪崩:Redis有异常,大面积key失效;从数据库;缓存击穿解决方案:没有时也从数据库加载并放到redis中;布隆过滤器(参考博文)
-
Redis的两种备份机制,数据恢复:RDB,AOF
- RDB和AOF 一分钟配置 十分钟有多少个进行触发
- AOF 某一段时间命令放到磁盘(瘦身->触发超过多大再瘦身)
- RDB
- 恢复数据一定可以保证可靠性? 先加载AOF
-
批量操作减少TCP交互 pipleline lua
-
Redis集群
-
Redis慢 查找原因方案
-
redis 3.0之前不支持集群通过哨兵;3.0之后自身的cluster 通过哈希槽进行分片,1万6千个槽;Redis的病毒1G/s;jedis
-
Redis的数据迁移,数据量大小
-
一个实例多大内存
-
Redis是单线程还是多线程,如何证明它是单线程
-
Set和List区别
- Set中无重复数据 List中可以有重复数据
- Set是栈先进后出 List是队列先进先出
-
-
Redis和Memcache对比;如何测试两者的性能;测试时考虑哪些点,底层实现上区别;哈希环,redis增加节点重新计算?(参考博文)
-
多级缓存,location本地缓存,redis共享缓存
数据库
-
调优
-
char和varchar区别
-
缓存框架:Redis;雪崩效应;缓存击穿-解决方案:如果没有则放缓存中空也放到redis,有一定失效
-
文件FastDFS和数据库
-
数据隔离
- 不可重复读
- 序列化
-
mycat数据库分片(MyCat高可用探索)
-
多租户 三种实现(多租户方案)
- 库级别实现
-
-
表级别实现:表中一个字段来区分
- Schema级别
-
读写分离(数据库主从延迟导致数据不一致)
- 主从复制
-
分库分表方式:
- 按列进行分竖向分
- 按行进行分横向分 按地域中查询所有库中的数据,地域组合起来 -
mysql 行级锁 update、select、select for update
-
脏读 不可重复读 幻读 读 写 读未提交 是 是 是 行级共享锁-事务结束 读已提交 否 是 是 行级共享锁-读完结束 行级排他锁-事务结束 可重复读 否 否 是 行级共享锁-事务结束 行级排他锁-事务结束 串行化 否 否 否 表级共享锁-事务结束 表级排他锁-事务结束 -
哪种级别可以实现悲观锁 悲观锁,乐观锁
-
事务
-
sql执行过程(参考博文)
面向对象
-
抽象类和接口区别
-
历史角度
-
业务中用实现 继承
设计模式(设计模式系列)
- 实际用过什么设计模式
- 策略模式
- 单例模式(手写,饿汉,懒汉[双重判定])参考博文
- 代理模式-aop:jdk基于,cglib基于;举例子;AOP源码 动态代理+反射
中间件&架构
-
最熟的中间件及原理
-
遇到什么问题
-
分布式锁(Redis锁接口防刷 Redis锁接口防刷升级版 参考博文)
-
微服务
-
分布式事务
- Seata AT模式
- MQ 最终一致性
-
智能一代云平台架构(智能一代云平台系列)
- Keepalived+nginx+Tomcat+Haproxy+Mycat+MySQL
-
Keepalived虚ip原理 互ping 三层交换机(Keepalived+Nginx系列)
- 设置脚本判断haproxy进程是否存活,如果进程不在则尝试重启,如果重启不成功则将本机的Keepalived的进程自杀,对方通过ping发现进程不存在则将虚ip进行飘逸
- 如Keepalived+Nginx主备模式会导致一台Nginx闲置,解决方案
- 备Nginx可以代理其他的服务-生产不推荐这么做
- 通过内网DNS解析轮询来实现Nginx的负载
-
Dubbo+Zk
- dubbo和zk如何实现服务注册与发现
- 注册时 group 版本号 服务名
- 调度时轮询规则 默认是平均轮询,配置权重,哪个处理快调,哪个请求上少
- 本地开发如何开发
- consumer provider monitor(zk)
- zk好处,zk主要解决问题
- zk挂了如何处理
- zk zab协议 全称 二阶段 崩溃恢复 基于的算法
- zk选举功能,如何选举:启动时选举 主的作用:主的负责操作数据结点(增删改) 并同步给副的
- dubbo和zk如何实现服务注册与发现
-
单点登录
- shiro
- cas
- 认证授权
-
架构中负责点
- POM文件整理(参考博文)
-
通用mapper(参考博文)
-
日志处理
- ELK(参考《从零学ELK系列》)
-
异常设计
-
MQ(参考博文)
-
Nginx(Keepalived+Nginx系列)
-
Keepalived+Nginx
-
三个作用:反向代理(和正向代理区别)、负载均衡、静态资源、安全防护
-
单点故障如何解决
-
负载后session共享方案(tomcat共享session)
-
tomcat扩展或宕机后如何动态感知
-
配置几大块儿
-
worker_processes 1;
events
worker_connections 1024;
http
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server
listen 80;
server_name localhost;
location /
root html;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html
root html;
-- upstream用法
upstream backend
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server
location /
proxy_pass http://backend;
-
session-共享机制
- tomcat之间共享(tomcat共享session)
- redis
-
solr
- 如何搭建solr-cloud
- solr 基于luence 在luence基础上扩展什么东西
- solr作用
- 应用业务场景
- 数据实时性如何保障
- solr全量
-
定时任务(定时任务选型及改造)
- Quartz如何防止重复执行-数据库,redis锁
- 分类
- crontab
- Quartz
- xxl-job
- ElasticJob
-
调用链监控(调用链监控系统调研)
- 大众点评cat
- SkyWalking(SpringBoot集成SkyWalking实战)
- Zipkin
算法
工具
-
maven
-
整理,查看依赖,版本号
-
传递依赖
-
scope有几种类型-参考博客
-
compile
-
provided
-
runtime
-
test
-
system
-
-
打不同环境的jar包
-
mvn命令生命周期
-
clean
-
validate
-
compile
-
package
-
verify
-
install
-
site
-
deploy
-
-
jar包和war包区别
-
-
svn/git(git Git合并远程分支 )
运维相关(运维探索系列)
-
Linux上查问题命令
-
Docker
- 用在什么地方
-
vim
- 删除一行:DD
- 删除十行:D 10 D
- 查找 如果有空格 反向查找
-
tomcat查看启动还是停止 ps -ef | grep tomcat
-
查看端口号 netstat
netstat -anltp | grep 22300
-
tomcat在上线的时候修改什么东西
- catalina.properties
- server.xml
-
代码及部署管理(利用脚本自动化部署系统,解放我们的双手)
- 程序部署新代码-冲突控制(新功能,bug修复),正式环境上线
- 代码管理
- 脚本自动发布,双点进行切换
-
回滚方案
-
自动化运维(利用脚本自动化部署系统,解放我们的双手)
- Jenkins如何实现持续部署
- CICD:k8s,docker(k8s常用命令)
- 自动发布流程
前端相关(知道一些基本知识就好不用花很多精力)
- js
- vue等框架
一些参考
总结
- 看似是孤立的技术点,其实是一个合格程序员的技术体系的提炼;
- 本文核心是指出一个技术体系参考大纲及一些好的参考资料,并没有给出每部分具体内容,每部分内容需要大家能够积极主动自己去查资料去做更加深入的探索
以上是关于面试指南:想跳槽,这些技术点你会了吗?的主要内容,如果未能解决你的问题,请参考以下文章
字节软测面试必问的Selenium自动化测试框架设计,你会了吗?
字节软测面试必问的Selenium自动化测试框架设计,你会了吗?