java
yangsen159
这个作者很懒,什么都没留下…
展开
-
stream 妙用
数组和集合的相互转换List<String> list = FileUtils.readLines(new File("E://a.txt"),"utf-8");String origin = list.get(0);String[] strsT = origin.split("\\t");List<String> filterResults = Arrays.stream(origin.split("\\t")).filter(StringUtils::isNotBlank原创 2021-10-14 14:30:52 · 170 阅读 · 0 评论 -
NIO_缓冲区和通道
Java在1.5之后提供了新的IO通信框架,NIO和普通IO的区别是NIO是基于channel和Buffer来进行操作的,这和传统的IO是有一些区别的,传统的IO是基于管道流的方式进行数据传输,而NIO的数据首先需要添加到buffer中,之后通过channel来进行传输。Buffer缓冲区不同的数据类型都是自己的缓冲区,但是在NIO中比较通用的是ByteBuffer,通过allocate和allocateDirect来创建缓冲区,第一种缓冲区是在堆中创建,第二种缓冲区会在操作系统的内存中创建,第二种缓冲原创 2020-06-02 17:43:01 · 421 阅读 · 0 评论 -
线程间通信
线程间通信的模型有两种:共享内存和消息传递题目如下:有两个线程A、B,A线程向一个集合里面依次添加元素"abc"字符串,一共添加十次,当添加到第五次的时候,希望B线程能够收到A线程的通知,然后B线程执行相关的业务操作。方式一:使用 volatile 关键字基于 volatile 关键字来实现线程间相互通信是使用共享内存的思想,大致意思就是多个线程同时监听一个变量,当这个变量发生变化的时候 ,线程能够感知并执行相应的业务。这也是最简单的一种实现方式public class TestSync { /原创 2020-05-28 18:08:10 · 213 阅读 · 0 评论 -
深入Java内存模型
JMMjava内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现java程序在各种不同的平台上都能达到内存访问的一致性。可以避免像c++等直接使用物理硬件和操作系统的内存模型在不同操作系统和硬件平台下表现不同,比如有些c/c++程序可能在windows平台运行正常,而在linux平台却运行有问题。物理硬件和内存首先,在单核电脑中,处理问题要简单的多。对内存和硬件的要求,各种方面的考虑没有在原创 2020-05-26 16:56:09 · 104 阅读 · 0 评论 -
redis
redis 是单线程的,NIO的异步的 (redis 会把并发的请求排队)SETNX实现分布式锁 incr原创 2020-05-22 16:19:49 · 103 阅读 · 0 评论 -
JVM的内存模型
JVM的内存模型方法区(Method Area)方法区主要是放一下类似类定义、常量、编译后的代码、静态变量等,在JDK1.7中,HotSpot VM的实现就是将其放在永久代中,这样的好处就是可以直接使用堆中的GC算法来进行管理,但坏处就是经常会出现内存溢出,即PermGen Space异常,所以在JDK1.8中,HotSpot VM取消了永久代,用元空间取而代之,元空间直接使用本地内存,理论上...原创 2020-04-24 18:32:46 · 96 阅读 · 0 评论 -
hashmap 问题
HashMap为什么是线程不安全的我们知道hashmap的扩容因子是0.75如果hashmap的数组长度已经使用了75%就会引起扩容,会新申请一个长度为原来两倍的桶数组,然后将原数组的元素重新映射到新的数组中,原有数据的引用会逐个被置为null。就是在resize()扩容的时候会造成线程不安全。另外当一个新节点想要插入hashmap的链表时,在jdk1.8之前的版本是插在头部,在1.8后是插在尾...原创 2020-04-24 10:31:28 · 195 阅读 · 0 评论 -
Java代码优化
1.需要 Map 的主键和取值时,应该迭代 entrySet()当循环中只需要 Map 的主键时,迭代 keySet() 是正确的。但是,当需要主键和取值时,迭代 entrySet() 才是更高效的做法,比先迭代 keySet() 后再去 get 取值性能更佳。Map<String,String> map = ...;for (Map.Entry<String, Strin...原创 2020-04-02 10:09:38 · 141 阅读 · 0 评论 -
Java8新特性Stream之Collectors
Java8新特性Stream之CollectorsJava8新特性Stream之Collectors(toList()、toSet()、toCollection()、joining()、partitioningBy()、collectingAndT)将流中的数据转成集合类型:一、将数据收集进一个列表(Stream 转换为 List,允许重复值,有顺序)//1.将数据收集进一个列表(Stre...原创 2020-04-01 17:10:44 · 431 阅读 · 0 评论 -
Java中基本类型和封装类型数据与堆、栈的关系
Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等 指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时 动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取...原创 2019-08-26 14:32:15 · 270 阅读 · 0 评论 -
通过反射,操作私有成员变量(取/赋值),调用私有方法
Java的反射工具很强大,有句著名的话:No reflection ,no frameworks.反射工具类:import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class ReflectionUt...原创 2019-02-18 16:24:20 · 3728 阅读 · 0 评论 -
java8新特性
java8新特性java8-遍历map Map&lt;Long, String&gt; map = new HashMap&lt;Long, String&gt;(); map.put(1L, "ABC"); map.put(2L, "KK"); map.put(3L, "LV"); map.forEach((k,v)原创 2018-12-20 18:25:27 · 85 阅读 · 0 评论 -
java 反射
反射具体实现package reflect;import java.lang.reflect.Method; public class Tests { public static void main(String[] args) throws Exception{ //refeltEntity().show("welcome");;//entity.show(...原创 2018-12-14 10:31:37 · 75 阅读 · 0 评论 -
定时任务高效触发
敏捷开发敏捷开发简单流程:1、产品负责人将整个产品设计成产品backlog。产品backlog就是一个个需求列表。(backlog可以理解为需求或者要做的事情)2、召开产品backlog计划会议,预估每个backlog的时间,确定哪些backlog是需要在第一个sprint中完成的,即sprint的backlog。(sprint可以理解为一个团队一起开发的一个任务集合)3、把sprint的...原创 2018-11-01 17:31:08 · 248 阅读 · 0 评论 -
Java注解
java注解在使用SpringBoot作为Web敏捷开发的框架之后,SpringBoot除了自动装配配置的便捷之外,在很多时候需要基于注解来开发。注解不仅增加了代码的可读性,还增加了开发的速度。这篇文章主要讲述Java 注解。元注解元注解用于注解其他注解的。Java 5.0定义了4个标准的元注解,如下:@Target@Retention@DocumentedInherited现...转载 2018-10-19 17:20:54 · 106 阅读 · 0 评论 -
java枚举的使用
java枚举的使用使用枚举实例,代码如下:代码块public enum DemoEnum { init(&amp;quot;种猪新增&amp;quot;,&amp;quot;/init/put&amp;quot;,&amp;quot;red&amp;quot;), update(&amp;quot;种猪修改&amp;quot;,&amp;quot;/zh原创 2018-10-24 15:41:45 · 115 阅读 · 0 评论 -
手动实现springIoc
手动实现springIocIOC介绍IOC是控制反转,它是spring非常重要的一个特性,它是spring学习的基础,Ioc也成为DI(依赖注入),简单来说就是把spring变成一个容器,由spring来控制对象的创建和他们之间的依赖关系,下面我们通过一个实例来给大家讲解spring的IOC的使用和意义。我们希望做一个简单的游戏,这个游戏中有一个战士(Knight),战士有不同的武器可以战斗...原创 2018-10-23 14:34:31 · 225 阅读 · 0 评论