【JavaSE】
文章平均质量分 68
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
一棵树~
just do it
展开
-
ArrayList及扩容机制
ArrayList就是动态数组,其实就是Array的复杂版本,它提供了动态的添加元素和删除元素的方法,同时实现了Collection 和 List接口,能够灵活的设置数组的大小。ArrayList底层是以数组实现,是一种随机访问模式,再加上它实现了RandomAccess接口,因此在执行get方法的时候很快。ArrayList在顺序添加元素的时候非常场...原创 2022-06-06 16:00:21 · 828 阅读 · 0 评论 -
Java8 Stream处理List对象常用技巧
====过滤出集合对象中某个字段满足条件的集合//获取所有建筑 及下级List<BuildingAndChildrenVo> buildings = buildingService.getBuildingAndChildren(projectId, buildingPageDTO.getName());if (CollectionUtil.isNotEmpty(buildings)) {//过滤出建筑 List<BuildingAndChildrenVo> buildin.原创 2022-01-19 14:38:10 · 1027 阅读 · 0 评论 -
Java日常开发的问题
Calendar calendar = Calendar.getInstance();calendar.set(2019, Calendar.DECEMBER, 31);Date testDate = calendar.getTime();SimpleDateFormat dtf = new SimpleDateFormat("YYYY-MM-dd");System.out.println("2019-12-31 转 YYYY-MM-dd 格式后 " + dtf.format(testDate.原创 2021-07-24 14:59:28 · 446 阅读 · 0 评论 -
Java自定义注解实现
import java.lang.annotation.*;/** * @description * @date: 2021/06/17 * @author: myron **//** * ElementType.ANNOTATION_TYPE 可以给一个注解进行注解 * ElementType.CONSTRUCTOR 可以给构造方法进行注解 * ElementType.FIELD 可以给属性进行注解 * ElementType.LOCAL_VARIABLE 可以给局部变量进行注解.原创 2021-06-17 00:18:43 · 277 阅读 · 0 评论 -
SimpleDateFormat线程不安全问题
import com.google.common.util.concurrent.ThreadFactoryBuilder;import org.apache.tomcat.util.threads.ThreadPoolExecutor;import java.text.SimpleDateFormat;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import java.util.Calendar原创 2021-06-10 10:11:10 · 164 阅读 · 0 评论 -
Java实现动态加载外部jar包到classpath
在项目开发过程中我们有时候需要动态的添加外部jar包,但是具体的业务需求还没有遇到过,因为如果动态添加外部jar包后,我们就需要修改业务代码,而修改代码就需要重新启动服务,那样好像就没有必要动态添加外部jar包了,怎么样才能不重新启动服务器就可以使用最新的代码我没有找到方法,如果各位知道的话给我点建议,回归主题,实现动态添加外部jar包到classpath的方法如下:public class DispatchCoreServiceImpl implements DispatchCoreService原创 2021-05-21 16:54:28 · 4142 阅读 · 0 评论 -
Java接口设计建议
目录一 、规范性建议1、职责原则2、单一性原则3、协议规范4、路径规则6、域名7、跨域考虑8、api版本10、返回数据格式11、安全性原则12、可扩展性原则13、定义api界限14、定义api返回码二 、反规范性建议1、Request2、Responce三 、实例1、定义统一参数2、定义接口授权类别3、用户接口4、用户登录在设计接口时,有很多因素要考虑:接口的业务定位 接口的安全性 接口的可扩展性 接口的稳定性原创 2021-01-23 12:05:08 · 843 阅读 · 1 评论 -
Java8使用Optional取代null
1、前言相信不少小伙伴已经被java的NPE(Null Pointer Exception)所谓的空指针异常搞的头昏脑涨,有大佬说过“防止 NPE,是程序员的基本修养。”但是修养归修养,也是我们程序员最头疼的问题之一,那么我们今天就要尽可能的利用Java8的新特性 Optional来尽量简化代码同时高效处理NPE(Null Pointer Exception 空指针异常)2、认识Optional并使用简单来说,Opitonal类就是Java提供的为了解决大家平时判断对象是否为空用 会用 null原创 2021-01-17 23:50:37 · 367 阅读 · 1 评论 -
Logback配置文件详解
一、序言通过阅读本篇文章将了解到:1.日志输出到文件并根据LEVEL级别将日志分类保存到不同文件 2.通过异步输出日志减少磁盘IO提高性能 3.异步输出日志的原理二、配置文件logback-spring.xmlSpringBoot工程自带logback和slf4j的依赖,所以重点放在编写配置文件上,需要引入什么依赖,日志依赖冲突统统都不需要我们管了。logback框架会默认加载classpath下命名为logback-spring或logback的配置文件。将所有日志都存储在一个文件中文件原创 2021-01-15 01:18:59 · 1643 阅读 · 0 评论 -
Java开发规范(3)代码规范
一、后端代码规范1、Controller层开始必须为权限判断(尤其是编辑和新增);2、Controller层不出现 try...cache...,只出现throw new XXXException(code); 统一处理;3、getList的请求建议封装Condation对象,而不是一个个变量;4、有数据修改的,必须 method=post;user、company信息建议在manager层处理;5、Manager层是事务层,对于一些不能分割的操作放在该层的方法中,不可分割的业务逻辑不.原创 2021-01-12 11:38:28 · 172 阅读 · 0 评论 -
Java开发规范(2)规避Bug
本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!目录1、修改完代码,记得自测一下2、方法入参尽量都检验3、修改老接口的时候,思考接口的兼容性。4、对于复杂的代码逻辑,添加清楚的注释5、使用完IO资源流,需要关闭6、代码采取措施避免运行时错误(如数组边界溢出,被零除等)7、尽量不在循环里远程调用、或者数据库操作,优先考虑批量进行。8、写完代码,脑洞一下多线程执行会怎样,注意并发一致性问题9、获取对象的属性,先判断对象是否为空1原创 2021-01-10 23:50:33 · 280 阅读 · 1 评论 -
Java开发规范(1)项目规范
本篇规范基于阿里巴巴、华为的开发手册,添加了我们团队的开发风格规范,补充了一些细节。感谢前人的经验和付出,让我们可以有机会站在巨人的肩膀上眺望星辰大海。规范不是为了约束和禁锢大家的创造力,而是为了帮助大家能够在正确的道路上,尽可能的避免踩坑和跑偏。规范可以让我们无论单枪匹马还是与众人同行的时候都能得心应手。规范可以让我们在面对日益变态的需求和做代码接盘侠的时候,更优雅从容。规则并不是完美的,通过约束和禁止在特定情况下的特性,可能会对代码实现造成影响。但是我们制定规则的目的:为了大多数程序员小伙伴可原创 2020-12-28 23:24:07 · 553 阅读 · 0 评论 -
中文乱码问题整理总结
1、字符编码在计算机中任何数据都是以二进制存储的,要存储一个字符就要对它进行编码,用一个二进制数与这对应,这种对应的规则,就是字符的编码。编码的规则有很多 种,一种规则所编码的“字符”的集合就叫做“字符集”。在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的,因此,平时我们所说的“字符 集”,例如GB2312、GBK和JIS等,除了有“字符的集合”这层含义外,同时也包含了“编码”的含义。最早出现的编码是ASCII码,因为早期计算机系统只支持英语。后来每个国家(或区域)规定了计算机信息交原创 2020-05-26 00:43:26 · 24569 阅读 · 0 评论 -
API接口优化总结
1、一定要绝对避免循环查数据库和缓存(PS:循环里面就不能有查询缓存,更不能有查询数据库的操作,因为循环的次数没法控制)2、对于API接口的话,一般都是直接查缓存的,没有查数据库的3、多用批量查询,少用单条查询,尽量一次查出来4、对于使用阿里云,要留意一下相应产品的配置,该花的钱还是得花,同时,千万要记得正式环境中使用相应产品的内网地址5、注意连接池大小(包括数据库连接池、Redis缓存连...原创 2020-04-23 11:27:02 · 489 阅读 · 0 评论 -
JDK1.8工作中最常用的14个Stream详细小示例
一、简介java.util.Stream 表示能应用在一组元素上一次执行的操作序列。Stream 操作分为中间操作或者最终操作两种,最终操作返回一特定类型的计算结果,而中间操作返回Stream本身,这样就可以将多个操作依次串起来。Stream 的创建需要指定一个数据源,比如 java.util.Collection的子类,List或者Set, Map不支持。Stream的操作可以串行strea...原创 2020-03-22 13:34:07 · 397 阅读 · 0 评论 -
java.lang.UnsupportedOperationException问题
1、异常代码:public static void main(String[] args) { String[] arr = new String[]{"a", "b", "c"}; //在使用Arrays.asList转化数组成为list的时候,如果做添加操作,不能直接Arrays.asList() List<String> list = Arrays...原创 2020-03-13 22:32:40 · 767 阅读 · 0 评论 -
nio,aio,bio的区别
IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。IO/BIOBIO就是指IO,即传统的Blocking IO,即同步并阻塞的IO。这也是jdk1.4之前的唯一选择,依赖于ServerSocket实现,即一个请求对应一个线程,如果线程数不够连接则会等待空余线程或者拒绝连接。所以用这种方式,在高并发情况下效率是很低的,也不可靠,一般只应用于连接数比较小且固定架...原创 2018-09-06 19:04:44 · 217 阅读 · 0 评论 -
Java IO 与 NIO系列文章
IO流学习总结 一 Java IO,硬骨头也能变软 二 java IO体系的学习总结 三 Java IO面试题 NIO与AIO学习总结 一 Java NIO 概览 二 Java NIO 之 Buffer(缓冲区) 三 Java NIO 之 Channel(通道) 四 Java NIO之Selector(选择器) 五 Java NIO之拥抱Path和Files ...转载 2019-01-18 09:48:30 · 522 阅读 · 0 评论 -
深入理解Java类型信息及并发编程
1、深入理解Java类型信息(Class对象)与反射机制2、深入理解Java枚举类型(enum)3、深入理解Java注解类型(@Annotation)4、深入理解Java类加载器(ClassLoader)5、深入理解Java并发之synchronized实现原理6、Java并发编程-无锁CAS与Unsafe类及其并发包Atomic7、深入理解Java内存模型(JMM)及vo...转载 2019-01-27 00:15:36 · 177 阅读 · 0 评论 -
Java和C++细节上的差异
Java和C++在细节上的差异(一)http://www.cnblogs.com/stephen-liu74/archive/2011/07/27/2118660.html一、基本程序设计结构二、对象与类三、继承Java和C++在细节上的差异(二)http://www.cnblogs.com/stephen-liu74/archive/2011/08/07/2129804.ht...转载 2019-01-27 14:09:59 · 244 阅读 · 0 评论 -
JavaSE复习(二)
目录:1、Java中的反射1.1、说说对Java中反射的理解2、Java中的动态代理2.1、写一个ArrayList的动态代理类2.2、动静态代理的区别,什么场景使用?3、Java中的设计模式&回收机制3.1、你说知道的设计模式有哪些?3.2、单例设计模式3.3、工厂设计模式3.4、建造这模式(Builder)3.5、适配器设计模式3.6、装...原创 2019-02-17 00:17:54 · 663 阅读 · 0 评论 -
JavaWeb复习(一)
目录一、JDBC技术1、说下原生jdbc操作数据库的流程?2、什么要使用PreparedStatement?3、关系数据库中连接池的机制是什么?二、Http协议1、http的长连接和短连接2、HTTP/1.1与HTTP/1.0的区别3、http常见的状态码有哪些?4、GET和POST的区别5、http中重定向和请求转发的区别三、Cookie和Sessio...原创 2019-03-10 16:27:49 · 674 阅读 · 0 评论 -
常用消息队列对比、选择参考和消息队列认知
目录:1、消息队列之常用协议1.1、AMQP1.2、MQTT协议1.3、STOMP协议1.4、XMPP协议2、消息队列之模型3、消息队列的组成模块4、常用消息队列介绍4.1、RabbitMQ4.2、ActiveMQ4.3、RocketMQ4.4、Kafka5、结论:1、消息队列之常用协议1.1、AMQPAMQP即Advanced ...原创 2019-01-01 23:15:25 · 1314 阅读 · 0 评论 -
Java8新特性(五)新日期时间的API
1、新时间日期APIjava.time – 包含值对象的基础包 java.time.chrono – 提供对不同的日历系统的访问 java.time.format – 格式化和解析时间和日期 java.time.temporal – 包括底层框架和扩展特性 java.time.zone – 包含时区支持的类说明:大多数开发者只会用到基础包和format包,也可能会用到temporal...原创 2018-12-24 14:15:18 · 320 阅读 · 0 评论 -
Java8新特性(四)Stream API
目录:1、Stream概述1.1、为什么要使用Stream API1.2、什么是 Stream2、Stream 的操作三个步骤2.1、创建Stream2.2.1、由数组创建流2.2.2、由值创建流2.2.3、由函数创建流:创建无限流2.2、Stream的中间操作2.2.1、筛选与切片2.2.2、映射2.2.3、排序2.3、Stream 的终止...原创 2018-12-18 18:24:51 · 305 阅读 · 0 评论 -
集合源码分析(二)LinkedList集合
1、LinkedList概述1、链表在内存中有什么特点?链表在内存中不是一个连续的空间。靠前一个记录后一个的地址值,后一个记录前一个的地址值。2、链表为什么查询慢,增删快?查询:先要判断你要查的这个元素,是靠头近还是靠尾近。如果是靠头近,那么从第一个开始遍历;如果靠尾近,那么从最后一个开始遍历。A:多个节点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的右手拉住...原创 2018-09-28 16:54:24 · 175 阅读 · 0 评论 -
Java十大低级错误总结(二)
目录:6、对文件、IO、数据库等资源进行操作后没有及时、正确进行释放。7、循环体编码时不考虑性能,循环体中包含不需要的重复逻辑。8、数据类没有重载toString()方法。9、嵌套使用try-catch,或者try-catch后面没有必要的finally操作。10、equals操作时没有将常量放在equals操作符的左边。6、对文件、IO、数据库等资源进行操作后没有及时、正...原创 2018-09-26 16:16:25 · 345 阅读 · 0 评论 -
Java十大低级错误总结(一)
目录:1、不能用“==”比较两个字符串内容相等。2、对list做foreach循环时,循环代码中不能修改list的结构。3、空指针异常。4、下标越界。5、将字符串转换为数字时没有捕获NumberFormatException异常。1、不能用“==”比较两个字符串内容相等。1.1、解读:两个字符串在比较内容是否相等的时候,如果使用“==”,当两个字符串不是指向内存中同...原创 2018-09-26 16:02:41 · 436 阅读 · 0 评论 -
java中的位运算
Java的位运算(bitwise operators)直接对整数类型的位进行操作,这些整数类型包括long、int、short、char和 byte,位运算符具体如下表: 运算符 说明 << 左移位,在低位处补0 ...原创 2018-09-26 15:28:36 · 160 阅读 · 0 评论 -
Java的泛型及实现
目录:1、泛型基础1.1、c++模板和java泛型的异同1.2、java泛型的好处2、类型擦除3、泛型的实现原理3.1、保证类型安全3.2、实现自动类型转换4、泛型中的继承关系5、泛型使用中的注意点5.1、运行时类型查询5.2、异常中使用泛型的问题5.3、不允许创建泛型类数组5.3、泛型类中的静态方法和静态变量5.3、类型擦除后的冲突参考...原创 2018-09-06 11:36:30 · 1025 阅读 · 0 评论 -
关于File.separator 文件路径:wind与linux下路径问题 .
https://www.cnblogs.com/qqzy168/archive/2013/06/14/3136168.html转载 2018-09-11 18:47:28 · 320 阅读 · 0 评论 -
集合源码分析(一)ArrayList集合
1、ArrayList 概述ArrayList 是 Collection 单例集合体系中使用率最多的一个集合。是 List 的第一个实现类,全面替代了 Vector 。底层是数组结构的.特点: 有序、有索引、可以重复。基本使用: ArrayList<Integer> al = new ArrayList<>(); al.add(1);...原创 2018-09-11 16:04:01 · 270 阅读 · 1 评论 -
java性能优化
目录:java优化的目的:java常见的优化场景: 1.开发过程中声明常量,不可继承类,不可重写方法,使用final 2.String,StringBuffer,StringBuilder 3.及时关闭io流,释放资源 4.减少变量重复计算 5.尽量使用懒加载 6.不要在循环中使用try…catch…,应该把其放在最外层 ...原创 2018-04-06 16:16:55 · 219 阅读 · 0 评论 -
JavaSE复习(一)
目录:1、&和&&的区别2、继承的概述及特点3、this和super的区别4、方法重写和方法重载的区别5、接口与抽象类的区别6、多态的前提和特点7、权限修饰符8. 集合的遍历方式9.常见几种集合的区别9.1、Collection和Map的区别9.2、ArrayList和Vector的区别?9.3、HashMap和Hashtab...原创 2018-04-06 01:25:29 · 617 阅读 · 0 评论 -
集合源码分析(三)Collections工具类
1、Collection和Collections有什么区别?Collection是集合体系的最顶层,包含了集合体系的共性。Collections是一个工具类,方法都是用于操作Collection。2、Collections方法分析:2.1、static void swap(List list, int i, int j) :将指定列表中的两个索引进行位置互换。//源码解析...原创 2018-09-29 14:07:07 · 261 阅读 · 0 评论 -
集合源码分析(四)HashSet集合
1、HashSet概述://无序、无索引、不可以重复。 A:存入集合的顺序和取出集合的顺序不一致 B:没有索引 C:存入集合的元素不能重复使用HashSet集合注意点:重写hashCode和equals方法。调用顺序: 规则:新添加到HashSet集合的元素都会与集合中已有的元素一一比较。 首先比较哈希值(每个元素都会调用hashCode()产生...原创 2018-09-29 14:37:47 · 276 阅读 · 4 评论 -
集合源码分析(五)TreeSet集合
1、TreeSet概述:TreeSet是Set的一个子类,TreeSet集合是用来对象元素进行排序的,同样他也可以保证元素的唯一。底层是二叉树算法实现。TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSet抽象类,实现了NavigableSet<E>, Cloneable, java.io.Serializable接口。TreeSet ...原创 2018-09-29 15:22:30 · 381 阅读 · 0 评论 -
Java8新特性(三)方法引用、构造器引用、数组引用
目录:1、方法引用1.1、对象 :: 实例方法1.2、类 :: 静态方法1.3、类 ::实例方法2、构造器引用2.1、介绍2.2、使用3、数组引用3.1、介绍3.2、使用1、方法引用若lambda体中的内容有方法已经实现了,我们可以使用"方法引用"(实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!)可以理解为方法引用是lambda表达式...原创 2018-12-18 10:59:30 · 262 阅读 · 0 评论 -
Java8新特性(二) 函数式接口
1、什么是函数式接口函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)。 我们可以在任意函数式接口上使用 @FunctionalInterface 注解,这样做可以检查它是否是一个函数...原创 2018-12-18 10:29:15 · 182 阅读 · 0 评论 -
Java8新特性(一) Lambda 表达式
目录:1、为什么使用 Lambda 表达式?2、Lambda 表达式语法3、类型推断4、实例4.1、入门案例4.2、替代匿名内部类4.3、使用lambda表达式对集合进行迭代4.4、用lambda表达式实现map4.5、用lambda表达式实现map与reduce4.6、filter操作4.7、与函数式接口Predicate配合Java 8 (又...原创 2018-12-18 09:54:18 · 361 阅读 · 0 评论