许田丰

icon:phone 132-5652-4889|icon:email xtf0214@foxmail.com | 22岁 | 男 | 共青团员

icon:github xtf0214 | Java开发工程师

教育背景

郑州航空工业管理学院 - 本科 - 计算机科学与技术(2021.09-2025.07) 全日制本科

  • 荣誉奖项:ACM/ICPC程序设计竞赛银奖;蓝桥杯国赛二等奖;团体程序设计天梯赛全国总决赛铜奖;
  • 个人博客:tanphoon

专业技能

  • Java基础:具有扎实的Java基础,掌握集合、多线程、异常、反射、泛型等基础知识,阅读过ArrayList、HashMap等源码,了解其底层原理。
  • JVM:熟悉JVM虚拟机基本原理,包括JVM内存结构、调优参数、类加载机制、内存模型、双亲委派机制、垃圾回收等。
  • JUC:熟悉Java并发容器和锁,如ConcurrentHashMap、Synchronized等,掌握多线程、线程池、ThreadLocal、volatile、CAS、AQS、LOCK锁等原理。
  • 框架:掌握 Spring、SpringMVC、Mybatis、MybatisPlus、SpringBoot 等主流框架使用,熟悉SpringlOC、AOP原理。
  • 微服务:掌握SpringCloudAlibaba微服务相关技术,如Nacos、OpenFeign、Gateway等,有过将单体项目改造为微服务项目的实践。
  • RabbitMQ:熟练使用RabbitMQ消息中间件,如模型架构,消息确认机制等,能在具体业务中解决常见的消息丢失,消息堆积,顺序性,延迟消息等问题。
  • MySQL:熟练掌握MySQL增删改查操作,存储引擎、索引原理、乐观锁和悲观锁机制,了解分库分表和SQL调优等。
  • Redis:熟悉缓存中间件Redis的基本数据类型,持久化机制、内存淘汰策略、缓存击穿、缓存穿透,和缓存雪崩产生的原因和解决方案。
  • 设计模式:熟悉如单例、工厂、策略、责任链、代理、适配器等模式。工具:熟悉使用Maven、Docker、Git 和 Linux,有 Linux 下开发部署项目的实际经验。

项目经验

高性能RPC框架 -(2024.12 - 2025.1) 项目描述:开发者可以引l入SpringBoot Starter,通过注解和配置文件快速使用框架,像调用本地方法一样轻松调用远程服务;还支持通过SPI机制动态扩展序列化器、负载均衡器、重试和容错策略等。 技术栈:Java+Etcd+Vert.x 项目亮点:

  • 核心架构:包括消费方调用、序列化器、网络服务器、请求处理器、服务注册器模块。
  • 网络服务器:基于Vert.x的HTTP服务器,实现服务提供者和消费者的高性能网络通信。
  • 服务注册器:使用线程安全的ConcurrentHashMap存储本地服务注册信息,可以根据服务名称获取到对应实现类,并通过反射完成方法调用。
  • 序列化器:为便于扩展,编写通用的序列化器接口,并基于Java原生的Object和ByteArray输入输出流实现JdkSerializer序列化器,使得对象能够网络传输。
  • 请求处理器:基于Vert.x的Handler接口实现对请求的异步处理,将请求数据反序列化后,从服务注册器中找到服务实现类并通过反射机制调用。
  • 消费方调用:基于JDK动态代理+工厂模式实现,为指定服务接口类生成可发送HTTP请求的代理对象,实现远程方法的无感知调用。 在线评测系统OJ - (2024.9-2024.12) 项目介绍:编程题目在线评测系统。在系统前台,管理员可以创建、管理题目;用户可以自由搜索题目、阅读题目、编写并提交代码。在系统后端,能够根据管理员设定的题目测试用例在自主实现的代码沙箱中对代码进行编译运行、判断输出是否正确。其中,代码沙箱可以作为独立服务,提供给其他开发者使用。 技术栈:Spring Boot+Spring Cloud+Docker+Redis+MySQL+RabbitMQ 项目亮点:
  • 自主设计判题机模块的架构,定义了代码沙箱的抽象调用接口和多种实现类(比如远程/第三方代码沙箱),并通过静态工厂模式+Spring配置化的方式实现了对多种代码沙箱的灵活调用。
  • 使用JavaRuntime对象的exec方法实现了对Java程序的编译和执行,并通过Process类的输入流获取执行结果,实现了Java原生代码沙箱。
  • 为保证沙箱宿主机的稳定性,选用Docker隔离用户代码,使用DockerJava库创建容器隔离执行代码,并通过tty和Docker进行传参交互,从而实现了更安全的代码沙箱。
  • 为防止判题操作执行时间较长,系统选用异步的方式在题目服务中将用户提交id发送给RabbitMQ消息队列,并通过Direct交换机转发给判题队列,由异步更新提交状态。