# 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测试