# javaStudy **Repository Path**: zdpCode/java-study ## Basic Information - **Project Name**: javaStudy - **Description**: 自己的java学习代码 + 笔记 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 0 - **Created**: 2020-11-07 - **Last Updated**: 2023-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JavaStudy - 数据结构 - 计算机网络 tcp/ip socket - 操作系统 linux - 数据库 - Java基础 - Java集合 - Java多线程与并发 - JVM - Spring、Mybatis、SpringBoot,SpringCloud等框架 - Redis - Dubbo - Zookeeper - 消息队列 ---- - 一 Java基础 - - 一致性hash算法 - sleep和wait - 强软弱虚引用 - Arrays.sort原理 - 创建对象的方式 - 若hashcode方法永远返回1会产生什么结果 - 解决hash冲突的三种方法 - 为什么要重写hashCode()方法和equals()方法以及如何进行重写 - 动态代理 - sleep和wait的区别 - java 地址和值传递的例子 - Java序列化 - java NIO,java 多线程、线程池,java 网络编程解决并发量 - JDBC 连接的过程 ,手写 jdbc 连接过程 - 说出三个遇到过的程序报异常的情况 - socket 是靠什么协议支持的 - java io 用到什么设计模式 - serviable 的序列化,其中 uuid 的作用 - 什么情景下会用到反射 - 浅克隆与深克隆有什么区别,如何实现深克隆 - 反射能够使用私有的方法属性吗和底层原理? - 处理器指令优化有些什么考虑? - object 对象的常用方法 - Stack 和 ArrayList 的区别 - statement 和 prestatement 的区别 - 手写模拟实现一个阻塞队列 - util 包下有哪几种接口 - 很常见的 Nullpointerexception ,你是怎么排查的,怎么解决的; - 静态内部类和非静态内部类的区别是什么? - 怎么创建静态内部类和非静态内部类? - Xml 解析方式,原理优缺点 - 静态变量和全局变量的区别 - 二 Java集合 - - hashmap - treemap - 还了解除 util 其他包下的 List 吗? - CopyOnWriteArrayList - hashmap的jdk1.7和jdk1.8区别 - concurrenthashmap的jdk1.7和jdk1.8区别 - HashMap 实现原理,扩容因子过大过小的缺点,扩容过程 采用什么方法能保证每个 bucket 中的数据更均匀 解决冲突的方式,还有没有其他方式(全域哈希) - Collection 集合类中只能在 Iterator 中删除元素的原因 - ArrayList、LinkedList、Vector - ConcurrentHashMap 和 LinkedHashMap 差异和适用情形 - ConcurrentHashMap分段锁是如何实现,ConcurrentHashmap jdk1.8 访问的时候是怎么加锁的,插入的时候是怎么加锁的 访问不加 锁插入的时候对头结点加锁 - ArrayDeque 的使用场景 - ArrayBlockingQueue 源码 - hashmap 和 treemap 的区别 - rehash 过程 - HashMap 的负载因子,为什么容量为2^n - list,map,set 之间的区别 - 什么时候会用到 HashMap - 常见的线程安全的集合类 - 三 JVM - - 反射在jvm层面的实现 - jvm的方法区存什么? - JDK1.8 JVM方法区变成了什么,为什么这样做 - oom出现的原因 - Class.forName和ClassLoader的区别 - java对象信息分配 - java虚拟机ZGC详解 - java虚拟机CMS详解 - java虚拟机G1详解 - JVM tomcat 容器启动,jvm 加载情况描述 - 四 多线程并发 - - volitale使用场景 - 可重入锁,实现原理 - Java 无锁原理 - 讲讲多线程,多线程的同步方法 - synchronized原理 - reetrantlock - java 线程安全都体现在哪些方面 - 如果维护线程安全 如果想实现一个线程安全的队列,可以怎么实现? - Java多线程通信方式 - CountDownLatch、CyclicBarrier、Semaphore 用法总结 - juc下的内容 - AOS等并发相关面试题 - threadlocal - java 线程池达到提交上限的具体情况 ,线程池用法,Java 多线程,线程池有哪几类,每一类的差别 - 要你设计的话,如何实现一个线程池 - 线程池的类型,固定大小的线程池内部是如何实现的,等待队列是用了哪一个队列实现 线程池种类和工作流程 - 线程池使用了什么设计模式 - 线程池使用时一般要考虑哪些问题 - 线程池的配置 - Excutor 以及 Connector 的配置 - 五 Java框架(ssm) - hibernate - - Hibernate 的生成策略 - Hibernate 与 Mybatis 区别 - Mybatis原理 - mybatis执行select的过程 - mybatis有哪些executors - mybatis插件原理 - mybatis二级缓存 - spring&springmvc - - spring中的设计模式 - spring中bean的作用域 - BeanFactory和FactoryBean区别 - aspect的种类 - spring aop的实际应用 - spring实现多线程安全 - spring的bean的高并发安全问题 - ioc aop总结(概述性) - Spring 的加载流程,Spring 的源码中 Bean 的构造的流程 - Spring 事务源码,IOC 源码,AOP 源码 - spring 的作用及理解 事务怎么配置 - spring事务失效情况 - Spring 的 annotation 如何实现 - SpringMVC 工作原理 - 了解 SpringMVC 与 Struct2 区别 - springMVC 和 spring 是什么关系 - 项目中 Spring 的 IOC 和 AOP 具体怎么使用的 - spring mvc 底层实现原理 - 动态代理的原理 - 如果使用 spring mvc,那 post 请求跟 put 请求有什么区别啊;然后开始问 springmvc:描述从 tomcat 开始到 springmvc 返回到前端显示的整个流程,接着问 springmvc 中的 handlerMapping 的内部实现,然后又问 spring 中从载入 xml 文件到 getbean 整个流程,描述一遍 - 六 微服务(springboot等) - - springboot - springcloud - 七 数据结构 - - 二叉树相关 - 红黑树 - 八 数据库 - MySQL - - 数据库死锁问题 - hash索引和B+树索引的区别 - 可重复的原理MVCC - count(1)、count(*)、count(列名) - mysql的undo、redo、binlog的区别 - explain解释 - mysql分页查询优化 - sql注入 - 为什么用B+树 - sql执行流程 - 聚集索引与非聚集索引 - 覆盖索引 - sql总结 - 有人建议给每张表都建一个自增主键,这样做有什么优点跟缺点 - 对 MySQL 的了解,和 oracle 的区别 - 500万数字排序,内存只能容纳5万个,如何排序,如何优化? - 平时怎么写数据库的模糊查询(由字典树扯到模糊查询,前缀查询,例如“abc%”,还是索引策略的问题) - 数据库里有 10000000 条用户信息,需要给每位用户发送信息(必须发送成功),要求节省内存 - 项目中如何实现事务 - 数据库设计一般设计成第几范式 - mysql 用的什么版本 5.7 跟 5.6 有啥区别 - 提升 MySQL 安全性 - 问了一个这样的表(三个字段:姓名,id,分数)要求查出平均分大于 80 的 id 然后分数降序排序,然后经过提示用聚合函数 avg。 - 为什么 mysql 事务能保证失败回滚 - 主键索引底层的实现原理 - 经典的01索引问题? - 如何在长文本中快捷的筛选出你的名字? - 多列索引及最左前缀原则和其他使用场景 - 事务隔离级别 - 索引的最左前缀原则 - 数据库悲观锁怎么实现的 - 建表的原则 - 索引的内涵和用法 - 给了两条 SQL 语句,让根据这两条语句建索引(个人想法:主要考虑复合索引只能匹配前缀列的特点) - 那么我们来聊一下数据库。A 和 B 两个表做等值连接(Inner join) 怎么优化 - 数据库连接池的理解和优化 - Sql语句分组排序 - SQL语句的5个连接概念 - 数据库优化和架构(主要是主从分离和分库分表相关) - 分库分表 - 跨库join实现 - 探讨主从分离和分库分表相关 - 数据库中间件 - 读写分离在中间件的实现 - 限流 and 熔断 - 行锁适用场景 - Redis - - redis为什么快? - Redis 数据结构原理 - Redis 持久化机制 - Redis 的一致性哈希算法 - redis了解多少 - redis五种数据类型,当散列类型的 value 值非常大的时候怎么进行压缩 - 用redis怎么实现摇一摇与附近的人功能 - redis 主从复制过程 - Redis 如何解决 key 冲突 - redis 是怎么存储数据的 - redis 使用场景 - 九 计算机网络 - - cookie 禁用怎么办 - Netty new 实例化过程 - socket 实现过程,具体用的方法;怎么实现异步 socket. - 浏览器的缓存机制 - http相关问题 - TCP三次握手第三次握手时ACK丢失怎么办 - dns属于udp还是tcp,原因 - http的幂等性 - 建立连接的过程客户端跟服务端会交换什么信息(参考 TCP 报文结构) - 丢包如何解决重传的消耗 - traceroute 实现原理 - IO多路复用 - select 和 poll 区别? - 在不使用 WebSocket 情况下怎么实现服务器推送的一种方法 - 可以使用客户端定时刷新请求或者和 TCP 保持心跳连接实现。 - 查看磁盘读写吞吐量? - PING 位于哪一层 - 网络重定向,说下流程 - controller 怎么处理的请求:路由 - IP 地址分为几类,每类都代表什么,私网是哪些 - 十 操作系统 - - Java I/O 底层细节,注意是底层细节,而不是怎么用 - Java IO 模型(BIO,NIO 等) ,Tomcat 用的哪一种模型 - 当获取第一个获取锁之后,条件不满足需要释放锁应当怎么做? - 手写一个线程安全的生产者与消费者。 - 进程和线程调度方法 - linux - - linux查找命令 - 项目部署常见linux命令 - 进程文件里有哪些信息 - sed 和 awk 的区别 - linux查看进程并杀死的命令 - 有一个文件被锁住,如何查看锁住它的线程? - 如何查看一个文件第100行到150行的内容 - 如何查看进程消耗的资源 - 如何查看每个进程下的线程? - linux 如何查找文件 - select epoll等问题 - 十一 框架其他 - - Servlet 的 Filter 用的什么设计模式 - zookeeper 的常用功能,自己用它来做什么 - redis 的操作是不是原子操作 - 秒杀业务场景设计 - 如何设计淘宝秒杀系统(重点关注架构,比如数据一致性,数据库集群一致性哈希,缓存, 分库分表等等) - 对后台的优化有了解吗?比如负载均衡 - 对 Restful 了解 Restful 的认识,优点,以及和 soap 的区别 - lrucache 的基本原理 - 十二 设计模式 - - Java常见设计模式 - 十三 分布式 - - dubbo中的dubbo协议和http协议有什么区别? - 负载均衡 - 分布式锁的实现方式及优缺点 - CAP - 如何实现分布式缓存 - 十四 其他 - - Java 8 函数式编程 回调函数 - 函数式编程,面向对象之间区别 - Java 8 中 stream 迭代的优势和区别? - 同步等于可见性吗? - git底层数据结构 - 安全加密 - web安全问题