许田丰
个人信息
学校:郑州航空工业管理学院 专业:计算机科学与技术
邮箱:xtf0214@foxmail.com 电话:132-5652-4889
荣誉奖项:ACM/ICPC程序设计竞赛银奖;蓝桥杯国赛二等奖;团体程序设计天梯赛全国总决赛铜奖;
专业技能
编程语言/框架/测试
- 具有扎实的Java基础,掌握集合、多线程、异常、反射、泛型等基础知识,阅读过ArrayList、HashMap等源码。
- 熟悉JVM虚拟机基本原理,包括JVM内存结构、调优参数、类加载机制、内存模型、双亲委派机制、垃圾回收等。
- 熟悉Java并发容器和锁,如ConcurrentHashMap、Synchronized等,掌握多线程、线程池、ThreadLocal、volatile、CAS、AQS、LOCK锁等原理。
- 掌握 Spring、SpringMVC、Mybatis、MybatisPlus、SpringBoot 等主流框架使用,熟悉SpringlOC、AOP原理。
- 熟悉软件测试的流程与生命周期包括需求分析、计划制定、用例编写等,了解白盒测试。
- 熟悉测试用例的设计方法,如等价类法、边界值法、判定表法等,熟练使用Xmind编写测试用例;
- 掌握Selenium,KRunner自动化测试框架的使用,根据测试用例编写出相应的自动化case。
- 熟悉常见测试工具的使用,例如Charles,Fiddler,Postman等实现代理或抓包。 数据库/网络/操作系统/中间件
- 熟练掌握MySQL增删改查操作,存储引擎、索引原理、乐观锁和悲观锁机制,了解分库分表和SQL调优等。
- 掌握计算机网络的基本原理,了解TCP,UDP,HTTP,HTTPS等协议,如TCP的三次握手和四次挥手;
- 熟悉缓存Redis的基本数据类型,持久化机制、内存淘汰策略、缓存击穿、缓存穿透,和缓存雪崩产生的原因和解决方案。
- 熟练使用RabbitMQ消息中间件,如模型架构,消息确认机制等,能在具体业务中解决常见的消息丢失,消息堆积,顺序性,延迟消息等问题。
- 熟悉使用Maven、Docker、Git和Linux,有Linux下开发部署项目的实际经验,了解Postman例如构造一些简单的请求,了解抓包工具Fiddler的使用;
项目经验
高性能RPC框架 -(2024.12 - 2025.1) 项目描述:开发者可以引入SpringBoot Starter,通过注解和配置文件快速使用框架,像调用本地方法一样轻松调用远程服务;还支持通过SPI机制动态扩展序列化器、负载均衡器、重试和容错策略等。 技术栈:Java+Etcd+Vert.x 项目亮点:
- 核心架构:包括消费方调用、序列化器、网络服务器、请求处理器、服务注册器模块。
- 服务注册器:使用线程安全的ConcurrentHashMap存储本地服务注册信息,可以根据服务名称获取到对应实现类,并通过反射完成方法调用。
- 序列化器:为便于扩展,编写通用的序列化器接口,并基于Java原生的Object和ByteArray输入输出流实现JdkSerializer序列化器,使得对象能够网络传输。
- 请求处理器:基于Vert.x的Handler接口实现对请求的异步处理,将请求数据反序列化后,从服务注册器中找到服务实现类并通过反射机制调用。
- 消费方调用:基于JDK动态代理+工厂模式实现,为指定服务接口类生成可发送HTTP请求的代理对象,实现远程方法的无感知调用。 在线评测系统OJ - (2024.9-2024.12) 项目介绍:编程题目在线评测系统。在系统前台,管理员可以创建、管理题目;用户可以自由搜索题目、阅读题目、编写并提交代码。在系统后端,能够根据管理员设定的题目测试用例在自主实现的代码沙箱中对代码进行编译运行、判断输出是否正确。其中,代码沙箱可以作为独立服务,提供给其他开发者使用。 技术栈:Spring Boot+Spring Cloud+Docker+Redis+MySQL+RabbitMQ 项目亮点:
- 自主设计判题机模块的架构,定义了代码沙箱的抽象调用接口和多种实现类(比如远程/第三方代码沙箱),并通过静态工厂模式+Spring配置化的方式实现了对多种代码沙箱的灵活调用。
- 使用Java Runtime对象的exec方法实现了对Java程序的编译和执行,并通过Process类的输入流获取执行结果,实现了Java原生代码沙箱。
- 为保证沙箱宿主机的稳定性,选用Docker隔离用户代码,使用Docker-Java库创建容器隔离执行代码,并通过tty和Docker进行传参交互,从而实现了更安全的代码沙箱。
- 为防止判题操作执行时间较长,系统选用异步的方式在题目服务中将用户提交id发送给RabbitMQ消息队列,并通过Direct交换机转发给判题队列,由异步更新提交状态。
- 项目测试:对博客项目撰写了测试用例,运用Selenium自动化测试对博客的各个界面所展示数据的正确性、登录功能、博客的的删除与发布、各个页面能否互相正确的跳转等进行了测试# 许田丰
个人信息
学校:郑州航空工业管理学院 专业:计算机科学与技术 邮箱:xtf0214@foxmail.com 电话:132-5652-4889 个人博客:tanphoon Github:xtf0214 荣誉奖项:ACM/ICPC程序设计竞赛银奖;蓝桥杯国赛二等奖;团体程序设计天梯赛全国总决赛铜奖;
专业技能
编程语言/框架/测试
- 具有扎实的Java基础,掌握集合、多线程、异常、反射、泛型等基础知识,阅读过ArrayList、HashMap等源码。
- 熟悉JVM虚拟机基本原理,包括JVM内存结构、调优参数、类加载机制、内存模型、双亲委派机制、垃圾回收等。
- 熟悉Java并发容器和锁,如ConcurrentHashMap、Synchronized等,掌握多线程、线程池、ThreadLocal、volatile、CAS、AQS、LOCK锁等原理。
- 掌握 Spring、SpringMVC、Mybatis、MybatisPlus、SpringBoot 等主流框架使用,熟悉SpringlOC、AOP原理。
- 熟悉软件测试的流程与生命周期包括需求分析、计划制定、用例编写等,了解白盒测试。
- 熟悉测试用例的设计方法,如等价类法、边界值法、判定表法等,熟练使用Xmind编写测试用例;
- 掌握Selenium,KRunner自动化测试框架的使用,根据测试用例编写出相应的自动化case。
- 熟悉常见测试工具的使用,例如Charles,Fiddler,Postman等实现代理或抓包。 数据库/网络/操作系统/中间件
- 熟练掌握MySQL增删改查操作,存储引擎、索引原理、乐观锁和悲观锁机制,了解分库分表和SQL调优等。
- 掌握计算机网络的基本原理,了解TCP,UDP,HTTP,HTTPS等协议,如TCP的三次握手和四次挥手;
- 熟悉缓存Redis的基本数据类型,持久化机制、内存淘汰策略、缓存击穿、缓存穿透,和缓存雪崩产生的原因和解决方案。
- 熟练使用RabbitMQ消息中间件,如模型架构,消息确认机制等,能在具体业务中解决常见的消息丢失,消息堆积,顺序性,延迟消息等问题。
- 熟悉使用Maven、Docker、Git和Linux,有Linux下开发部署项目的实际经验,了解Postman例如构造一些简单的请求,了解抓包工具Fiddler的使用;
项目经验
高性能RPC框架 -(2024.12 - 2025.1) 项目描述:开发者可以引入SpringBoot Starter,通过注解和配置文件快速使用框架,像调用本地方法一样轻松调用远程服务;还支持通过SPI机制动态扩展序列化器、负载均衡器、重试和容错策略等。 技术栈:Java+Etcd+Vert.x 项目亮点:
- 核心架构:包括消费方调用、序列化器、网络服务器、请求处理器、服务注册器模块。
- 服务注册器:使用线程安全的ConcurrentHashMap存储本地服务注册信息,可以根据服务名称获取到对应实现类,并通过反射完成方法调用。
- 序列化器:为便于扩展,编写通用的序列化器接口,并基于Java原生的Object和ByteArray输入输出流实现JdkSerializer序列化器,使得对象能够网络传输。
- 请求处理器:基于Vert.x的Handler接口实现对请求的异步处理,将请求数据反序列化后,从服务注册器中找到服务实现类并通过反射机制调用。
- 消费方调用:基于JDK动态代理+工厂模式实现,为指定服务接口类生成可发送HTTP请求的代理对象,实现远程方法的无感知调用。 在线评测系统OJ - (2024.9-2024.12) 项目介绍:编程题目在线评测系统。在系统前台,管理员可以创建、管理题目;用户可以自由搜索题目、阅读题目、编写并提交代码。在系统后端,能够根据管理员设定的题目测试用例在自主实现的代码沙箱中对代码进行编译运行、判断输出是否正确。其中,代码沙箱可以作为独立服务,提供给其他开发者使用。 技术栈:Spring Boot+Spring Cloud+Docker+Redis+MySQL+RabbitMQ 项目亮点:
- 自主设计判题机模块的架构,定义了代码沙箱的抽象调用接口和多种实现类(比如远程/第三方代码沙箱),并通过静态工厂模式+Spring配置化的方式实现了对多种代码沙箱的灵活调用。
- 使用Java Runtime对象的exec方法实现了对Java程序的编译和执行,并通过Process类的输入流获取执行结果,实现了Java原生代码沙箱。
- 为保证沙箱宿主机的稳定性,选用Docker隔离用户代码,使用Docker-Java库创建容器隔离执行代码,并通过tty和Docker进行传参交互,从而实现了更安全的代码沙箱。
- 为防止判题操作执行时间较长,系统选用异步的方式在题目服务中将用户提交id发送给RabbitMQ消息队列,并通过Direct交换机转发给判题队列,由异步更新提交状态。
- 项目测试:对博客项目撰写了测试用例,运用Selenium自动化测试对博客的各个界面所展示数据的正确性、登录功能、博客的的删除与发布、各个页面能否互相正确的跳转等进行了测试