
Java基础
kevin_zhuzj
做的了Java开发工程师也管的了项目。
展开
-
Java排名靠前的工具类你都用过吗?
这篇文章展示了最常用的Java实用工具类及其最常用的方法。 org.apache.commons.io.IOUtils closeQuietly()toString()copy()toByteArray()write()toInputStream()readLines()copyLarge()lineIterator()readFully() org.apache.commons.io.FileUtils deleteDir...原创 2021-03-03 09:14:57 · 155 阅读 · 0 评论 -
Java基础---删除String数组中的所有空值
/*** * 去除String数组中的空值 */ private String[] deleteArrayNull(String string[]) { String strArr[] = string; // step1: 定义一个list列表,并循环赋值 ArrayList<String> strList = new ArrayList<String>(); for (int i = .原创 2020-05-20 09:04:43 · 5095 阅读 · 0 评论 -
Hutool,一个贼好用的 Java 工具类库
简介Hutool是Hu + tool的自造词,前者致敬我的“前任公司”,后者为工具之意,谐音“糊涂”,寓意追求“万事都作糊涂观,无所谓失,无所谓得”的境界。Hutool是一个Java工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以“甜甜的”。Hutool最初是我项目中“util”包的一个整理,后来慢慢积累并加入更多非业务相关功能,并广泛学习其它开源项...原创 2020-04-02 10:15:13 · 326 阅读 · 0 评论 -
阿里云部署netty-socketio遇到的坑
在本地部署用localhost,线上部署不能有Hostname,否则连接会一直失败package com.ydkj.netty.server;import com.corundumstudio.socketio.Configuration;import com.corundumstudio.socketio.SocketIOClient;import com.corundumstud...原创 2020-02-23 22:47:36 · 2770 阅读 · 0 评论 -
Java随机生成定长纯数字或数字字母混合数
package randomdata;import java.util.Random;public class RandomCharData { //可以将字符转换赋值给int类型,查看其ASCII码 public static void main(String[] args) { //随机生成纯数字 for(int i=0;i<15;i...转载 2020-01-09 09:00:55 · 436 阅读 · 0 评论 -
彻底解决js计算精度问题math.js
js 计算误差1.1*100// 110.00000000000001解决办法 引入math.js1.直接引入<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/5.1.0/math.js"></script><!doctype html><html><...原创 2019-12-02 15:35:42 · 2444 阅读 · 0 评论 -
【修炼内功】[Java8] Lambda表达式里的"陷阱"
Lambdab表达式带来的好处就不再做过多的介绍了,这里重点介绍几点,在使用Lambda表达式过程中可能遇到的"陷阱"0x00 Effectively Final在使用Lambda表达式的过程中,经常会遇到如下的问题图中的sayWords为什么一定要是final类型,effectivelyfinal又是什么?但,如果改为如下,貌似问题又解决了似乎,只要对sayWord...转载 2019-11-27 11:28:11 · 1512 阅读 · 0 评论 -
Java8 lambda表达式10个示例
例1、用lambda表达式实现Runnable我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现Runnable接口是匿名类的最好示例。看一下Java 8之前的runnable实现方法,需要4行代码,而使用lambda表达式只需要一行代码。我们在这里做了什么呢?那就是用() -> {}代码块替代了整个匿名类。// Java 8之前:new Thread...转载 2019-11-27 11:18:10 · 222 阅读 · 0 评论 -
Java8之Optional用法
一 概览Optional是java.util包中的一部分,因此为了使用Optional,需要: import java.util.Optional;二 创建2.1调用empty API, 创建一个空的Optional对象:@Testpublic void whenCreatesEmptyOptional_thenCorrect() { Optional<Str...原创 2019-11-26 17:37:42 · 348 阅读 · 0 评论 -
utf-8的中文是一个汉字占三个字节长度吗?
英文字母和中文汉字在不同字符集编码下的字节数英文字母:字节数 : 1;编码:GB2312字节数 : 1;编码:GBK字节数 : 1;编码:GB18030字节数 : 1;编码:ISO-8859-1字节数 : 1;编码:UTF-8字节数 : 4;编码:UTF-16字节数 : 2;编码:UTF-16BE字节数 : 2;编码:UTF-16LE中文汉字:字节...转载 2019-11-20 14:53:55 · 329 阅读 · 0 评论 -
java对象的浅克隆和深克隆
在Object基类中,有一个方法叫clone,产生一个前期对象的克隆,克隆对象是原对象的拷贝,由于引用类型的存在,有深克隆和浅克隆之分,若克隆对象中存在引用类型的属性,深克隆会将此属性完全拷贝一份,而浅克隆仅仅是拷贝一份此属性的引用。首先看一下容易犯的几个小问题clone方法是Object类的,并不是Cloneable接口的,Cloneable只是一个标记接口,标记接口是用用户标记实现该接口的...原创 2019-11-20 10:15:09 · 111 阅读 · 0 评论 -
Java中Comparable和Comparator的区别
Comparable和Comparator都是用于比较数据的大小的,实现Comparable接口需要重写compareTo方法,实现Comparator接口需要重写compare方法,这两个方法的返回值都是int,用int类型的值来确定比较结果,在Collections工具类中有一个排序方法sort,此方法可以之传一个集合,另一个重载版本是传入集合和比较器,前者默认使用的就是Com...原创 2019-11-20 10:09:21 · 183 阅读 · 0 评论 -
为什么Java数组长度不可改变?
数组的内存是连续分配的;int [] array = {1, 2 ,3};假设数组内存如上图所示,那么当我们增加数组长度时,就可能导致别的变量被覆盖,导致出错。这时,有人会想,那减少长度也是可以的呀,但是这会出现一个现象,那就是突然,空出来一个内存空间。如果内存空间一开始就分配好,那么会符合整体布局,这个空间可以和别的空间组合,变成一块更大的空间。如下图所示:综合上...转载 2019-11-06 09:05:33 · 2258 阅读 · 0 评论 -
深入了解Java泛型
1、定义什么是泛型,看表面的意思,泛型就是指广泛的、普通的类型。在java中是指把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型。可一看一个简单的例子:List<String> strings = new ArrayList<String>();strings.add("a String");String aString = string...原创 2019-11-06 09:00:30 · 174 阅读 · 0 评论 -
Java中TypeReference用法说明
用途在使用fastJson时,对于泛型的反序列化很多场景下都会使用到TypeReference,例如:void testTypeReference() { List<Integer> list = new ArrayList<>(); list.add(1); list.add(9); list.ad...原创 2019-11-05 14:06:47 · 88327 阅读 · 4 评论 -
Java 如何设计 API 接口,实现统一格式返回?
前言在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后端人员瞧不起前端人员,那现在后端人员要重新认识一下前端,前端已经很成体系了)一般系统的大致整体架构图如下:需要说明的是,有些小伙伴会回复说,这个架构太简单了吧,太low了,什么网关...原创 2019-11-01 08:57:38 · 3126 阅读 · 1 评论 -
Java : 如何更优雅的设计异常
来源:lrwinxhttps://lrwinx.github.io/导语异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的开发经验来谈一谈我是如何对异常进行处理的。由于本文只作一些经验之谈,不涉及到基础知识部分,如果读者对异常的概念还很模糊,请先查看基础知识。前文:Java:如何更优雅的处理空值?如何选择异常类型异常的类别...转载 2019-10-31 09:58:26 · 712 阅读 · 2 评论 -
Java 字符串拼接深入解析
《阿里巴巴 Java 开发手册》上有一段内容说:“循环体内,拼接字符串最好使用 StringBuilder 的 append 方法,而不是 + 号操作符。”到底为什么啊,我平常一直就用的‘+’号操作符啊!今天我们就写一篇文章分析一下01、“+”号操作符要说姿势,“+”号操作符必须是字符串拼接最常用的一种了,没有之一。 12 String chenmo...原创 2019-10-25 13:57:12 · 335 阅读 · 0 评论 -
浅析BigDecimal的使用
在Java中,浮点数有两种:float 和 double,而计算机中的数据是以二进制存储的,浮点数会丢失一定的精确度,因此Java提供了BigDecimal来处理浮点数,BigDecimal是java.math包中提供的API类,用来对超过16位有效位的数进行精确的运算。BigDecimal所创建的是对象,因此不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,必须调用其相对应的...原创 2019-10-21 08:48:49 · 806 阅读 · 0 评论 -
Java中的final共有三种用法
final成员变量当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变,但引用变量所指向的对象中的内容还是可以改变的。其初始化可以在三个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。而且在Java1.1以前,只能是在定义转载 2017-01-05 10:04:44 · 350 阅读 · 0 评论 -
CENTOS7下安装redis 4.0
一、安装redis第一步:下载redis安装包wget http://download.redis.io/releases/redis-4.0.6.tar.gz[root@iZwz991stxdwj560bfmadtZ local]# wget http://download.redis.io/releases/redis-4.0.6.tar.gz--2017-12-13 12:3...原创 2019-08-16 09:44:38 · 279 阅读 · 0 评论 -
centos7中安装 java8
一、下载jdkjdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载jdk-8u152-linux-x64.rpm 或jdk-8u152-linux-x64.tar.gz(根据自己的系统位数选择对应的包)如图:二、安装jdk因为我安装的CentO...原创 2019-08-16 09:23:02 · 176 阅读 · 0 评论 -
java高级工程师面试题之Netty面试题(2)
1.BIO、NIO和AIO的区别?BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO:一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通...转载 2019-08-12 10:15:05 · 167 阅读 · 0 评论 -
java高级工程师面试题之Netty面试题(1)
1.Netty 是什么?Netty 是一款基于 NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架,对比于 BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。难能可贵的是,在保证快速和易用性的同时,并没有丧失可维护性和性能等优势。2.Netty 的特点是什么?高并发:Netty 是一款基于 NIO(Nonblocking IO,非阻塞IO)开...转载 2019-08-12 10:12:55 · 1165 阅读 · 0 评论 -
CentOS 7 安装Nginx 并配置自动启动
1、官网下载安装包http://nginx.org/en/download.html,选择适合Linux的版本,这里选择最新的版本,下载到本地后上传到服务器或者centos下直接wget命令下载。切换到/usr/local目录,下载软件包 1 2 #cd/usr/local #wgethttp://nginx.or...转载 2019-08-15 17:47:55 · 765 阅读 · 0 评论 -
JAVA 线程池的正确打开方式
JDK版本号 1.8JDK中Executors 使用的隐患先来看一段代码,我们要创建一个固定线程池,假设固定线程数是4。代码如下:Executors是JAVA并发包中提供的,用来快速创建不同类型的线程池。是不是很简单,创建线程池只需一行代码。对于一些个人项目或临时性的项目,这样写确实没什么问题,而且开发速度很快。但在一些大型项目中,这种做法一般是禁止的。WHY???...转载 2019-08-15 13:56:41 · 134 阅读 · 0 评论 -
Redis常用的14大使用场景
原创 2019-08-26 09:55:17 · 137 阅读 · 0 评论 -
StringBuilder为什么线程不安全?
引言面试官:StringBuilder和StringBuffer的区别在哪?我:StringBuilder不是线程安全的,StringBuffer是线程安全的面试官:那StringBuilder不安全的点在哪儿?我:。。。(哑巴了)在这之前我只记住了StringBuilder不是线程安全的,StringBuffer是线程安全的这个结论,至于StringBuilder为什么不安全...原创 2019-08-30 09:28:54 · 1221 阅读 · 0 评论 -
网络通讯如何解决出现分包粘包,来一起看看netty的解决思路
一般直接接触RPC框架的时候内部都做了对于粘包分包的解决方案,咱们来一起了解下这方便的含义,包括编码解码这块。(一)粘包分包概念粘包TCP由于TCP协议本身的机制(面向连接的可靠地协议-三次握手机制)客户端与服务器会维持一个连接(Channel),数据在连接不断开的情况下,可以持续不断地将多个数据包发往服务器,但是如果发送的网络数据包太小,那么他本身会启用Nag...原创 2019-09-06 09:05:12 · 1810 阅读 · 1 评论 -
Java代码中采用策略模式消除大量的 if else代码结构
策略(Strategy)模式:又名Policy,它的用意是定义一组算法,把它们一个个封装起来,并且使他们可以相互替换。策略模式可以独立于使用他们的客户端而变化。策略模式有以下角色构成:1、抽象策略(Strategy)角色:抽象策略角色由抽象类或接口来承担,它给出具体策略角色需要实现的接口;2、具体策略(ConcreteStrategy)角色:实现封装了具体的算法或行为;3、场景(C...原创 2019-06-12 13:39:24 · 9251 阅读 · 3 评论 -
StringBuilder为什么线程不安全?
面试官:StringBuilder和StringBuffer的区别在哪?我:StringBuilder不是线程安全的,StringBuffer是线程安全的面试官:那StringBuilder不安全的点在哪儿?我:。。。在这之前我只记住了StringBuilder不是线程安全的,StringBuffer是线程安全的这个结论,至于StringBuilder为什么不安全从来没有去想过。...原创 2019-09-16 09:07:44 · 157 阅读 · 0 评论 -
三道简单的 String 面试题
字符串介绍String类是java.lang包中的一个类,是我们日常中使用的非常多的一个类,它不是基础数据类型,底层实现是字符数组来实现的:/** The value is used for character storage. */ private final char value[];String类是由final修饰的,所以是无法被继承的,一旦创建了String对象,我们就...原创 2019-09-17 09:11:00 · 166 阅读 · 0 评论 -
Java 中 long 和 double 的原子性?
JVM中对long的操作是不是原子操作? 为什么对long的操作不是原子的? 在硬件,操作系统,JVM都是64位的情况下呢? java中基本类型中,long和double的长度都是8个字节,32位(4字节)处理器对其读写操作无法一次完成,那么,JVM,long和double是原子性的吗?JVM中对long的操作是不是原子操作?首先,通过一段程序对long的原...转载 2019-09-17 09:14:22 · 153 阅读 · 0 评论 -
String.trim() 了解一下?你中招了吗?
trim()这个方法一般用来消除字符串两边的空格,但是内部是如何实现的呢?附上源码:publicStringtrim(){intlen=value.length;intst=0;char[]val=value;/*avoidgetfieldopcode*/while((st&...转载 2019-09-18 08:51:44 · 1192 阅读 · 0 评论 -
Java线程池的运行原理以及使用详解
一、 为什么要使用线程池在一些需要使用线程去处理任务的业务场景中,如果每一个任务都创建一个线程去处理,任务处理完过后,把这个线程销毁,这样会产生大量的线程创建,销毁的资源开销。使用线程池能有效的控制这种线程的创建和销毁,而且能够对创建的线程进行有效的管理。二、Java线程池相关的API介绍1. Executor接口主要是用来执行提交的任务。下面是接口定义:public interfa...转载 2019-08-15 10:03:25 · 163 阅读 · 0 评论 -
阿里蚂蚁金服中间件3轮题目:CMS +缓存雪崩+分布式+ AIO +负载均衡
第一轮自我介绍,自己做的项目和技术领域说说HaspMap底层原理?再说说它跟HaspTable和ConcurrentHashMap的他们之间的相同点和不同点?讲讲jdk1.7和1.8的区别?几种内置的线程池什么是原子性,可见性,有序性?说几个常用的锁接口实现锁。MySQL的事务隔离级别以及MVCC机制Redis的缓存雪崩,缓存穿透以及如何解决?分布式架构简单介绍CMS收集器和G1...原创 2019-08-14 18:12:17 · 298 阅读 · 0 评论 -
java核心基础之Lock和synchronized比较详解
今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉,有许多疑问,所有在网上找了很多文章看了一下,总体说的不够详细,重点和焦点问题没有谈到,但这篇文章相当不错,说的很全面,主要的重点都说到了,所有在这里转载了这篇文章,注意红色字体。 在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java...转载 2019-08-06 09:18:59 · 160 阅读 · 0 评论 -
the specified jre installation does not exist 不存在指定的JRE安装
开发过程中环境只要配置好了,如果没有出现什么意外的话JRE工作环境一般是不会有问题的。the specified jre installation does not exist 这个问题也算把我这菜鸟害得差点就重装了系统。特此谨记。。。当Eclipse启动项目时弹出个error:the specified jre installation does not exist 愣住了。。。。。出原创 2017-08-23 11:20:20 · 4642 阅读 · 0 评论 -
清除eclipse当前登录的SVN账户
Eclipse 中的svn只是一个插件。所以呢,如果想要清除当前svn的登录信息。删除当前登录的SVN用户信息,不是在eclipse中删除,而是,在SVN中删除!!!明白这个之后,就很简单了。Windows下: %APPDATA%\Subversion\auth\svn.simple (如: C:\Users\LiGuoliang\AppData\Roaming原创 2017-08-25 13:19:19 · 355 阅读 · 0 评论 -
Google的Java编程风格指南(Java编码规范)
与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。然而,这份文档主要侧重于我们所普遍遵循的规则, 对于那些不是明确强制要求的,我们尽量避免提供意见。1.1 术语说明在本文档中,除非另有说明:1、术语class可表示一个普通类,枚举类,接口或是annotation类型(@interface)2、术语comment只用转载 2017-07-27 14:47:55 · 277 阅读 · 0 评论