# javaInterviewCollect
**Repository Path**: huanzhidadi/java-interview-collect
## Basic Information
- **Project Name**: javaInterviewCollect
- **Description**: 用代码实现一些面试题,通过运行过程和结果对理解文字起到一些帮助,增强面试题对实际工作的实用性。
- **Primary Language**: Java
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 18
- **Forks**: 2
- **Created**: 2023-03-10
- **Last Updated**: 2025-03-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# javaInterviewCollect
#### 介绍
用代码实现一些面试题,通过运行过程和结果对理解文字起到一些帮助,增强面试题对实际工作的指导意义。
#### 模块导航
##### canal -- canal从mysql数据库中同步数据至tcp或rabbitmq
UserHandler -- canal从mysql数据库中获取数据,对外提供tcp,SpringBoot通过@CanalTable(value = "xxx")注解对指定表进行监听
CanalReceiver -- canal从mysql数据库中同步数据至RabbitMQ,需注释掉tcp连接canal的相关配置和文件
##### dbInit -- 启动后自动创建表结构
在sping.sql.init下配置初始化表结构,配置好数据库连接后,启动DBInitApplication即可看到效果
##### es -- ElasticSearch索引和文档基本操作
在test目录下测试相关操作:
IndexTests -- 索引相关操作
DocumentTests -- 文档相关操作
SearchTests -- 文档查询相关操作
##### feignService -- Feign请求服务端
关联springSecurity模块的TestController
springsecurity模块在调用feign接口时通过FeignConfiguration的apply方法的template.header()传递token
feignService模块在UserContextInterceptor的preHandle方法中获取springsecurity模块传递是token信息,解析获取用户信息后
存入UserContextHolder中
##### gateway -- 网关模块,实现knife4j网关聚合
需要在application.yml的spring.cloud.gateway.routes下配置想要聚合的服务
然后通过SwaggerResourceConfig类初始化SwaggerResource列表
##### hystrix -- 熔断器示例
hystrix-provider -- 服务提供者
hystrix-consumer -- 基于@HystrixCommand实现服务降级
hystrix-feign-consumer-sb231 -- 基于springboot2.3.1基础上feign接口实现的熔断和降级
hystrix-feign-consumer-sb279 -- 基于springboot2.7.9基础上feign接口实现的熔断和降级
ServiceInstanceCache -- Caffeine本地缓存nacos实例列表的简单示例
##### java8InAction -- 对《Java8实战》书中的各种例子进行一下回顾
##### jsoup -- 网络爬虫,网页解析工具
HtmlParseUtil -- 爬取京东搜索页面的信息
CrawlerUtil -- 一个简单的爬虫框架
##### logAspect -- SpringAOP实现方法和类级别的日志收集
LogMethodController -- 方法级日志收集
LogClassController -- 类级日志收集
LogThirdPartMethodController -- 记录调用第三方接口的日志
##### longId -- 超长的Long型id前端接收后末尾几位为0的解决方案
单个字段注解方式
@JsonSerialize(using=ToStringSerializer.class)
private Long id;
拦截器统一处理方式
新增WebJsonConverterConfig类,实现WebMvcConfigurer接口的configureMessageConverters方法
##### mockStatic -- 使用mockito对静态类添加单元测试
org.mockito
mockito-core
3.12.4
test
MockedStatic testUtilMockedStatic = mockStatic(TestUtil.class);
##### multiEnvWithMaven -- 通过Maven在打包时对环境配置进行修改
mvn clean package -- 不指定-P默认dev环境,从application-dev.yml读取配置信息
mvn clean package -Ptest -- 通过指定-P切换不同的环境配置,从application-test.yml读取配置信息
##### mybatis -- 通过自定义插件对默认全量查询增加limit限制
##### okhttp -- 通过okhttp3对外发送POST请求的示例
OkHttpUtils -- 一个okhttp3的get和post工具类
OkHttpUtilsTest -- OkHttpUtils的测试类
##### rabbitMQ -- RabbitMQ操作示例
RabbitMQSendController -- direct模式、topic模式、fanout模式、delay模式
OrderController -- 订单付款延迟队列模拟
seqQueue -- 使用x-single-active-consumer单活模式队列实现消息顺序接收
seqQueueWithRedis -- 使用redis实现消息顺序接收(有bug,消息数多了以后,redis的数据好像没有正确同步)
##### rateLimiter -- 流量控制示例
LeakyBucketRateLimiter -- 漏桶限流
TokenBucketRateLimiter -- 令牌桶限流
通过ControllerLimitAspect对所有controller接口进行拦截
使用Nacos config刷新流量控制参数
##### redisDemo -- redis示例
RedissonLock -- Redisson实现分布式锁
Redlock -- Redisson实现红锁
SeckillController -- 商品秒杀 用Redis与Lua预防库存超卖
##### rollback -- Spring事务回滚@Transactional演示和统一异常处理
MyCustomExceptionHandler -- 自定义异常
先在MySQL中新建rollback数据库
然后右键RollbackApplication执行
最后访问[Knife4j](http://localhost:8080/doc.html)
##### shardingjdbc -- shardingjdbc分库分表
shardingjdbc-read-write -- 读写分离
shardingjdbc-sharding -- 分库分表
##### single -- 一些简单的,不需要多模块交互的一些示例代码
atomicinteger -- 并发场景下计数
collection -- 集合类的操作
compare -- 实现排序的两种方式
completablefuture -- 异步线程编排
daemon -- 守护线程
date -- 日期时间的一些使用方法
delayquit -- 使用DelayQueue实现用户退出信息获取
duotai -- 多态
enums -- 枚举
finals -- final声明属性
lambda -- lambda示例
listmapfind -- List和Map元素查询速度比较
menutree -- 递归查询子节点的方式构建菜单树
overloadandoverride -- 重载和重写
parentsubclass -- 父类和子类代码执行顺序
produceconsumer -- 实现生产者和消费者的三种方式
proxy -- 两种常见的动态代理
randomarray -- 从数组中随机获取元素
sanmu -- 三目运算符
stringformat -- 格式化字符串的几种方法
stringintern -- String.intern()
stringlock -- synchronized修饰代码块锁字符串常量
thread -- 多线程
order -- 三种控制线程顺序执行的方法
ExtendsThreadTest -- 继承Thread类的方式
ImplementRunnableTest -- 实现Runnable接口
ImplementCallableTest -- 实现Callable接口
LambdaThreadTest -- Lambda表达式实现多线程
ThreadPoolExecutorTest -- 线程池执行多线程
ScheduleExecutorTest -- 延迟不循环执行任务的线程池
ScheduleAtFixedRateTest -- 延迟且循环执行任务的线程池
ScheduleWithFixedDelayTest -- 延迟且循环执行任务的线程池
threadlocal -- 同步控制和ThreadLocal
utils -- 一些用到的工具类
##### singleWeb -- 一些简单的,不需要多模块交互的Web示例代码
YamlMultiValue -- 使用@ConfigurationProperties从yml配置文件中获取数据
YamlSingleValue -- 使用@Value从yml配置文件中获取数据
delayqueue -- 延迟队列
fastjson -- Fastjson2相关
pageinfo -- pageInfo泛型转换示例,用于数据库返回类型和返回前端类型不同的场景
requestlist -- 接口入参使用List或数组的实现方式
##### springSecurity -- SpringSecurity认证操作示例,Feign请求客户端
TestController.transUserWithThread -- 子线程共享主线程的request对象,实现异步调用Feign接口
RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(), true);
ThreadPoolConfig -- executor.setTaskDecorator(new ContextTaskDecorator()); 解决父子线程间的数据共享
MySecurityExpression -- 实现对xxx:*:*格式的权限进行处理
##### tomcat -- tomcat最大连接数和最大等待数jmeter测试