面试指南:想跳槽,这些技术点你会了吗?

Posted 当年的春天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试指南:想跳槽,这些技术点你会了吗?相关的知识,希望对你有一定的参考价值。

前言

  • 面试指南一中着重为大家分享了我换工作原因以及自己的目标,其中很重要的一点是需要制定一个计划,本篇博文就为大家分享我准备的计划核心内容—技术点;
  • 本篇博文继续为大家带来技术干货,分享我珍藏多年的压箱底的技术点
    看似是技术点,传起来是构建一个技术人的技术体系,希望能帮助广大的技术人

面试指南系列

这些技术点你会了吗?

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)

    • 在项目中应用-抽题

    • 举例

    • 解决并发

    • 死锁 百分之百死锁

    • 程序中实现

    • 应用场景,难点在什么地方,如何实现

  • Jvm(参考博文

    • 内存模型
      • 堆(为什么要分新生代(s0,s1,eden区),老生代)
        • 新生代(s0 s1 eden)
        • 老年代
        • 新生代->老年代 两种触发:一种是年龄超过16,一种是直接来大对象
      • 程序计数器
      • 方法区
    • 堆栈对应,在栈中存放的值是堆的地址
    • 垃圾收集器(参考博文)
      • 回收算法-区分新生代 (复制算法) 老年代(标记整理)
      • 标记清除
      • 标记整理
      • 复制算法
      • 标记垃圾的两种方式(参考博文)
        • 引用计数法 jdk1.2之前 循环引用问题
        • 标记计数-可达性分析 GCRoot
      • 什么时候触发垃圾回收:空间不足时触发,如果还不够会报OOM
    • 软引用
  • IO NIO BIO(参考博文)

  • 反射

  • 远程调用原理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数据类型

    • 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锁接口防刷升级版 参考博文

  • 微服务

  • 分布式事务

    • 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选举功能,如何选举:启动时选举 主的作用:主的负责操作数据结点(增删改) 并同步给副的
  • 单点登录

    • shiro
    • cas
    • 认证授权
  • 架构中负责点

  • 通用mapper(参考博文)

  • 日志处理

  • 异常设计

  • MQ(参考博文

    • 分类
    • 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;
      
    

算法

工具

  • 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自动化测试框架设计,你会了吗?

字节软测面试必问的Selenium自动化测试框架设计,你会了吗?

python经典面试题:想找工作?这些面试题你会了吗?

面试指南:想跳槽,你真的做好准备了吗?

关于​SparkHadoop​Hive,这些知识点你会了吗?干货放送!