JAVA常用类库
从异常处理到类库,再到技巧等,如:HashMap、HashTable及ConcurrentHashMap、Hash冲突之红黑树、Queue、IO/NIO等
loulanyue_
使我有洛阳二尺地,安能配六国将相
展开
-
stream流下的Collectors.groupingBy分组示例
Collectors.groupingBy分组的用法 Student student = new Student(); student.setAge(100); student.setName("马云"); student.setNum("1"); student.setNumber(new BigDecimal("100.0")); student.setSix(1); Student stud原创 2021-01-27 19:23:32 · 1174 阅读 · 0 评论 -
list转map的方法,通过Java8的stream流
public Map<Long, Account> getIdAccountMap(List<Account> accounts) { return accounts.stream().collect(Collectors.toMap(Account::getId, account -> account));}原创 2020-07-02 06:24:49 · 1037 阅读 · 0 评论 -
线程池的运行机制
private ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-call-runner-%d").build();private ExecutorService taskExe = new ThreadPoolExecutor(10,20,200L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(),namedT原创 2020-06-10 23:50:11 · 579 阅读 · 0 评论 -
IO模型
一、阻塞和非阻塞的区别:针对的对象是调用者阻塞指调用者在调用某一个函数后,一直在等待该函数的返回值,线程处于挂起状态非阻塞指调用者在调用某一个函数后,不等待该函数的返回值,线程继续运行其他程序(执行其他操作或者一直遍历该函数是否返回了值)二、同步和异步的区别:针对的对象是被调用者同步指的是被调用者在被调用后,操作完函数所包含的所有动作后,再返回返回值异步指的是被调用者在被调用后,先返回返回值,然后再进行函数所包含的其他动作三、IO模型①阻塞IO进程调用一个recvfrom请求,但是它不能原创 2020-06-09 22:46:54 · 107 阅读 · 0 评论 -
集群高并发情况下,通过SnowFlake雪花算法保证生成分布式唯一全局ID
一、需要分布式全局ID的场景在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识如在美团点评的金融、支付、餐饮、酒店;猫眼电影等产品的系统中数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息;特别一点的如订单、骑手、优惠券也都需要有唯一ID做标识,此时一个能够生成全局唯一ID的系统是非常必要的二、生成ID的常用解决方案UUID = ==>>> 存入数据库性能差数据库自增主键 = ==>>> 适合单机,不适合集群基于Redis生成全局i原创 2020-05-26 16:21:05 · 4275 阅读 · 1 评论 -
通过RestTemplate实现http请求负载均衡,替换httpclient
一、什么是RestTemplateRestTemplate是Spring用于同步client端的核心类,简化了与http服务的通信,并满足RestFul原则,程序代码可以给它提供URL,并提取结果。默认情况下,RestTemplate默认依赖jdk的HTTP连接工具二、注入bean@Configurationpublic class ApplicationContextConfig { @Bean public RestTemplate getRestTemplate() {原创 2020-05-22 09:45:25 · 852 阅读 · 0 评论 -
dependencyManagement的作用,DependencyManagement和Dependencies的区别
一、dependencyManagement的介绍Maven使用dependencyManagement元素来提供一种管理依赖版本号方式,通常会在一个组织或者项目的最顶层的父POM中看到dependencyManagement元素二、使用dependencyManagement的好处使用pom.xml中的dependencyManagement元素能让所有在子项目中引用一个依赖而不用显式的列出版本号;maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然原创 2020-05-20 18:41:50 · 958 阅读 · 0 评论 -
Jmeter如何完成模拟压力测试,在并发场景下
在Windows环境下进行JMeter压测,通过多线程在并发场景下测试接口原创 2020-05-03 20:43:59 · 1120 阅读 · 0 评论 -
Groovy的基础
1.Groovy中的变量1.1、变量的类型:基本类型(java中的int,float,double,byte,char,long,short)和对象类型(String等) (Groovy中最终都是对象类型)int x = 10println x.class //结果为:class java.lang.Integerdouble y = 3.14println y.class //结果为...原创 2020-01-29 23:32:53 · 272 阅读 · 0 评论 -
深入浅出安全加密算法
DES加密算法: DES加密算法是一种分组密码,以64位为分组对数据加密,它的密钥长度是56位,加密解密用同一算法。DES加密算法是对密钥进行保密,而公开算法,包括加密和解密算法。这样,只有掌握了和发送方相同密钥的人才能解读由DES加密算法加密的密文数据。因此,破译DES加密算法实际上就是搜索密钥的编码。对于56位长度的密钥来说,如果用穷举法来进行搜索的话,其运算次数为256。随着计算机系统能力...原创 2019-06-20 14:16:55 · 2291 阅读 · 0 评论 -
【JavaEE】全面讲解web考察点
web概念概述* JavaWeb: * 使用Java语言开发基于互联网的项目* 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端程序,在远程有一个服务器端程序 * 如:QQ,迅雷... * 优点: 1. 用户体验好 * 缺点: 1. 开发、安装,部署,维护 麻烦 2. B/S: Browser/Server...原创 2019-06-28 20:50:55 · 148 阅读 · 0 评论 -
函数式编程应用@FunctionalInterface,λ,LambdaExpress
1. @FunctionalInterface能简化代码,解决匿名内部类代码冗余,适用单一接口,或被default和static修饰public interface ObtainxxStatus { /** * description 获取进展状态和节点信息 * * @param sellerId sellerId * @param planCo...原创 2020-04-07 10:04:51 · 163 阅读 · 0 评论 -
【JAVA反射】getMethod与getDeclaredMethod区别
反射对于任何一个类,都能知道这个类所有的属性和方法;对于任何一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制getMethod()返回某个类的所有公用(public)方法包括其继承类的公用方法,当然也包括它所实现接口的方法getDeclaredMethod()对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法...原创 2019-12-16 19:42:53 · 7508 阅读 · 0 评论 -
Java 14中的新特性
JDK 14于2020年3月17日发布了通用版本,新的 Java14 中加入了非常多的语法糖,可以使得我们能更加的快捷编写简洁的代码:一、增强 switch case 代码块右箭头 ->替代冒号,支持判断合并private static void switchCase() { String day = "1"; switch (day) { ...原创 2020-04-13 23:08:20 · 207 阅读 · 0 评论 -
Java8 下CompletableFuture如何实现异步回调
一、CompletableFuture是啥Java 8 引入的CompletableFuture 类,支持 future 完成时触发一些依赖的函数和动作CompletableFuture 实现了 Future 以及 ComplatableStage 接口, 实现 Future 接口代表其本身可以作为生产者和消费者的 “桥梁”, 而 ComplatableStage 接口定义了以上所有的组合条...原创 2020-04-10 19:35:50 · 2794 阅读 · 0 评论 -
JUC中T0级的三大辅助工具类(Semaphore,CountDownLatch,CyclicBarrier)
一、CountDownLatch(减少计数)让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒主要有两个方法,1.1 当一个或多个线程调用await方法时,这些线程会阻塞,其它线程调用countDown方法会将计数器减一(调用countDown方法的线程不会阻塞);1.2 当计数器的值变为0时,await方法阻塞的线程会被唤醒,继续执行示例代码:import java.util.con...原创 2020-04-09 21:33:22 · 266 阅读 · 0 评论 -
Java 8的Stream流
一、什么是Stream流Stream流是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列二、Stream流的特点2.1 Stream 自己不会存储元素2.2 Stream 不会改变源对象,会返回一个持有结果的新Stream2.3 Stream 操作是延迟执行的,会等到需要结果的时候才执行三 、Stream流的应用3.1 创建一个Stream:一个数据源(数组、集合)3.2 ...原创 2020-04-08 21:52:35 · 172 阅读 · 0 评论 -
不安全的集合类,在多线程下改如何保证安全
斐波那契数列1. 爬楼梯70. Climbing Stairs (Easy)题目描述:有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。定义一个数组 dp 存储上楼梯的方法数(为了方便讨论,数组下标从 1 开始),dp[i] 表示走到第 i 个楼梯的方法数目。第 i 个楼梯可以从第 i-1 和 i-2 个楼梯再走一步到达,走到第 i 个楼梯的方法数为走到第 i-1 和第 i...原创 2019-09-26 18:54:12 · 206 阅读 · 0 评论 -
深入浅出Spring mvc 的运行流程
1.spring mvc 先将请求发送给 DispatcherServlet。2.DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的 Controller。3.DispatcherServlet 再把请求提交到对应的 Controller。4.Controller 进行业务逻辑处理后,会返回一个ModelAndView。5.Dispathche...原创 2019-11-18 19:47:43 · 201 阅读 · 0 评论 -
归并排序的具体实现
//归并排序public static int[] sort(int[] a,int low,int high){int mid = (low+high)/2;if(low<high){sort(a,low,mid);sort(a,mid+1,high);//左右归并merge(a,low,mid,high);}return a;}public static void ...原创 2019-11-12 18:42:22 · 209 阅读 · 0 评论 -
【Java】Object类型转Long
String status = jsonObject.get(“status”).toString();Long status_long = Long.valueOf(status);原创 2019-06-06 23:00:39 · 3231 阅读 · 0 评论 -
Hashtable和ConcurrentHashMap实现线程安全
如果未做同步控制时,代码在多线程下是安全的吗不安全,没有synchronized修饰HashMap的代码,它是线程安全的吗不安全线程安全的Map-HashTable是如何实现线程安全的呢synchronized修饰有了HashTable为何还要有个ConcurrentHashMapHashTable效率低下,concurrentHashMap做了改进ConcurrentHa...原创 2019-09-05 19:52:22 · 266 阅读 · 0 评论 -
必知必会之Spring事务的隔离级别和传播属性
七个事务传播属性PROPAGATION_REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY 支持当前事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,就把当前事务挂起。PROP...原创 2019-09-04 22:10:17 · 100 阅读 · 0 评论 -
成功处理 can be replaced with lambda
Anonymous new Callable() can be replaced with lambda原创 2019-09-03 19:40:57 · 8626 阅读 · 0 评论 -
non-compatible bean definition of same name and class同名和类的非兼容bean定义
SpringBoot项目启动是报错:for bean class [com.xxx.ctsg.service.impl.xxx] conflicts with existing, non-compatible bean definition of same name and class解法:修改类名,确保名称唯一后,启动正常...原创 2019-09-02 20:17:49 · 2966 阅读 · 0 评论 -
阿里代码规约:手动创建线程池,效果会更好哦
规避资源耗尽的风险,高并发下推荐手动创建线程池原创 2019-08-30 21:54:43 · 25480 阅读 · 2 评论 -
maven更新主干包依赖
项目日常运行时,提示依赖不存在,检查依赖正常,后执行更新后正常命令:mvn clean install -e -U原创 2019-08-30 21:38:23 · 175 阅读 · 0 评论 -
HashMap的基本特点与扩容
HashMap的存储结构数组、链表、红黑数(jdk1.8)特点1.快速存储2.快速查找3.可伸缩Hash算法所有的对象都有hashCode(使用key的)Hash值的计算hashCode^(hashCode >>> 16)数组下标计算数组默认大小:16数组下标:hash&(16-1) = hash%16Hash冲突不同的对象算出来数组下标是相同...原创 2019-09-06 19:43:23 · 166 阅读 · 0 评论 -
Mybatis实现多个或条件查询
实现SELECT * FROM table where tag_id =382 or tag_id =381 ;mapper层示例:<select id="queryByxxId" resultType="xxDAO"> SELECT id, <include refid="select_columns"/> FROM table ...原创 2019-09-09 19:23:01 · 4577 阅读 · 1 评论 -
git merge failed
在git上push代码时,提示失败:18:15 Git Merge Failed Merging is not possible because you have unmerged files. hint: Fix them up in the work tree, and then use 'git add/rm <file>' hint: as appropriate to...原创 2019-09-10 18:48:59 · 2163 阅读 · 0 评论 -
部署异常 ERROR: Cannot load this JVM TI agent twice
部署机器报错:ERROR: Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options.原因:CATALINA_OPTS="${CATALINA_OPTS} -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend...原创 2019-09-18 20:00:11 · 3422 阅读 · 0 评论 -
配置阿里云OSS图片缩略图
OSS图片支持拼接url实现图片缩略图,配置如下:按百分比缩放:?x-oss-process=image/resize,p_12将原图指定按短边缩略 100x100?x-oss-process=image/resize,m_lfit,h_200,w_200http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-pr...原创 2019-09-19 19:53:24 · 7674 阅读 · 0 评论 -
JAVA必知必会知识点
1. 面向对象和面向过程的区别面向过程 :面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展。面向对象 :面向对象易维护、易复用、易扩展。 因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统...原创 2019-09-25 18:17:17 · 262 阅读 · 0 评论 -
jdk-监控和故障处理工具总结
JDK 监控和故障处理工具总结JDK 命令行工具这些命令在 JDK 安装目录下的 bin 目录下:jps (JVM Process Status): 类似 UNIX 的 ps 命令。用户查看所有 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息;jstat( JVM Statistics Monitoring Tool): 用于收集 HotSpot 虚拟机各方面的运行数据...原创 2019-09-29 19:36:32 · 368 阅读 · 0 评论 -
【ZooKeeper】高并发下保证数据安全修改
//定义常量const,将data字符串化后排序const paramsKeys = Object.keys(data).sort()//定义常量md5,给任意数据一个“签名”,十六进制的字符串,crypto是Nodejs模块const md5 = crypto.createHash(‘md5’)for (const key of paramsKeys) {//如果相等,结束本次循环,...原创 2019-08-23 18:34:47 · 928 阅读 · 0 评论 -
Java深入浅出讲解
一、数据类型基本类型包装类型缓存池二、String概览不可变的好处String, StringBuffer and StringBuilderString Poolnew String(“abc”)三、运算参数传递float 与 double隐式类型转换switch四、继承访问权限抽象类与接口super重写与重载五、Object ...原创 2019-08-26 19:57:36 · 3901 阅读 · 0 评论 -
多层Map内嵌时取数据的方法
1.拿到常量keyString tem = ot.getLong(“id”).toString();2.对象强转map,通过fastjsonMap m1 = (Map)map.get(“result”);Map m2 = (Map)m1.get(tem);原创 2019-08-21 18:58:16 · 5770 阅读 · 0 评论 -
数组索引越界异常 ArrayIndexOutOfBoundsException
如果访问数组元素的时候,索引编号并不存在,那么将会发生数组索引越界异常ArrayIndexOutOfBoundsException原因:索引编号写错了。解决:修改成为存在的正确索引编号。所有的引用类型变量,都可以赋值为一个null值。但是代表其中什么都没有。数组必须进行new初始化才能使用其中的元素。如果只是赋值了一个null,没有进行new创建,那么将会发生:空指针异常 Nul...原创 2019-06-25 23:24:56 · 16225 阅读 · 0 评论 -
【ibatis】实现传参数的查询示例
近期在“远古应用”上进行信息落库、查询等开发,总结如下:1.根据时间范围,查询记录数countMap<String, Object> p = new HashMap<>(2);p.put("beginTime", beginTime);p.put("endTime", endTime);Integer xxxDO= xxxDAO.count("findxxxC...原创 2019-06-11 22:23:42 · 419 阅读 · 0 评论 -
成功解决异常java.lang.RuntimeException: [SchedulerxClient]: init error, clientConfig:ClientConfig
解决部署异常原创 2019-06-10 21:18:21 · 13652 阅读 · 0 评论