1. 面向对象的特征?封装、继承、多态

    封装:
    a. 隐藏复杂的实现细节,暴露简单的使用方法。 (必须说)
    b. 保护数据
    c. 提到代码重用性
    d. 隔离变化

    继承:
    a. 提高代码重用性, 把子类的共性上提到父类中。比如:List AbstractList ArrayList LinkedList
    b. 多态的前提。

    多态:
    a. 多态的前提:继承
    b. 多态的体现:向上转型
    c. 多态的作用:提高代码扩展性(重点解释: 举例子, 说自己的总结)
    d. 多态的限制:向上转型发生时,子类独有的属性和方法无法访问。

  2. JDK1.8的新特性?(重点是Lambda)Lambda (举例子)
    LocalDateTime、LocalDate
    接口中的方法有默认实现
  3. 你知道的Java的关键字?
  4. static关键字的理解?
  5. 静态方法是否能被继承?静态方法是否能被重写?静态方法不能被重写,但可以被子类继承。
  6. Get和Post请求方式的区别?Get把请求参数,放在请求行中(地址栏); Post把请求参数放在请求体中。
    Get只能传输少量数据;Post可以传输大量数据(文件上传必须使用Post)
    Restful中,get用于查询,post用于增加 (put用于修改, delete用于删除)
  7. Cookie和Session的区别?Cookie是存放于浏览器端的,Session是存放于服务器端的
    Cookie存放数据是由大小限制,一个Cookie最大不能超过4k。Session没有大小限制。
    Cookie其实是Session的一种实现方式。

  8. 你对Maven的理解?Maven就两个作用:a. 依赖管理 b. 项目构建
    Maven如何解决依赖冲突? 第一声名者优先, 路径短者优先。
  9. String都有哪些常用的方法?
  10. String类的split方法的作用?返回值是什么?
  11. String s = new String("abc");创建了几个String对象?
  12. 同步和异步的区别?在Java中,
    同步表示一段代码,只能串行执行 t1 t2 t3 synchronized() { 临界区 }
    异步表示一段代码,可以并行执行

    在操作系统级别:
    同步表示,线程调用了一个方法,该方法没有返回,阻塞了,线程不断地自旋地主动去获取调用的结果。
    异步表示,线程调用了一个方法,该方法没有返回,阻塞了,线程也不主动要结果,而是结果准备好以后,直接引起回调函数执行,回调函数的参数就是函数的结果。
  13. Mybatis缓存的理解?
  14. Mybatis中,动态sql标签有哪些?
  15. Mybatis级联查询如何实现?<select id="findAllDept" resultMap="rm" >
    select * from dept join emp
    on dept.dept_id = emp.dept_id
    where dept_id = #{dept_id}
    </select>
    <resultMap id="rm" type="Dept">
    <id column="dept_id" property="dpetId"></id>
    <result column="dept_name" property="deptName"></result>
    <collection ofType="Emp">
    <id column="emp_id" property="empId"></id>
    <result column="emp_name" property="empName"></result>
    </collection>
    </resultMap>
  16. Mybiats如何实现批量插入?insert into user values
    <foreach collectinotallow="list" item="user" separator=",">
    (#{user.id}, #{user.name}, #{user.age})
    </foreach>
  17. 你对Mybatis拦截器的理解?Mybatis拦截器只能拦截器4个固定的地方: Executor、StatementHandler、ParameterHandler、ResultSetHandler
    发散:PageHelper, PageHelper会把当前页数,每页显示行数存放到ThreadLocal中,StatementHandler会拦截查询语句,并且检测ThreadLocal中是否有分页数据,如果有,就在原始的sql语句后面拼接limit子句。 拼接完成以后,ThreadLocal中存放的分页数据就要删除掉。这就是为什么,PageHelper.start(1, 5)其后必须紧跟着 查询。
  18. ${ }和#{ }的区别?什么时候使用${ } ?${} 是字符串拼接操作, 有Sql注入漏洞问题
    #{} 底层是PreparedStatement,避免Sql注入漏洞。

    SQL注入漏洞就是: select * from user where username = ${a} and password = ${b};
    如果填入的值是:
    select * from user where username = ${a} and password = 1 or 1 < 2;

    既然${}有sql注入漏洞,为什么还需要${} ,什么时候使用 ${ }
    select * from ${a} limit ${b}, ${c}
  19. linux常用命令?rz 上传文件 tar -zxvf cd vi systemctl start 服务器 firewall-cmd --add-port=8888/tcp --permanent
    firewall-cmd --reload firewall-cmd --list-ports yum install -y
    chmod 777
  20. linux中如何查询日志?tail -F my.log
  21. 你对docker的理解?两句口号:
    容器--> docker commit --> 镜像 --> docker save -o 1.tar --> 传tar --> docker load -i 1.tar ---> docker run
    容器--> docker commit --> 镜像 --> docker push --> docker pull --> docker run

    build once , run anywhere.
    三大概念:镜像(环境+应用) 容器(精简版的操作系统,运行这应用) 仓库(镜像的仓库,docker push, docker pull)
  22. 说几个docker命令docker search docker pull docker images docker run -d -p -v a:1.0 命令
    docke ps docker ps -a docker restart 容器id docker stop docker rm docker rmi docker rm -f
    docker commit docker save -o 1.tar docker load -i docker history docker logs -f
  23. 常用的git命令git init git add git commit git logs git reset --hard git reflog git branch abc git checkout git checkout -b
    git merge git push git pull git fetch git revert git amend
  24. 如何实现分页(PageHelper)PageHelper原理: Mybatis拦截器 (StatementHandler)+ ThreadLocal。
  25. 手写分页?select * from user limit 5, 10。
  26. RabbitMq如何保证消息的可靠性?(RabbitMq如何保证消息100%可靠)a. 生产者确认
    b. 消息持久化
    c. 消费者确认
  27. RabbitMq如何保证消息的幂等性?幂等性:多次发送同一个业务请求,只有第一次是有效果的,后面发送的都不会有效果。比如订单的重复发送。
    实现:在订单如何之前,生成一个唯一的业务id。 这个业务id随着业务数据一起入库。 每次入库之前,先判断库中是否已经有该业务id,如果有,则不执行业务,如果没有,则执行业务。
  28. RabbitMq如何保证消息的顺序性?如果生产者投递消息的速度远远大于消费者消费消息的速度,则会造成消息积压的情况。所以才需要一个队列有多个消费者。
    此时带来的问题就是,消息的顺序无法保证。举例子:1 2 3 4 5 6 C1(1,3,5) C2(2,4,6)。
    a. 一个队列只能有一个消费者。 但是这又会造成消息积压。
    b. 一个队列只有一个消费者,该消费者,按照每个消息的业务流水号,把消息分别放入不同的List中, 然后该消费者中同时开启多个线程, 每个线程处理一个List中的消息。
  29. RabbitMq如何实现分布式事务?
  30. RabbitMq中的相关概念,模型?生产者路由键 交换机 绑定队列 消费者
  31. Jdbc的执行顺序Class.forName("com.mysql.cj.jdbc.Driver");
    Coonection conn = DriverManager.getConnection();
    String sql = "....";
    PreparedStatement ps = conn.preapreStatement(sql);
    ps.setInt(1, 1);
    ps.setString(2, "abc");
    ResultSet rs = ps.exeucteQueruy(); // int rows = ps.executeUpdate();
    while(rs.next()) {
    rs.getInt();
    ...
    }
    rs.close();
    ps.close();
    conn.close();
  32. sql存储过程(了解)存储过程是可以在数据库层面,编写业务逻辑。 就可以保护核心业务。
    存储过程没有标准,所以每个数据库的存储过程语法各不相同。所以迁移性很差。
  33. 如何解决跨域?(绝杀题)同源策略:当两个url: 协议 + ip + 端口 都一致的时候,就是同源的。 只要不同源,那么就不能通信。
    CORS Gateway加一个配置: allowOrigin("*") allowHead("*") allowMethod("*").

    前端也能解决跨域:使用代理服务(还是后端的方式)
  34. @RequestMapping注解的作用?用在控制器方法上,做url映射。 默认允许各种请求方式:Get Post Put Delete。
    value指定映射的路径, method指定请求方式。
  35. @Transiational注解的属性?readonly = true ,只读事务。
    isolation, 指定事务隔离级别
    rollbackFor, 指定抛出什么样的异常,事务就会回滚
    noRollbackFor,指定抛出什么异常,不回滚
    propagation,指定事务的传播行为。
    REQUIRED 小事务和大事务融为一体。
    REQUIRES_NEW 小事务是独立的,某一个小事务回滚,不会影响大事务。
  36. Vue组件的生命周期?搜索Vue生命周期的流程图
  37. Vue组件生命周期中的8个钩子函数?beforeCreate created
    beforeMount mounted
    beforeUpdate updated
    beforeDistory distroted
    这些钩子函数都是扩展点。每个组件都需要做的一些功能,可以卸载钩子函数中。
  38. Vue中,v-if和v-show的区别?v-if是dom操作。
    v-show是样式操作: display: none
  39. Vue中,父子组件如何访问对方的属性和方法父子组件不能直接访问对方的属性和方法的
    子组件想访问父组件的属性: props: [ name ] <Zi :name="父组件属性名" ></Zi>
    子组件想访问父组件的方法: props: [f1] <Zi :f1="父组件方法 ></Zi>
    子组件想访问父组件的方法:子组件方法中:
    this.$emit("haha");
    父组件:
    <Zi :xx="msg" @haha="f1"></Zi>

    父组件想访问子组件的属性和方法: this.$refs.子组件标签ref的取值.子组件属性或方法
  40. Vuex的理解?
  41. Nginx的作用?(反向代理、动静分离,web服务器)正向代理:客户端能控制请求的目标服务器。存在于客户端
    反向代理:客户端无法控制请求到达的目标服务器。存在于服务器
    反向代理之下,有负载均衡策略:轮询权重轮询 平滑加权轮询算法。

    Nginx可以部署静态网站。 Nginx很适合部署静态资源,因为Nginx支持0拷贝。

  42. Java 8种基本类型 (不要混入String)byte short int long
    float double
    boolean char

    面试中,总会有盲区。不会不要慌。
  43. 什么时候用到自动拆箱。
  44. 权限表如何设计
  45. 重写和重载的区别
  46. final finally finalize的区别
  47. 数据结构了解多少
  48. 你熟悉的设计模式
  49. 工作流了解吗
  50. 常量池的理解?
  51. 你知道的GC算法
  52. JVM运行时数据区
  53. String和StringBuffer的区别
  54. StringBuffer和StringBuilder的区别
  55. 类加载器的双亲委派模型
  56. CAP理论是什么?
  57. Base理论是什么?
  58. 什么是服务雪崩?
  59. 什么是服务限流?
  60. 死信队列是什么?延时队列是什么?
  61. TCP的三次握手和四次挥手?
  62. 分布式id是什么,有哪些解决方案?
  63. JVM中,哪些是线程共享的区域?
  64. 你对序列化的理解?
  65. JVM中哪些对象可以作为GC Root?
  66. 大文件上传的解决方案?
  67. http和http2协议的区别?
  68. 两个float或者double的数据进行乘除运算怎么确保准确性
  69. 你对泛型的理解?
  70. Java泛型中的擦除是什么?
  71. 泛型中PECS原则是什么?
  72. 你熟悉的设计模式?
  73. 你知道的设计原则?
  74. linux中如何查看系统的版本?
  75. 如何查看dokcer容器的日志?
  76. ElasticSearch了解吗,说一下?
  77. 接口和抽象类的区别?
  78. JDK动态代理和CGLIB的区别?
  79. 面向对象的三大特征,分别解释一下?
  80. Linux怎么查看内存占用最大的进程?
  81. Linux怎么查看某个端口被谁占用着?
  82. 设计接口的时候会考虑什么?
  83. ==和equals的区别?
  84. lambda,*如何把一个List转换为Map
  85. Maven依赖冲突怎么解决
  86. 项目中一般如何处理异常
  87. 你平时是怎么学习的?
  88. 如何部署ElasticSearch?
  89. 给表中插入百万级数据,如何解决?