
Java
文章平均质量分 62
不坠青云之志
这个作者很懒,什么都没留下…
展开
-
Effective Java 第3版 创建和销毁对象分享
一 前言最近在看Effective Java 第3版的相关内容,这里做个学习总结,加深一下印象。后面会抽出时间持续更新。二 创建和销毁对象的阅读分享2.1 用静态方法代替构造器背景:平常我们在创建类的对象的时候一般都是直接通过new的方式创建,这样是最直接也是最简单的方式,但是随着我们的类功能的不断扩展,字段不断增加。直接new的方式会给我们带来一些问题。类的属性太多调用方不知道该传什么必要的参数。 有些工具类不需要频繁的创建,只需要创建一个对象就可以支持各种应用场景调用。 不支持原创 2022-05-17 17:03:17 · 6901 阅读 · 0 评论 -
java实现重复的DNA序列
一 题目描述:所有 DNA 都由一系列缩写为 'A','C','G' 和 'T' 的核苷酸组成,例如:"ACGAATTCCG"。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。leetcode链接:重复的DNA序列二 算法思路因为题目的特殊性,我们可以采用空间换时间复杂度的思想,把10个长度单位的字符串存在集合中,如果出现了重复元素,直接放到结果集里即可。三 算原创 2022-01-26 16:15:01 · 1079 阅读 · 0 评论 -
java实现下一个排列
一 题目描述:实现获取【下一个排列】的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。leetcode链接:实现下一个排列二 算法思路首先我们可以先在纸上尝试着用人体的思维去想怎么才能找到下一个更大的数,简单总结之后你可能找到以下的特点1 要先从权重小的位置开始找(也就是从个位找),拿个位去和前面的位置换。2 个位找不到..原创 2022-01-25 20:55:49 · 1053 阅读 · 0 评论 -
java实现不重复数组的全排列
一 算法思想思路:全排列可以理解是一个树的递归的过程,每一个递归过程中的叶子结点就是一种可能的排列方式。利用递归可以很好的帮我们实现下面这颗树的完成深度优先遍历,得到我们想要的全排列。二 编码实现 public static List<List<Integer>> fullArray(List<Integer> number) { List<List<Integer>> result = Lists.原创 2022-01-25 16:05:58 · 1469 阅读 · 0 评论 -
并查集的概念和实际应用
一 并查集的概念概念:并查集是一种树形的结构,这种数据结构是把一些元素按照一定的关系组合在一起。比如在亲戚关系的场景下,并查集是由一个跟节点(根节点指向自己)和所有他的子节点(可能是他的孩子节点或者子孙节点)组成。并查集的图解:特点:并查集(除了跟节点)所有节点都指向他们的父节点,跟节点指向自己常见用法:首先把一批数据按照特点(比如按照父子关系)拆分到不同的集合中,变成并查集,然后用于处理业务逻辑二 并查集在项目中的实际应用项目背景需要做一个通过excel导入商品类目..原创 2021-11-23 18:55:21 · 763 阅读 · 1 评论 -
java函数式、lambda表达式、Stream流的原理,关系和应用
一 背景jdk7到jdk8引入了很多新的特性,函数式接口,新的Date API,stream流,lambda表达式,接口默认方法等。在这里主要对函数式接口、lambda表达式、stream流做简单的记录学习。欢迎大家一起学习交流。二 函数式接口的概念函数式接口一句话总结:只有一个抽象方法的接口称为函数式接口。可以用【@FunctionalInterface】注解检验是否是函数式接口,在jvm进行编译的的时候会检查接口是否符合函数式接口规范。函数式接口的几点特征:函数式接口只有一个抽象..原创 2021-11-12 17:57:36 · 1196 阅读 · 0 评论 -
多线程的原理、实践、应用
1 多线程的介绍1.1 操作系统的演进过程批处理操作系统(单道和多道):计算机能够自动地、成批地处理一个或多个用户的作业。不过单道批处理系统在进行I/O操作的时候,CPU资源是没有被利用的,为了能够更高效的利用cpu资源,多道批处理系统诞生了。单道批处理操作系统工作图示:多道(两道)批处理操作系统工作图示:分时操作系统批处理系统对于用户需要的计算机系统来说缺少交互性,工作之间的独立性。以及能在预期时间内完成用户需要的任务。分时操作系统产生了,它支持多用户交互式操作系...原创 2021-10-28 21:00:18 · 1288 阅读 · 0 评论 -
Apache POI处理EXCEL中的图片
1 背景最近做需求的时候需要做一个导入的功能,通过调研一些java导入的第三方jar包,最后选择了阿里的easyExcel,按照约定的规范能够简单快速的处理excel中的信息,通过@ExcelProperty注解和表头对应解析出excel的信息,使用的过程中发现了两个问题。第一个是如果excel中某一行完全是空行的话,excel会直接跳过这一行信息(不知道为什么要这么设计,对于某些业务来说带来一定的不方便性。) easyExcel不支持导入图片的信息,完全处理不了图片的信息。在github上也得.原创 2021-09-28 17:25:49 · 2681 阅读 · 5 评论 -
@Valid使用技巧 & 踩坑记录
一 背景在开发过程中,对于一些参数的校验,参数非空,参数长度限制,参数范围限制,嵌套结构参数校验等情况,用@Valid注解会省去很多手写的参数校验,简单又高效。二 使用样例和姿势1 校验的请求类import io.swagger.annotations.ApiModelProperty;import java.util.List;import javax.validation.Valid;import javax.validation.constraints.Max;impor..原创 2021-04-27 12:02:02 · 873 阅读 · 0 评论 -
搭建springboot服务 & 踩坑记录
一搭建springboot服务搭建一个springboot服务比较简单,推荐一篇朋友写的博客:使用idea创建一个SpringBoot项目想做做简单测试的同学看上面推荐的博客就可以了因为我需要利用工作现有的一些能力,所以需要安装springboot1.x版本,起初是打算新建个项目...原创 2021-04-02 16:51:43 · 329 阅读 · 0 评论 -
本地consul服务发现问题解决
一 背景难得迎来一次双休,欢乐了双休之后回来上班,突然发现项目不能启动了,服务发现一直是500,然后开始各种排查.二 过程1:配置文件指定boe环境2:redis问题3:environment virables加入变量参数4:配置文件加入变量参数5:建立文件,二进制文件转化三 收获1:在查问题的过程中,看了下公司封装consule的注册过程2:学了下@bean的知识3:@Value("#{}")与@Value("${}")的区别...原创 2020-12-18 20:22:16 · 1624 阅读 · 0 评论 -
搭建thrift服务 & logback配置日志文件路径
一 背景主要记录工作中的两个问题。搭建thrift服务和logback文件配置的服务器路径问题,自己在工作闲暇的时候想自己实现下提供thrift服务,之前做需求的时候一直是接入别人的thrift服务,java服务先编译下thrift客户端的文件,在启动类中注入我们需要的服务。python服务利用euler框架集成别人的thrift服务。所以想自己实践下利用公司已有的资源怎么提供一个thrift服务给别人调用。logback配置路径问题是在搭建好服务之后发现的,这里也mark下。二 搭建thrif..原创 2020-11-24 12:27:00 · 647 阅读 · 0 评论 -
postman使用tips
postman使用tips一 浏览器或自己pc系统的请求信息放在postman中1⃣️ copy curl2⃣️ import raw text二 请求中自动带上cookie1⃣️点击Cookies2⃣️添加附带cookie的域名3⃣️添加附带的cookie信息4⃣...原创 2020-11-10 14:39:59 · 204 阅读 · 0 评论 -
@JsonProperty使用详解
@JsonProperty使用详解一 背景在熟悉代码的过程中,看到了@JsonProperty注解的使用,查了下使用的方法,但是总觉得欠缺了点什么东西,所以自己实践了下这个注解的作用,由于时间原因没有熟悉究竟底层是怎么实现的.所以这里只是对使用和注意事项做下分析,底层实现的话这里先mark下.二 使用方式@JsonProperty注解主要用于实体类的属性上,作用可以简单的理解为在反序列化的时候给属性重命名...原创 2020-08-17 14:37:42 · 135237 阅读 · 3 评论 -
linux安装thrift0.9.2 maven不能下载依赖
linux执行sh build.sh时倒入依赖失败一 背景同事们搭建的一个java项目(父子工程项目,一个父工程,三个子工程),现在要介入进来开发.配置环境时遇到很多问题一 问题 原因 解决方法1 编译thrift版本需要安装0.9.2原因:thrift 0.9.2版本需要 openssl 1.0.2,但是19年底homebrew移除了对openssl 1.0.2的支持(官方参考:https://github...原创 2020-07-21 14:57:54 · 587 阅读 · 0 评论 -
Linux(Debian)下快速安装JDK
Linux下快速安装JDK1 安装yum原创 2020-07-07 11:00:34 · 1579 阅读 · 0 评论 -
Mapstruct使用介绍
Mapstruct使用介绍一:使用背景我们在读库之后(po->dto),返回前端数据(dto->vo)的需要转换函数,这时候我们一般会有以下几种方式1:手动编写convert函数2:利用反射工具进行映射(spring的BeanUtils, fastjson的JSON.parseObjec...原创 2019-10-24 20:11:40 · 3014 阅读 · 0 评论 -
Thrift 自测本地Thrift服务
Thrift 自测本地Thrift服务一:自测需求小组小伙伴要求我的业务模块提供一个RPC接口。之前并没有用过Thrift的RPC调用。经过一系列的研究和讨教终于是完成了整个流程。二:自测过程1:由于小伙伴们任务都比较紧张,所以我自己先约定好接口参数,返回结果。这里面有如下步骤业务端部署:1⃣️在IDL...原创 2019-10-17 21:27:14 · 1666 阅读 · 0 评论 -
java静态内部类加载顺序
静态内部类加载顺序我们先来区分一下两个概念:类加载、加载。类加载的过程包括加载,初始化,验证,解析,准备,初始化等五个过程。加载是类加载的一部分。区分完这两个概念之后我们再来看下面的问题。我们声明一个类,这个类有个内部静态类。还有主函数,当我们启动程序之后,运行java application......原创 2018-12-13 21:43:01 · 10070 阅读 · 6 评论 -
JDK,JRE,与JVM之间的区别和联系
JDK,JRE,与JVM之间的区别和联系作为一个java程序员,你可能会很熟悉java的各种技术,java的数据结构,java的设计模式等等。但是当被问到jdk,jre和jvm之间有什么区别呢?可能我们一时间又会没有反应过来。我们来梳理一下他们之间的概念以及他们之间的区别和联系。1:基本概念jdk(Java Development...原创 2018-12-18 17:28:20 · 541 阅读 · 0 评论 -
java本地缓存 google guava
java本地缓存 google guava本地缓存产生背景:本地缓存是指在我们本地的物理空间开辟出一片物理空间,专门用来存储我们需要向服务器端频繁需要的数据,比如前端页面需要频繁的向后台访问某些数据,这时候我们每次都去数据库查找数据再返回给前台就会有很大的开销。因为会涉及到磁盘I/O。但是如果我们...原创 2018-12-11 22:09:25 · 3008 阅读 · 0 评论 -
java内存模型中重排序
java内存模型中重排序在了解重排序之前我们先来了解下java多线程之间是怎样对共享数据通信的。当有多个线程对共享变量访问(读)的时候,我们要保证共享数据的统一就需要有jmm(java内存管理里模型)来进行管理。比如有一个共享变量,线程A对共享变量更改之后在线程B读到的是线程A更新的值。JMM怎么控制的呢?...原创 2018-12-11 20:43:26 · 262 阅读 · 0 评论 -
javaweb服务器分布式集群解析
javaweb服务器分布式集群一:服务器类型服务器的分布式和集群都是由集中式发展而来的。但是分布式和集中式会配合使用。我们用图来了解下工作模式。集中式:分布式:集群:我们在搭建网站的时候,为了及时响应用户的请求,尤其是高并发请求的时候,我们需要搭建分布式集群来处理请求。我们一个服务器的处理...原创 2018-12-22 16:09:54 · 1587 阅读 · 0 评论 -
java中的I/O与NIO区别
java中的I/O与NIO区别一、I/O于NIO的基本概念:I/O即普通I/O,是我们比较常用的一种形式,I/O又称阻塞IO。在默认情况下,文件操作都是阻塞IO。当线程需要读取文件的时候,发现文件没有准备好,就会进入阻塞状态。数据准备好了之后,就会唤醒该线程,线程进入等待状态,等待执行。轮到该进程执...原创 2018-12-21 17:51:08 · 1180 阅读 · 0 评论 -
java反射中的Class方法
java反射中的Class方法java中有一种特殊的Class类,Class类记录了class类的类信息,如class的成员函数,成员方法等。通过反射,我们可以得到类的Class信息,然后可以用Class对象的调用方法查看类的各种信息。这么说有点绕,我们来简单实现以下了解下反射的实现方法:java父类:...原创 2018-12-06 13:50:39 · 249 阅读 · 0 评论 -
红黑树的应用及增删改查
红黑树的应用及增删改查我们接触过数据结构的应该二叉树这种数据结构,他是对链表的改良版,防止每次遍历的最大的时间复杂度达到O(n)理想情况下,二叉树的查找效率是O(log n),但是当数据倾斜的时候,数据是有序的插入到二叉树的时候,这时候二叉树就退化成了链表,这时候便出现了AVL树,红黑树,B树来改良这种数据结构。今...原创 2018-12-09 21:36:25 · 1480 阅读 · 0 评论 -
java中GC的回收算法和垃圾回收器
java中GC回收算法java可以说是一个省心的语言,因为你在用java对象的时候根本不需要考虑他的内存分配和回收问题。就像我们的window10一样,什么内存分配的根本不用管。我是最高级的用户,需要去考虑那些么?操作系统说了:我来!!!操作系统对内存的管理就非常到位了。程序分成多少段...然后通过...原创 2018-12-06 22:43:23 · 237 阅读 · 0 评论 -
java通过反射获取的Field得到类实例的域信息
java通过反射获取的Field得到类实例的域信息首先我们要了解访问java类的实例域(成员变量)有两种方式:1、通过我们写的getter,setter方法访问类的成员变量,这两个方法可以我们自己写,也可以用编辑器自动生成。2、通过反射的方式访问类的成员变量。这里我们来实现一下用反射访问实例域。先看看代码实现TestReflecti...原创 2018-12-06 18:07:27 · 5416 阅读 · 3 评论 -
java锁的分类和锁的内存语义
java锁的分类和锁的内存语义java锁的分类:java对象锁有两种:对象锁、类锁。对象锁:在非静态方法上加锁。声明了一个对象锁。类锁:在静态方法上加锁,声明了一个类锁。经过大量的实验总结出以下结论:1、想要保证能够锁住对象,需要在对应的的普通方法上加上synchronized关键字。2、想要保证能够...原创 2018-12-13 20:35:45 · 252 阅读 · 0 评论 -
java中的序列化和反序列化
java中的序列化和反序列化一:序列化和反序列化的概念:先来介绍下在java中序列化和反序列化的含义:1、对象序列化:是指把对象(包括类对象,字符串等)序列化成字节序列。2、把字节序列转化成对象。二:序列化的应用:1、对象持久化到硬盘:我们在java运行的过程中把想要持久化的对象存储在磁盘中或者我们在搭建...原创 2018-12-20 17:49:20 · 678 阅读 · 0 评论 -
java中HashMap、HashTable、CurrentHashMap的区别
java中HashMap、HashTable、CurrentHashMap的区别首先我们要知道有两种形式的集合。继承于collection接口的集合,继承于map的接口的集合。我们这里讨论的都是继承map接口的结合,以(key,value)的形式存储数据。实际上后缀是map的集合类最终实现的都是map接口。HashMap是我们比较常用的数据结构,我们可...原创 2018-12-20 15:37:01 · 2650 阅读 · 4 评论 -
Java面试题 类的构造函数的执行顺序问题
面试的时候会经常提到构造函数的执行顺序问题先来看看这一段构造函数的执行顺序。package csdn;public class ParentClass { static int num = 0; String name = "qqqqqq"; static String name2 = "wwwwwwwwwww"; static ParentClass parentClass ...原创 2018-10-19 11:48:14 · 2171 阅读 · 0 评论 -
java堆排序
java堆排序一:思想引入:如果要你实现两个有序数组的合并,你有什么思路。大多数人的思路是引入一个新的数组,长度为前两个数组的和,然后while判断比较两个数据的大小,依次插入。堆排序思想:堆排序也是这个思路,先把整个大数组通过递归拆分成很小的单元,再逐渐合并这些很小的单元...原创 2019-08-15 11:50:56 · 131 阅读 · 0 评论 -
ip和int(Long)之间的相互转换
ip和int(long)之间的相互转换一:ip变成long public static Long IpConvertToInt(String ip){ String ipStr[] = ip.split("\\."); Long result = 0L;int j;int ...原创 2019-08-13 21:15:14 · 848 阅读 · 1 评论 -
Google Guava中Joiner用法
Google Guava中Joiner用法一:Google Guava的下载地址链接:Google Guava的jar包下载地址:https://pan.baidu.com/s/1B2IjhOlrulOgwceG1TehKQ 密码:2qha1:java application项目引入下载的jar包。2:web项目直接拷贝到lib...原创 2019-06-28 14:02:34 · 5520 阅读 · 2 评论 -
java中Integer.getInteger()、Integer.valueOf()、Integer.parseInt()的区别
Integer.getInteger()、Integer.valueOf()、Integer.parseInt()的区别一:三种方法的介绍Integer.getInteger():1:用法是根据指定的名称得到系统属性的整数值。第一个参数将被认为是系统属性的名称。属性值字符串将被解释成一个整数,并且以表示这个值的Integer对象形式返回。2:注意事项Intege...原创 2019-06-24 19:52:57 · 8391 阅读 · 0 评论 -
java设计模式--单例模式
java设计模式--单例模式一:单例模式定义:单例模式:一个类只创建一个对象,并且提供一个其他类访问该对象的点。这样说有些抽象,其实就是这个类的构造函数设置为私有的,然后提供一个方法以便于共用该类的一个对象。下面简单介绍一下单例模式的几种实现方式以及优缺点二:单例模式的实现:1、类加载的时...原创 2019-02-27 21:37:45 · 304 阅读 · 0 评论 -
tcp三次握手和四次挥手
tcp三次握手和四次挥手OSI七层模型:在这里不详细介绍各个层的实际应用,举个例子来熟悉下各层。这里以qq为例:qq界面是应用层关注和管理的。表示层则把聊天的内容变成计算机能过够读懂的数据。会话层可以理解为同时打开了多个聊天窗口。这三层都属于软件层面。而传输层是指通过端口传输数据的层,一般...原创 2019-01-02 22:28:10 · 201 阅读 · 0 评论 -
java实现自定义类实现HashMap,Arraylist,Queue数据结构
java实现自定义类HashMap,ArrayList,Queue结构我们可能了解hashmap的用法,了解过底层的源码,jdk1.7底层采用拉链法实现,jdk1.8中采用红黑树。这里我们用jdk1.7中的方式实现hashmap数据结构。用结点类实现ArrayList和Queue。自定义类实现Queue结构:Queue.java:...原创 2018-12-25 22:16:20 · 565 阅读 · 0 评论 -
java线程池应用场景 数据分析和网络爬虫
java线程池应用场景 数据分析和网络爬虫一:java多线程应用我们在实际的开发中经常会用到多线程,比如我们对磁盘文件的读写,为了提高对cpu的利用率,我们会在很多地方用到多线程,:1、比如我们可能会启动多个线程来读写磁盘。我们通过开启多个线程来不断轮询对应的设备寄存器是否准备好数据,没有准备好这个线程就去处理别的东西,然后再...原创 2018-12-25 12:22:21 · 1104 阅读 · 0 评论