面试指南(二):想跳槽,这些技术点你会了吗?
前言
- 面试指南一中着重为大家分享了我换工作原因以及自己的目标,其中很重要的一点是需要制定一个计划,本篇博文就为大家分享我准备的计划核心内容—技术点;
- 本篇博文继续为大家带来技术干货,分享我珍藏多年的压箱底的技术点
看似是技术点,传起来是构建一个技术人的技术体系,希望能帮助广大的技术人
面试指南系列
- 面试指南(一):想跳槽,你真的做好准备了吗?
- 面试指南(二):想跳槽,这些技术点你会了吗?
- 面试指南(三):想跳槽,这些问题你会了吗?
这些技术点你会了吗?
Java基础
常用类
- Object中都有什么方法
jdk新特性
- lamda表达式studentList.stream.filter(a->a.getName.equals(“张三”)).count();
拼接字符串(参考博客)
- String
- StringBuffer
- StringBuilder 如何动态拼接在一起
集合(Java集合总结 参考博文)
- ArrayList LinkedList Vector区别(参考博文)
- 数组查询快,插入修改比较慢;查时间复杂度O(1),删除的时间复杂度O(N)
- Vector 底层用的数组,线程安全;
- HashMap HashTable(锁全部) ConcurrentHashMap(只锁一部分) (参考博文 博文2)
数据结构
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数组
泛型 在编译期(类型检测) 运行期 擦除(参考博文 博文1)
红黑树(参考博文)HashMap在hash冲突时 形成链表,当链表长度超过8时 在1.8时用红黑树,之前用二叉查找树
并发,多线程
两种实现方式(参考博文 博文1):
继承Thread
实现Runnable接口
线程池(系统中用哪个-fixed),线程池参数(参考博文)
- FixedThreadPool
- SingleThreadExecutor
- CachedThreadPool
线程间协作(参考博文)
wait
notify
sleep
yield
join
线程同步(参考博文 博文1)
- synchronized 修饰是资源(参考博文)
- lock
- volatile
- AQS(参考博文 博文1)
- 死锁(参考博文)
- java 中的锁 哪些不需要切换上下文
- 共享锁,排它锁(参考博文)
在项目中应用-抽题
举例
解决并发
死锁 百分之百死锁
程序中实现
应用场景,难点在什么地方,如何实现
Jvm(参考博文)
- 内存模型
- 堆(为什么要分新生代(s0,s1,eden区),老生代)
- 新生代(s0 s1 eden)
- 老年代
- 新生代->老年代 两种触发:一种是年龄超过16,一种是直接来大对象
- 栈
- 程序计数器
- 方法区
- 堆(为什么要分新生代(s0,s1,eden区),老生代)
- 堆栈对应,在栈中存放的值是堆的地址
- 垃圾收集器(参考博文)
- 回收算法-区分新生代 (复制算法) 老年代(标记整理)
- 标记清除
- 标记整理
- 复制算法
- 标记垃圾的两种方式(参考博文)
- 引用计数法 jdk1.2之前 循环引用问题
- 标记计数-可达性分析 GCRoot
- 什么时候触发垃圾回收:空间不足时触发,如果还不够会报OOM
- 软引用
- 内存模型
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
- IOC做了什么?如何实现IOC,什么时候注入,如何注入;(参考博文 博文1)
- Spring 依赖注入 IOC 如何管理事务 基于数据库事务
- 重要组件:BeanFactory FactoryBean BeanDenfincation?
- 六大组成部分:AOP
- SpringBoot 和普通Spring区别
- 启动流程,bean加载,初始化
- 源码
- @Transaction实现原理 Spring事务是基于MySQL的事务,如何实现的
- 一个接口多个实现 有几种方式指定使用哪个;一个接口一个实现
- @Service
- set方式
- 构造函数
- Spring和mybatis组合在一起原理,接口实现类是如何生成
- Spring事务 回滚中用注解中一般的参数和类型
- 事务传播机制 七种
- Spring 隔离级别
- mybatis
- $和# 区别
- resultType resultMap区别
- 和SpringData区别
- mybatis 和 ibatis 区别
- mybatis-plus
- mybatis 和 hibernate 区别
- 学习成本
- ORM mybatis 自定义sql hibernate 封装比较好,迁移改动少
- hibernate 多对多
- ssm优势
缓存
Redis(Redis实战系列 参考博文 博文1)
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集群
- 三主三从(cluster)(参考博文 博文1)
- 如何分片 分片用的什么算法 hash主要用哪种算法
- 主从+分片
- 重新加入一个机器节点,hash重新计算,如何控制;耗时多久
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共享缓存
数据库
调优
- 查看是否使用索引 explain 索引失效情况:like % 联合索引
- 索引 255 utf-8
- left join时先缩小范围
- 索引快的原理(参考博文 博文1)
char和varchar区别
缓存框架:Redis;雪崩效应;缓存击穿-解决方案:如果没有则放缓存中空也放到redis,有一定失效
文件FastDFS和数据库
数据隔离
- 不可重复读
- 序列化
mycat数据库分片(MyCat高可用探索)
多租户 三种实现(多租户方案)
- 库级别实现
表级别实现:表中一个字段来区分
- Schema级别
读写分离(数据库主从延迟导致数据不一致)
- 主从复制
分库分表方式:
- 按列进行分竖向分
- 按行进行分横向分 按地域中查询所有库中的数据,地域组合起来mysql 行级锁 update、select、select for update
MySQL 隔离级别(参考博文 博文1)
脏读 不可重复读 幻读 读 写 读未提交 是 是 是 行级共享锁-事务结束 读已提交 否 是 是 行级共享锁-读完结束 行级排他锁-事务结束 可重复读 否 否 是 行级共享锁-事务结束 行级排他锁-事务结束 串行化 否 否 否 表级共享锁-事务结束 表级排他锁-事务结束 哪种级别可以实现悲观锁 悲观锁,乐观锁
事务
sql执行过程(参考博文)
面向对象
抽象类和接口区别
历史角度
业务中用实现 继承
设计模式(设计模式系列)
- 实际用过什么设计模式
- 策略模式
- 单例模式(手写,饿汉,懒汉[双重判定])参考博文
- 代理模式-aop:jdk基于,cglib基于;举例子;AOP源码 动态代理+反射
中间件&架构
最熟的中间件及原理
遇到什么问题
分布式锁(Redis锁接口防刷 Redis锁接口防刷升级版 参考博文)
- redis(Redis实战系列)
- zk
- 数据库(数据库系列)
- etcd
微服务
- SpringCloud
- hystrix(参考博文 博文1)
- Dubbo
- 负载均衡策略(参考博文)
- 微服务通信协议
- 注册中心
- Eureka(参考博文)
- Nacos
- Zookeeper(Dubbo)
- Etcd
- 配置中心
- Apollo
- Nacos
- DisConf
- 网关
- SpringCloud Gateway
- zuul
- 限流,熔断
- Hystrix
- Sentinel
- 灰度发布(灰度实战系列)
- SpringCloud
分布式事务
- 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(参考博文)
- 分类
- RabbitMQ(参考博文)
- RocketMQ
- Kafka(参考博文)
- RocketMQ 比 RabbitMQ有什么优点
- RabbitMQ五种对应形式 一对一,一对多,
- 消息发送 消费者接收 监听是如何实现
- 消息如何被重复调用 如何保证一个MQ消息只能被一个消费者消费
- RocketMQ 幂等解决方案,通过生成传递过来UUID
- RabbitMQ
- AMQP协议
- 实现发布订阅
- 交换机绑定三个队列
- 放里面数据
- 系统用MQ场景
- 现金贷下订单,延迟过风控(延时任务指南)
- 对接cashcash第三方数据
- 竞价项目延迟
- 分类
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等框架
一些参考
- 人工智能教程
- https://github.com/yessimida/interview-of-legends
总结
- 看似是孤立的技术点,其实是一个合格程序员的技术体系的提炼;
- 本文核心是指出一个技术体系参考大纲及一些好的参考资料,并没有给出每部分具体内容,每部分内容需要大家能够积极主动自己去查资料去做更加深入的探索
面试指南(二):想跳槽,这些技术点你会了吗?相关推荐
- 面试指南(一):想跳槽,你真的做好准备了吗?
前言 在2021年初的时候进行了年终复盘,发现当下工作未能满足自己当前阶段的成长,由此萌生换工作的想法 本篇博文为大家分享下这次换工作自己从准备到最终入职:自己的一些经历,供大家借鉴 温馨提示:以下内 ...
- 面试指南(三):想跳槽,这些问题你会了吗?
前言 面试指南一和二中为大家分享了换工作原因,背后思考,以及我珍藏多年的压箱底的技术体系: 本篇博文继续为大家带来面试过程中哪些灵魂拷问: 郑重声明:这些面试问题并不是为了让大家在面试前进行突击,而是 ...
- 【日照百度推广seo】想要转行做SEO?《SEO面试指南》拿去!
[ 日照百度推广seo]想要转行做SEO?<SEO面试指南>拿去!又到了一年一度的毕业季,不少同学发现学了四年的专业特别不好找工作,怎么办?当然是换换换专业,不换专业难道要等着毕业即失业吗 ...
- 阿里技术团队编写的对标金九银十大厂面试指南又在 git 上火了
前言 又要到金九银十了,每年 9.10 月份各大互联网公司都会周期性地发生人事变动,无论是刚进社会的职场小白,还是准备跳槽的"外卖员",都会争取在这个时候获得新工作,或迎来晋升涨薪 ...
- 硬核干货合集!500+篇Java干货技术文章整理|资源|书单|工具|面试指南|强烈建议打开!
今天给大家推荐一位在阿里做Java的朋友给大家,他是公众号[程序员书单]的作者黄小斜. 他的公众号[程序员书单]这两年来累积了200多篇优质原创文章,独家原创的系列文章有<五分钟学编程>系 ...
- 想去Google做AI?先看完这套面试指南(附面试题)
作者 | 阿司匹林 出品 | 人工智能头条(公众号ID:AI_Thinker) 凭借强大的技术实力和良好的工作氛围,Google 对求职者一直有着强大吸引力. 虽然 Google 在几年前就已经 ...
- 会议指南二维码生成_包装和准备技术会议的指南
会议指南二维码生成 北半球的春天如雨后春笋般涌现,这意味着技术会议季节即将来临. LinuxFest Northwest , OSCON , OpenStack Summit , Write Docs ...
- 【大疆DJI】安卓开发实习历程- 0.前期准备到面试(HR电话初面+技术一面+技术二面/终面+OC)
目录 前言 实习选择 0. 腾讯云 1. 面试复盘 2. 海投简历 大疆HR电话初面 大疆技术一面 0. 面试形式 1. 问题准备 2. 面试经过(70 mins) 大疆技术二面(终面) 0. 面试形 ...
- 2019最新Java程序员面试指南——HR的套路+Java常见技术点
本文转载自:2019最新Java程序员面试指南--HR的套路+Java常见技术点 面试是件既简单又复杂的事情,也正是因为简单和复杂的两面性,所以Java程序员在面试的时候要多学些面试技巧,当然技术也不 ...
最新文章
- php对图像的各种处理函数代码小结
- Oracle查询优化-03操作多个表
- 数据中心基础设施运维是什么?
- MySQL高可靠_MySQL高可用与高可靠架构
- SAP BTP 上使用 Mobile Back-End Tools(MBT)进行全栈开发的方法概述
- Jackson用法详解
- sympy 求微分方程_Sympy笔记一
- 变色龙配置文件功能介绍
- 安全基础:0-day漏洞
- dbf是什么文件格式
- requests结果显示“请开启JavaScript并刷新该页”,selenium不用cookie解决
- C#学校有近千名学生,在操作上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数。
- Python3 计算空气质量指数AQI
- spring boot日志配置文件(彩色日志)logback-spring.xml
- Meta Reality Labs:理想的VR头显还需克服这10项技术挑战
- WPS 广告关闭 如何取消WPS的广告? 关闭弹窗-热点-广告推送
- js【详解】arr.splice() 数组拼接
- (java)socket全双工长连接通信实例
- php fpm 命令行,php-fpm的命令使用
- 机器学习之神经网络图解,生动形象
热门文章
- 为什么程序员愿意加入管理糟糕的创业公司?
- AI 研究人员收入超过百万美元!
- 如何利用计算机系统原理做文件保护,计算机系统设计原理(影印版).docx
- 帝国php数据库备份,解决帝国cms帝国数据库备份王php5.3下500错误
- 满满干货!mysql定时任务每天固定时间执行
- 如何用分库分表的9种分布式主键ID生成方案?附小技巧
- 2008年卫星地图_黄河入海口1984年-2016年,34年卫星地图变化
- 航季日期的过去+java_Java 将一段时间以周、月、季分割
- Java harddisk pc cpu,java获得cpu使用率
- fpga驱动oled iic显示代码_Arduino提高篇02—OLED屏汉字显示