- 博客(43)
- 收藏
- 关注
原创 IO流--
java 中IO流是基础,包括文件IO,网络IO,控制台,数据库连接等。从流的格式分类上有:字节流过滤的字节流:可以进行压缩等改变字节的操作字符流(Reader,Writer)类图:由类图结构可以看到,SockertInputStream 继承了FileInputStream ,也属于一切皆文件的描述,可以使用fd创建流。FileChannel (通道)从流获取,Channel,Buffer 是NIO(new ) api来个代码例子,使用FileChannel ,公用同一个buffer,将一
2022-05-04 08:41:03
217
原创 idea 设置自定义代码块
重复的报警,还有日志的代码,太烦了,于是搜了下idea的自定义代码块,图文链接超好用添加链接描述settings --> Editor—>live Templates (可以加分组,加模版) ---->
2021-12-10 14:12:17
531
原创 深入理解JVM--线程
线程的实现线程有三种实现方式:1.使用内核线程实现(LWP)–KLT(1:1) 2.使用用户线程实现 (N:1)3.使用用户线程+轻量级进程混合实现(N:M)。使用内核线程实现LWP 是Light Weight Process , 不算事内核线程,广义上来说属于用户线程KLT (Kernel-Level Thread) 内核线程。1:1 的关系,完全使用轻量级进程,由内核创建调度,会有一定的开销。使用用户线程完成狭义上的用户线程(UT),完全在用户空间中,由应用程序完成创建,销毁,调度。开
2021-12-06 09:29:32
265
原创 阻塞/非阻塞,同步/异步IO
阻塞/非阻塞,同步/异步IO理解的概念:五种线程模型1.阻塞2.非阻塞3.I/O复用4.信号驱动5.异步IO理解的概念:阻塞/非阻塞是一种线程的状态;同步/异步是一种方法调用的实现方式。五种线程模型用户线程通过系统调用,获取socket 流信息,主要分两步,一是socket 数据准备,二是将准备好的数据由内核态复制到用户态,可供用户线程使用。1.阻塞2.非阻塞3.I/O复用I/O 复用是进程需要预先告知内核,内核一旦发现进城指定的一个或多个I/O条件就绪,它就通知进城的一种能力。4.
2021-11-14 11:50:21
665
原创 深入理解JMV---高效并发
一、JAVA内存模型1 内存模型目标:定义程序中 非栈中 各个变量的访问规则。和计算机的内存模型有点相似,这只是一个内存模型,并非真实存在,相对于堆,栈内存区域,并不是同一层次的划分。2 内存交互操作lock: 主存unlock: 主存read: 从主存读到线程工作内存write: 把store 后的变量放到主存中的变量中load: 把read 的变量值放到工作内存副本中store:工作内存 工作内存---->主存use: 工作内存 --> 执行引擎assign: 工作
2021-07-04 17:22:04
1926
2
原创 深入理解JVM---程序编译与代码优化
一、编译期优化*.java 转 *.class 的过程中的优化主要是解语法糖javac的编译动作主要在JavaCompiler中插入式注解处理器可以作为编译器的插件使用初始化过程在initProcessAnnotations() 方法中,执行过程在processAnnotations()中使用:javax.annotation.processing.AbstractProcessor 覆盖 process()方法从annotations中获取需要处理的注解集合,从roundEnv中获取到
2021-07-04 16:00:34
111
原创 深入理解JVM---虚拟机执行子系统
一、类机构**编译:**本地机器码------->字节码 .class分派:同步指令使用管程 Monitor方法级同步方法内部一段字领序列同步二、类加载程序执行,需要将字节码文件加载进入内存。参照之前的jvm内存模型,JVM内存模型与垃圾回收, 应该是先加载进方法区,创建实例对象的时候需要先定位类描述符。加载可以在编译期进行,也可以在运行期动态加载和动态连接。1 类加载时机类的生命周期:必须初始化的情况:new,getstatic,putstatic ,invokest
2021-07-04 13:12:52
163
1
原创 深入理解JVM---工具(性能监控,故障处理)
一、命令行工具1 jps使用ps也能查看,但是如果启动多个虚拟机进程的话,需要jps现实主类的功能来区分开2 jstatjvm Stastics Monitoring Tool显示 本地or远程 jvm进程中的类装载,内存,垃圾收集,JIT编译等运行数据jstat [option vmid [interval[s|ms] [count]] ]也可以使用VisualVm等可视化工具监视3 jinfo查看配置信息jinfo [option] pid4 jmapjmap (Memory M
2021-07-04 11:27:38
149
原创 Thread wait使用
闲来无事,看了下thread ,sleep方法写着不会释放任何锁,然后想起来Object的wait方法会释放锁,然后进行等待,直到notify调用。object必须在锁里,使用sychronized。那么就有一个问题,如果使用Lock呢? 看代码是conditionObject的wait的native方法,但是Condition的不是,在实现上的差别是什么呢?使用同步语句和使用Lock 的差别在哪里呢...
2021-06-15 21:27:05
524
原创 Thread状态实验
thread 是java非常重要的一个概念了,突然想到看一下线程的状态Thread类中有一个State 内部类,使用getState()方法就可以查看线程状态。状态有6种:NEW : 还没有开始的线程RUNNABLE :runnable的线程在jvm中是正在运行,但是有可能在等待操作系统的其他资源。例如处理器等。同步IO ,应该线程就是RUNNABLE,但是会等待OS的资源BLOCKED : 线程在等待锁 monitor。实践发现是 synchronized 会进入blockedWAITING
2021-06-11 07:33:06
248
原创 常用日期操作
最近常用到日期,整理一波非JDK8非jdk8 的主要用到Date, DateFormat, CalendarDateFormat 可用于格式转换,常用的也就是String ,long ,Date型Calendar 可用于一些计算,也提供了大量的静态类型供使用代码:import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Dat
2021-01-06 13:07:21
98
原创 MAC JDK15安装管理
1 下载对应tar包https://www.oracle.com/java/technologies/javase-jdk15-downloads.html官网下载对应tar包2 解压安装包sudo tar -zxf /Users/tt/Documents/software/jdk-15.0.1_osx-x64_bin.tar.gz -C /Library/Java/JavaVirtualMachines/3 查看jdk 安装版本/usr/libexec/java_home -V4 设置ja
2021-01-02 15:40:21
1612
1
原创 mac环境安装问题解决
1 brew 安装nodejs报错 No such keg: /usr/local/Cellar/nodebrew uninstall --force nodebrew cleanup -s nodebrew cleanup --prune-prefixbrew install node参考文档:stackover
2020-12-12 22:11:36
1094
2
原创 SpringBoot配置多线程池
1 设置properties 文件@Component@Data@ConfigurationProperties("thread-pool")public class ThreadPoolProperties { private int corePoolSize; private int maxPoolSize; private int queueCapacity; private int keepAliveSeconds; private String t
2020-12-12 09:23:05
607
原创 网络学习1--TCP
正式了解下网络相关基础知识,首先从TCP开始。TCP,transmission control Protocol , 是网络传输层的协议,关注了数据的安全,有续,关注连接建立,重传,超时。TCP连接建立:三路握手,也有说三次握手TCP连接关闭:TCP状态:TCP一次交互和状态:主动发起关闭的端有Time_wait状态,设计有两个原因:1 最后一个ack消息没有发送到,被动关闭端会再次发送FIN消息,最后一个ack消息需要重传2 time_wait时间是一个ip数据包在tcp连接中最长能
2020-11-21 23:55:04
108
2
原创 Netty 学习与实践
官网地址https://netty.io/wiki/user-guide-for-4.x.html#prefaceServer 与clienthandlerdecoder 和 encoder1. 引入官方文档写的:In a stream-based transport such as TCP/IP, received data is stored into a socket receive buffer. Unfortunately, the buffer of a stream-based t
2020-11-10 20:51:48
240
原创 EasyExcel使用
看见神器exsyExcel,正好有导出的需求,于是使用了下1 导入数据2 导出数据导出数据设置样式3 使用问题及解决:莫名其妙的$jacocoData@ExcelIgnorepublic Object $jacocoData;2)
2020-10-19 21:34:24
770
原创 Idea 好用插件及功能
1 查看字节码view --> show byteCode插件:jclasslib view --> show byteCode with jclasslib可以看常量池信息
2020-10-13 09:56:03
139
原创 Wireshark 使用
遇到的问题:The capture session could not be initiated on interface ‘rvi0’ (You don’t have permission to capture on that device).一种可以先关闭wireshark,在命令行输入sudo /Applications/Wireshark.app/Contents/MacOS/Wireshark
2020-10-11 09:05:12
173
原创 使用maven mybatis-generator自动生成代码
1 mavan 配置插件 <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.5</version>
2020-09-15 19:12:28
186
原创 git常用命令
1 给本地项目初始化:git init 多.git 文件夹2 增加远程地址:git remote add origin $url(增加完就可以push了)3 查看远程地址:git remote -v4 删除远程仓库:git remote rm origin5 设置名称git config --global user.name “你的名字或昵称”git config --global user.email “你的邮箱”6 git stash...
2020-08-26 09:39:16
96
原创 Mac配置环境变量
安装开发软件的实收需要配置环境变量open ~/.bash_profile编辑:eg:maven go 配置pathexport MAVEN_HOME=/Users/www/Documents/software/apache-maven-3.3.9GOROOT=/usr/local/goexport GOROOTexport GOBIN=$GOROOT/binexport PATH=PATH:PATH:PATH:MAVEN_HOME/bin:$GOBIN配置完之后应source ~/.ba
2020-08-24 12:53:42
310
原创 redis 报错记录
unexpected end of stream背景:想用jedis setnx 简单实现一个获取锁,释放锁的功能,用多线程进行验证时报unexpected end of stream解决:想了下,可能时因为多个线程用的同一个jedis 实例,在获取连接,传输数据时报错了,然后试了下,每个线程new 一个jedis实例,果然顺利的都获取锁,释放锁了,网上搜了下,也有类似的,有用框架的说要注意jedis注入使用单例的话,多个线程争抢可能会有问题引申问题:1 分布式锁一定要能释放,据说redis 有se
2020-07-25 19:51:38
151
原创 jvm参数及命令记录
参数设置:-XX:+PrintGCDetails -Xms24m -Xmx24m -Xmn8m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC命令:jmap -dump:format=b,file=/Users/wangxiaodi1/Desktop/jmapdump.hprof 75191在线分析:http://www.fastthread.iohttp://gceasy.iohttp://heaphero.io...
2020-07-18 22:10:53
243
原创 快排+归并排序
思路快排的基本思想就是每次找出一个数,使它前边的数都比它小,它后边的数都比它大,然后再按这个规律排前半部分和后半部分,依次递归。这个数可以随机取数组的任意一个数,实际就是找这个数在数组中的第几大,把比它小的换前边去,比他大的换后边去。code public static void quickSort(int[] nums,int l,int h){ if(l>=h) return; int index = findIndex(nums,l,h);
2020-07-18 07:58:30
115
原创 CompletableFuture使用
突然想看一下异步,想起之前用CompletableFuture ,记一下使用1 方法异步调用: CompletableFuture<Student> future1 = CompletableFuture.supplyAsync( ()->{ Service s = new Service(); return s.s1("1"); }
2020-07-13 18:53:00
147
原创 MySql报错记录
SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQLsql有错,用debug日志可以看到
2020-05-10 14:40:33
100
原创 FactoryBean
作用我理解的FactoryBean类似于Spring容器向外开放了一个途径,可以供开发者把想要自己创建对象放入Spring容器里,供后续使用FactoryBean 的主要方法public interface FactoryBean<T> { T getObject() throws Exception; Class<?> getObjectType(...
2020-03-24 10:35:05
90
原创 正则表达式
package com.regex;import java.util.regex.Pattern;/** * \为转义字符 普->非普 非普->原义 * 字符匹配 . 任意字符 \d 匹配数字 \w 包含数字和字符 \S 非空任何输入的 * 次数匹配 ?:0or1次 +:1+次 *:(0+)次 * 区间内选择:[1-999] [1,2,3] [1|2] * ...
2020-03-21 15:51:50
128
原创 数据库-切数据源的一个简单例子
这里写自定义目录标题切数据源基础配置文件spring配置数据源配置数据源路由mybatis配置dao 层编写数据源切换加上数据源的注解注解解析,设置数据源aop拦截器配置使用遗留问题切数据源当数据库需要使用读写分离的时候,需要根据读或者写方法切不同的数据源进行操作。使用的框架:Spring+mybatis数据源管理:DruidDataSource基础配置文件spring配置数据源配置...
2020-01-19 18:04:07
499
原创 源码----ThreadPool
自己实现一个简单的线程池假如要自己设计一个线程池,1 需要有一个存放线程的池化的数据结构,可以使用list或者set数据结构2 需要设置池化线程的大小,一个coreSize;3 需要一个执行的线程,worker是一个线程的实现,start之后可以执行任务4 需要一个队列,超出核心线程池的任务,放入队列等待执行代码:package poolTest;import java.util...
2020-01-01 22:52:06
95
原创 深入理解JVM---内存模型与垃圾回收
深入理解JVM虚拟机虚拟机内存模型内存分区内存异常内存调优GC判断对象已死垃圾回收算法垃圾收集器垃圾回收相关指令及调优虚拟机内存模型内存分区虚拟机主要分为共享的堆内存 和 每个线程独有的栈内存细分为 堆内存,方法区 虚拟机栈,程序计数器,本地方法栈堆内存:存放对象实例方法区:常量池 和 类方法等信息虚拟机栈:每个线程执行方法的栈帧(stack frame)信息,包括方法的局部变...
2019-12-23 23:07:56
243
原创 实践一次简单热加载
思路1 首先需要自定义一个ClassLoader,定义要加载的类的classPath,根据完全限定名进行calss加载2 需要定义一个被加载的类3 启动一个线程,不断将class文件加载进JVM,可以生成对象进行调用4 可以写一个类,或者自己手动编译对被加载的类进行编译5 3中启动线程的类,需要进行debug模式,才能看到效果。自定义的classLoaderpackage com.c...
2019-11-06 09:46:11
175
原创 js常用方法记录
单选框格式 #foreach($data in $map.entrySet()) <input type="radio" onchange="change()" name="v" value=${data.key} >${data.value}</input> #end设置初始化选中$('input:radio[...
2019-10-17 11:21:28
161
原创 Swagger2使用
pom引用 <!-- swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> ...
2019-10-16 15:55:12
143
原创 一个简单的ThreadPool使用
public class ThreadPoolUseSample { static final int count = 10000; private static final CountDownLatch c1 = new CountDownLatch(count); private static final CountDownLatch c2 = new CountDow...
2019-10-11 15:40:43
210
原创 Idea 2018 闪退,CPU打满解决
过了个周末,启动idea,突然发现不停的闪退,按照网上搜索的,在idea的安装bin目录下修改idea.exe.vmoptions 文件中的-Xms 和-Xmx 参数,都没能解决问题,-Xmx 改到了1024也不行,看电脑内存也是够用的,然后用任务管理器看idea启动过程,发现内存够用,cpu会打满闪退,搜索下,有禁用一些plugins的方案,于是在重启的时候,不导入项目,然后再下边的...
2019-04-22 10:32:52
2319
6
原创 Paxos简述
Paxospaxos是一种基于消息通知的高容错性的分布式一致性协议。三种角色Proposer:提出提案Acceptor:批准提案Learner: 获取提案算法描述选取提案过程描述选取提案的过程类似两阶段提交,第一阶段Proposer向Acceptor发送prepare请求,Acceptor给出相应响应;第二阶段Proposer向Acceptor发送Acc...
2019-04-12 09:24:11
491
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人