- 博客(114)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 Java SPI的本质
Java SPI的本质1 没有SPI的时候在使用driver前,需要手动执行class.forName("com.mysql.jdbc.Drvier")加载类2 有SPI的时候(直接看DriverManager的代码)(1)用ServiceLoader加载所有Driver类,调用load方法只是清空了所有的providerspublic class DriverManager { static { load.
2022-09-11 14:54:07
325
原创 多线程编程遇到的一些问题
MapHashMap是非线程安全的,使用ConcurrentHashMap(注意key和value都不能为null)future1 future.get会阻塞线程,所以想要提速,把多个task提交放到List<Future>中,提交完后,循环调用future.get。更优雅的方式:Future<Boolean> future = fixedThreadPool.submit(new RecordWriterCallable(taskPluginCollec
2022-04-19 22:05:33
435
原创 如何全面了解一个JAVA应用
全面了解一个JAVA应用可以从下面5个步骤一步一步来,其中主流程 + 业务/功能架构对于初始了解系统是最关键的(其实我认为也是最重要的,因为技术上大家都能想到对应的方案,但是一个好的业务玩法活一个创新的业务玩法不是每个人都能想得到的):1 主流程 + 业务/功能架构2 应用架构3 系统架构和代码架构4 网络架构和部署架构5 核心细节/代码画图可以按照下面的步骤去画图:...
2022-03-27 08:17:33
794
原创 mac安装git采坑
Error: No similarly named formulae found.重装homebrew:cd /usr/local/Homebrew/Library/Taps/homebrew/rm -rf homebrew-coregit clone https://github.com/Homebrew/homebrew-core.gitfatal: unable to access 'https://github.com/Homebrew/homebrew-core.git/':
2022-03-20 04:37:54
498
原创 linux system load average
超线程超线程的原理是在单核CPU内有两个线程执行上下文(用于线程切换),可使单核cpu同时并行运行2个线程,性能比单核提升30%(Intel的数据)linux system load average1 linux的系统平均负载分为1 5 15分钟负载,根据你所需要的系统运行类型取对应的负载(例如:dolphinscheduler在负载选择调度器时,取的系统平均负载是1分钟负载)2 linux system load average的计算,所有cpu核数相加:(排队线程数+运行线程数)/
2022-02-28 17:30:06
831
原创 优雅关闭JAVA应用
1 linux kill命令:kill -15 pid,应用实现os的接口,os在杀掉应用进程时通知应用。kill -9 pid等同于系统宕机,直接强制杀掉应用。2 spring优雅关闭的原理就是利用JVM提供的钩子函数Runtime.getRuntime().addShutdownHook(Thread t);3 shutdown一般会做哪几件事1 回收资源(1)线程池(2)一些注册(dubbo的接口暴露注册)2 应用关闭的通知...
2021-10-18 11:02:46
183
原创 html转图片
方案1 HtmlToImage第三方jar包:只能转静态网页,js动态加载的网页没法做,而且样式失真2 selenium + chromedriver + chrome采用selenium + chromedriver + chrome的方案1 项目中用的
2021-07-06 18:09:04
402
原创 mac vmware centos7安装及ssh
vmware安装:https://snowdreams1006.github.io/tools/mac-install-vmware.htmlcentos安装:https://blog.youkuaiyun.com/vbirdbest/article/details/107375067ssh连接虚拟机:用Rayal TSX当ssh工具文件上传下载:mac终端中sftpstfp username@ip pwd:显示服务器目录 lpwd:显示本地目录 put xxx.xx get.xxx...
2021-07-03 19:17:12
183
原创 linux简单学习
linux目录结构1 boot:系统启动文件2 root和home/xxx:root是超级用户目录,home/xxx是普通用户目录3 sbin和bin:sbin是超级用户脚本存放目录,bin是普通用户脚本存放目录4 etc:配置文件目录5 usr:共享资源(应用程序和文件)linux文件属性1 文件权限(1)第一个字符d表示是文件夹(2)接下来是三组rwx(r-read w-write x-execute,如果没有权限则用-表示) :连续3组且顺序不变,分别..
2021-06-26 16:56:17
489
原创 dubbo限流和网关系统限流(rcp和restful)
dubbo是rpc远程调用,网关系统主要是HTTP协议。所以这两者限流资源点设计的原则跟其本身是啥有关。dubbo限流资源点是:调用方(服务id/名称)+ 服务提供方(服务id/名称 + 接口 + 方法)。网关限流资源点是:调用方(根据业务参数appid来或者其它)+ 服务提供方(rest地址(uri))...
2021-06-18 15:43:59
778
原创 NIO
IO操作到底是什么所有的系统I/O都分为两个阶段:等待就绪和操作。举例来说,读函数,分为等待系统可读和真正的读;同理,写函数分为等待网卡可以写和真正的写。等待数据就绪是空等,不占用CPU,但是耗时(相对于CPU操作来说);读/写操作是CPU进行memory copy,非常快。阻塞式什么阻塞是指:函数调用时没有得到返回时,当前线程被挂起(主动挂起)。同步函数和阻塞函数不是同一个意思:同步函数只是还没有返回,但是线程没有被挂起,线程还是活动的。阻塞和非阻塞、同步和异步1 有这几类概念
2021-05-25 12:16:07
118
原创 RocketMQ设计原理
设计模式发布订阅模式和生产消费模式路由机制1 NameServer存储broker注册的topic数据2 productor和cosumer从NameServer中获取topic数据,从而得知将消息发到哪个broker上3 nameserver和broke互相发送心跳包,注册topic数据和剔除不可用broker高可用机制1 producer发消息给broker,如果消息发送失败会采取两个措施:(1)一定时间内不发给该broker(消息发送失败的broker) (2)消息发送
2021-05-24 15:51:14
120
原创 mybatis核心设计简要了解
mybatis mapper接口的原理mybatis通过动态代理生成mapper接口的实现类mybatis缓存每执行一个sqlSession,mybatis会创建一个sqlSession,sqlSession的生命周期和线程的生命周期一样。每次查询完成后会将结果缓存,下次查询时mybatis通过statementId + 入参判断是否是同一次查询,入股是同一次查询则直接返回mybatis事务mybatis的数据库连接对象持有jdbc的connection对象,在connection操
2021-05-24 13:36:27
113
原创 volatile原理 + volatile在AQS框架中的应用
volatile的作用1 保证变量的可见性:1 当前线程变量改变后,强制刷新主内存(堆内存)变量 2 所有线程每次在使用变量时都从主内存中获取2 禁止指令重排:禁止操作系统对指令的优化重排序volatile使用实例:ReentrantLock非公平锁的state值(继承AQS)就是用volatile修饰的为啥AQS的state变量用volatile?普通变量不行吗?volatile + CAS实现非阻塞式线程同步:通过Syncronized的方式当然可以实现线程同步,但是消.
2021-05-23 22:33:15
376
原创 CAS操作的硬件指令
1 cas操作是为了避免阻塞式同步,阻塞式同步需要OS对线程进行挂起、唤醒,比较耗费资源。所以cas阻塞本质上非阻塞式同步2 cas如何实现非阻塞式同步:(1)将线程变量累加,然后与堆中的变量值进行比较,如果符合预期则更新堆中的变量值(2)如果不符合预期,将堆中变量赋值到线程变量(3)重复(1)3 cas是依托于硬件指令:jvm定义了8个原子操作,用于堆中变量和线程变量的赋值,我的猜测是CAS指令就是组合了8个原子操作其中4个。备注:说要cas操作就说不停地比较,其实...
2021-05-23 16:57:30
442
原创 分布式CAP理论
CAP理论的概念数据一致性 + 可用性 + 分区容错性在分布式系统中为什么只能保存P + C/A其中一个1 分区容错性必然存在:因为分布式系统中,节点之间必然会有不同,比如网络、服务器等等,所以在分布式系统中分区容错性是一定存在的2 数据一致性和可用性的选择:可用性的意思是如果数据出现了不一致的情况,返回异常;数据一致性指的是任何节点中的任何一次相同请求得到的结果是相同的,是指的数据的强一致性而不是最终一致性3 数据一致性的例子:数据库事务和乐观锁都是数据一致性的体现4 高可用
2021-05-23 15:13:58
356
1
原创 jvm配置
-Xms=2048m -Xmx=2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=851 堆最小和最大内存设置成一样:app启动后jvm申请xms大小的空间,不够但未达到xmx时会请求OS,这时会产生耗时;生产上一天机器只运行一个应用的话,不产.
2021-02-22 19:31:49
190
原创 [架构]业务(功能)架构、技术架构、物理部署架构
业务架构、技术架构、部署架构从不同角度描述系统的实现,各有侧重点也有相同之处:业务架构描述功能模块以及功能模块之间的关系,技术架构描述使用的技术,部署架构描述部署逻辑。1 业务架构:功能模块及功能模块之间的关系2 技术架构:用了哪些技术以及技术之前的关系3 部署架构:部署逻辑图参考:https://doc.mypaas.com.cn/paas/maps/deployment.html...
2020-11-15 10:49:48
8485
原创 [基础原理-OS]简单的计算机启动过程、CPU内存分配、jvm swap
一 计算机启动过程1 CPU的硬件结构(1)中央处理器作为运算使用(2)ROM:只读内存,存放着BIOS程序(2)RAM:可读可写的内存2 计算机启动过程(1)CPU通电 (2)执行ROM固定位置上的BIOS程序(3)BIOS执行各种引导程序(存储在外存,输入输出的驱动程序、操作系统引导程序)(4)BIOS将控制权交给操作系统(5)操作系统调度应用程序。问题1:为什么JVM不直接放到BIOS上,并获得控制权?控制权这是操作系统干的事,远比jvm复杂,所以jvm只是应用..
2020-11-14 18:47:56
283
原创 [基础原理-计算机网络]https证书校验、SSL加密、三次握手四次挥手
一 https证书校验(以httpclient为例)1 构造httpclient时,httpclient会加载jdk里面cacerts文件,cacerts文件包含上百个根证书,httpclient就是根据这些根证书校验服务端的证书。2 根证书如何校验服务端证书:根证书和服务端证书的关系相当于,一个服务器的服务端证书和客户端证书的关系。根证书相当于私钥,服务端证书相当于公钥。二 SSL加密ssl握手过程分为5步:1 客户端生成随机数clientRandom,以及支持的加密算法.
2020-11-12 20:42:25
548
原创 技术栈
[基础原理]:OS、计算机网络、数据结构与算法、数据库原理、设计模式[编程语言]:OOS、java language、jvm、java api、html/css/js/jsp/vue[第三方库及最佳实践][架构及最佳实践][业务]
2020-11-04 15:50:07
250
原创 dubbo、rpc、rest、zookeeper、mq、微服务概念
1 微服务包含dubbo、rpc、rest、zookeeper、mq这些所有,微服务解决的是:服务拆分2 服务拆分后引入了:服务间通信和服务治理的问题3 服务之间的通信RPC,dubbo、rest、mq是RPC的一种思想或者实现4 服务治理:庞大的微服务引入服务治理,zookeeper只是其中一种实现...
2020-10-27 20:08:53
417
C++编程连接错误LINK2001
2014-05-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人