Java
vio_dzyls
.
展开
-
CRON表达式
CRON表达式原创 2020-07-17 18:24:15 · 153 阅读 · 0 评论 -
Unsafe类操控对象、数组、基本类型、CAS
使用Unsafe操控基本类型、对象、数组原创 2020-07-16 10:29:00 · 441 阅读 · 0 评论 -
流和并行流
Stream类的笔记原创 2020-07-13 14:50:37 · 398 阅读 · 0 评论 -
BIO、AIO、NIO
BIO:一个线程一个连接,一个请求就需要一个线程。线程的开销大。AIO:一个有效请求一个线程,客户端的IO请求都死由OS先完成了再通知服务器去启动线程处理。NIO:一个请求一个线程,但连接请求都是先注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程处理。...原创 2019-11-16 22:51:18 · 389 阅读 · 0 评论 -
线程池的使用
ThreadPoolExecutor的参数以及四种线程池原创 2019-11-12 17:36:38 · 22415 阅读 · 0 评论 -
乐观锁与悲观锁
悲观锁每次修改时,都会认为别人会修改,所以在拿数据时加锁。别人拿数据就会阻塞到它拿到锁。传统的关系型数据库就使用了这种悲观锁,行锁、表锁,读锁、写锁,都是在操作之前先上锁。Java的Synchronized和Reetrantlock都是这种独占锁。乐观锁每次修改时都认为别人不会在这期间修改数据,所以不会上锁。但是更新的时候,会判断一下在此期间数据有没有其它线程修改。乐观锁的实...原创 2019-11-06 10:09:38 · 137 阅读 · 0 评论 -
volatile和Atomic
volatile简单来说,volatile保存内存可见性。线程一和二从主内存中复制flag到自己的工作内存。当线程一修改flag的值,线程二并不会立即从主内存中读取flag的值,所以在线程二的工作内存中,flag依然为false。使用volatile关键字,告示JVM此变量是不稳定的,每次使用它都要到主内存中读取。除了保证内存可见性,volatile还能防止指令重排序,但并不能保证原...原创 2019-10-22 23:07:28 · 1334 阅读 · 0 评论 -
JUC笔记
CountDownLatch闭锁。完成某些操作时,只有当其他所有线程都执行完毕,才继续执行当前运算。 private CountDownLatch latch; public ThreadDemo(CountDownLatch latch){ this.latch = latch; } @Override public void run() {...原创 2019-10-22 22:00:46 · 12526 阅读 · 0 评论 -
ConcurrentHashMap
ConcurrentHashMap在Java7之前,底层数据结构采用分段数组+链表。采用分段锁实现线程安全。分段锁:每把锁只锁容器内的一部分数据,多线程访问不同的数据段时,就不存在锁竞争,提高并发访问效率。在Java8时,底层和HashMap一样,采用数组+链表/红黑树。采用Syn+CAS实现线程安全。Syn在1.6做过很多优化。CAS:Compare And Swa...原创 2019-10-21 23:09:42 · 106 阅读 · 0 评论 -
Error: opening registry key 'Software\JavaSoft\JRE'
在win执行cmd命令时,突然发现java命令无法使用:查看系统变量却发现没有异常。百度之后发现,path里多了将Java的path移动至Oracle的前面即可:原创 2019-09-22 13:09:44 · 13633 阅读 · 4 评论 -
HashMap的原理(1.7与1.8对比)
HashMap是数组与链表的结合体。HashMap就是个数组,而数组中的每一项都是链表。存储根据hash值获取数组的下标。如果数组的该位置没有其他元素,那么直接将此元素放入这个位置。如果有其他元素,那么数组中这个位置的元素将以链表存放。新加入的在链头。根据key的hash值来获取对应的数组中的位置,如何计算这个位置就是hash算法。HashMap的元素尽量要均匀些。最好每个位...原创 2019-08-23 09:55:30 · 158 阅读 · 0 评论 -
Effective Java:Object中的方法
覆盖equals时遵从约定覆盖equals要满足:自反性;对称性;传递性;一致性;非空性覆盖equals时总要覆盖hashcode方法每个对象的hashCode方法返回的整数是确定的equals相等,那么hashCode也要相等equals不相等,hashCode也可以相等。(最好是不相等,可以提高散列表的性能)始终要覆盖toString方法谨慎的覆盖clone考...原创 2019-08-23 15:21:14 · 102 阅读 · 0 评论 -
匿名内部类的使用
无参函数的简写原写法: new Thread(new Runnable(){ @override public void run(){ //To Do Something sout("run"); } }).start();使用Lambda表达式...原创 2019-08-21 13:21:24 · 437 阅读 · 0 评论 -
动态绑定和静态绑定
静态绑定静态绑定:程序执行前就已经绑定(程序编译时就已经知道那个方法是那个类了)。static、final、private都是在编译时绑定,都是静态绑定。重载也是静态绑定。动态绑定动态绑定:编译时没绑定,在运行时期根据具体对象的类型进行绑定。重写是动态绑定。1.虚拟机提取对象实际类型的方法表2.虚拟机搜索方法签名3.调用方法class A{ public voi...原创 2019-08-25 16:05:47 · 292 阅读 · 0 评论 -
HashMap的扩容问题
HashMap的重要特性是它的容量(capacity)、负载因子(load factor)和扩容极限(threshold resizing)。当hashmap中的元素个数 > 数组大小 乘以 load factor(负载因子默认为0.75)时,数组就会扩容。hashMap扩容是非常消耗性能的操作,预设元素的个数能有效提高HashMap的性能。预设HashMap的大小时,需要考虑到...原创 2019-08-25 15:01:17 · 934 阅读 · 0 评论 -
Java获取操作系统信息
从网上收集的一些关于java获取操作系统信息的方法,现在总结一下:1获取本机的IP地址:Java代码  private static String getIpAddress() throws UnknownHostException&转载 2018-10-12 11:47:15 · 1056 阅读 · 0 评论 -
Win环境配置RocketMQ
一.预备环境1.系统 Windows2. 环境 JDK1.8、Maven、Git二. RocketMQ部署1.下载1.1地址:http://rocketmq.apache.org/release_notes/release-notes-4.2.0/1.2选...转载 2018-10-13 10:35:17 · 766 阅读 · 1 评论 -
RocketMQ基本概念
Message消息,消息队列中信息传递的载体。Message ID消息的全局唯一标识,由 MQ 系统自动生成,唯一标识某条消息。Message Key消息的业务标识,由消息生产者(Producer)设置,唯一标识某个业务逻辑。Topic消息主题,一级消息类型,通过 Topic 对消息进行分类。Tag消息标签,二级消息类型,用来进一步区分某个 Topic 下的消息分类。Produ...转载 2018-10-13 11:00:31 · 219 阅读 · 0 评论 -
BIO、NIO、AIO异同比较
IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而...转载 2018-10-10 17:08:55 · 126 阅读 · 0 评论 -
压测工具Jmeter简单入门教程
Jmeter简介Jmeter的基本概念百度百科:Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter...转载 2018-10-25 16:05:34 · 463 阅读 · 0 评论 -
solr初体验
一、启动solr官网下载solr官网解压后,使用cmd命令进入solr/bin目录。使用solr start -p 指定端口启动solr。(默认的solr端口为8983)访问 http://localhost:8983/solr进入solr管理界面常用的solr命令:solr restart -p port 重启solrsolr create -c nam...原创 2018-10-30 17:30:13 · 282 阅读 · 0 评论 -
下载时防止中文文件名乱码
String userAgent = request.getHeader("User-Agent"); String formFileName = file.getFileName(); // 针对IE或者以IE为内核的浏览器: if (userAgent.contains("MSIE") || userAgent....原创 2018-12-05 09:39:09 · 1096 阅读 · 0 评论 -
三个MVN命令
mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。mvn clean ...原创 2018-12-06 14:30:34 · 919 阅读 · 0 评论 -
常用的lambda表达式
集合中的foreach List<String> list = new ArrayList<>(); list.add("red"); list.add("black"); list.add("red"); list.stream().filter(s -> "red".equ原创 2018-12-19 22:38:21 · 803 阅读 · 0 评论 -
Effective Java:类与接口
使类和成员的可访问性最小方便解耦合,使得这些模块可以独立开发、测试、优化、使用、理解、修改,加快了开发速度,减轻了维护负担。提高了软件的可重用性在公有类中使用访问方法而非公有域即不使用public修饰属性,而是使用private和setter、getter来访问属性使可变性最小为了使类不可变,需要遵循:1.不要提供任何会修改对象的方法2.保证类不会被扩展3.所...原创 2019-08-23 16:12:58 · 120 阅读 · 0 评论 -
高效的创建、销毁对象
考虑用静态工厂代替构造器1.相比构造器,静态方法能使用名称来区别2.不必每次调用静态方法都创建一个对象。避免不必要的重复对象3.静态方法可以返回原返回类型的任何子类型的对象。这样在选择返回对象的类时就有更大的选择4.使创建参数化类型实例的时候代码更简单遇到多个构造器参数要考虑使用构建器1.重叠构造器2.JavaBeans3.Bulider Pattern用是有构...原创 2019-08-20 15:03:38 · 759 阅读 · 0 评论 -
Java调用外部程序、执行Shell或cmd命令
亦可以使用Runtime调用外部程序public static void main(String []args) throws IOException { List<String> command = new ArrayList<>(); command.add("C:\\Program Files\\Mozilla Firefox\\f...原创 2018-10-12 11:17:58 · 3757 阅读 · 0 评论