java我会什么?
一、并发编程
1、并发编程:jdk中的courren包只能够类实现(seamplore,CountDownLaunch,Pharse,CycliBarrier,CompletableFuture),AQS的原理,线程,线程同步(如何控制多个线程),锁(控制多个线程对一个数据结构并发),CAS,synchronized,voliatle,线程池
2、并发数据结构:concurrentHashMap,ArrayBlockIngQueue,LinkedBlockingQueue,PriorityBlockingQueue
并发编程能干什么?
主要就是在写代码的时候,多个线程需要控制同一个成员变量,才会出现,如果业务上没有这个场景,都可以不用考虑并发的case
实战:
在工作中,我用到比较多的一般使用spring容器,系统在启动的时候,如果需要往成员变量集合或者队列中注入对象,一般在启动时候完成,所有没有啥并发
一般在懒加载的时候是需要控制并发的,防止多次初始化一个对象。这种控制并发的代码一般在中间件中使用,因为涉及到操作成员变量操作的时候,就需要考虑。
假设没有线程池这个工具类,让你自己写的时候,你就需要思考如何实现这个池子,以及创建池子,创建线程是否超过总数,系统并发就来了。
目前在工作中使用更多的是分布式的锁,防止同一个请求连续请求2次,控制不住;
需要对一个文件追加数据,如果并发时候会报错,因为需要知道上一个位置?需要落一个任务,然后每次执行最新的一个,单机控制并发可以实现吗?不可以 需要落任务解决
二、类加载器
都知道基本原理,双亲委托,但是自己应该在哪些场景
1、数据订正工厂,使用自定义类加载器加载把业务上传的jar包,然后在写一个groovy脚本,上传,系统定时加载新的脚本,然后编译,且用指定的类加载器加载,做到类隔离
2、动态测试工具
三 、IO模型
BIO,NIO,AIO,io多路复用, 网络编程 reactor模式,单线程,多线程,多reactor的多线程模式,netty实现reactor模式。tcp的通信原理。java中nio可以实现io多路复用,太复杂使用netty;
自己写一个rpc的框架demo,主要涉及zk,序列化和反序列化(hession),动态代理,网络通信(netty)
做过一个将aws的base64图片转存在公司s3中,如何防止一次把所有数据加载到内存中。使用了commons-io的类,然后在获取流数据的时候,把前缀剔除,然后然后阶段之后进行commons-io的经过base64解码;然后在直接把这个流输出到s3中
一般需要把图片上传的文件服务器,不能占用太大的内存,因此都是流的存储
文件下载,比较low的就是查询出全部,然后文件输出下载。一般采用实时数仓的方式下载
营业执照的图片识别,可以自己训练模型,然后进行图片的识别,一般都是传递文件的地址,然后对方拉去数据,然后进行识别
发起http请求,一般使用okhttp,httpclient进行http的外围调用,主要控制超时时间。
rpc服务使用netty进行服务的监听
四、spi业务回掉机制
serviceLoader是java中比较常用的,C端业务想开发的好,那就扩展一定要设计好,就一个原则面向接口编程,一般都是要定以后业务身份,Map<String,Map<String,Extend>> 在你的系统定义好接口,外围实现这个jar包,自己的系统使用serviceLoader加载这些jar包 到内存中
一个系统是否扩展,主要就是一个接口的实现不要在系统启动的时候注入好,而是在运行的时候动态的决策走哪个?怎么实现
1、定义数据结构Map<String,Map<String,接口>> 运行的根据传入的参数,自然会找到对应的实现类
2、针对接口系统启动的时候注入一个动态代理,运行的时候写逻辑决策走哪个业务身份
3、一个接口定义标准,然后spi回掉外围,还可以使用rpc的方式进行调用,下游实现
五、面向对象的基本想法
DDD设计(就是把方法放到一个类中,不好理解,后续很难维护)、多态(父类的对象指向子类的引用),设计模式一定要多使用,否则业务代码很难扩展也很容易出问题,策略,工厂,构建者,单例,抽象工厂,动态代理,模版,装饰,适配器
六、中间件
springboot,mybatis,docker,netty,xxxjob,zk,redis,配置中心,kafka,rocketmq,hbase,mysql,hadoop,hive,postgresql
七、大数据开发
了解hadoop的生态系统,hdfs,mapreduce,hbase
实时计算 flink,storm
数据同步 datax,sqoop,cancel
八:数据挖掘、数仓搭建
基本的机器学习算法、分类、聚类、神经网络、深度学习
llm大模型,langchain二次开发,rag
算法平台、数仓搭建
八、最值钱的就是业务
此处省略1w字
九、前端
h5、小程序主流
低代码开发平台,动态化、报表系统
后续想做一些基础系统的能力