Java
文章平均质量分 57
l8947943
如果生命不是为了好玩,那还有什么意义。
展开
-
Comparable和Comparator的使用和细节
在日常的代码中,我们常常会用到排序,这时候就会用到Comparable和Comparator。先使用Comparable进行举例:定义ComparableUser 并实现Comparable接口public class ComparableUser implements Comparable<ComparableUser> { private int id; private int age; public ComparatorUser(){} publ.原创 2020-09-09 11:51:11 · 264 阅读 · 0 评论 -
使用缓存redis(cache-aside)保证数据的一致性
项目中常常会涉及到缓存的使用,但是引入缓存会带来一致性问题,需要考虑数据一致性处理。首先看一下操作逻辑,查询逻辑:更新或者删除逻辑在项目中,如果是cache-aside pattern模式,则会考虑使用先更新DB,再去删除cache的操作,原因分析如下:同时写数据库以及缓存数据,任何一个更新失败都会造成数据不一致。另外事务都成功,无论是先更新缓存还是再更新数据库,还是先更新数据库再更新缓存,这两种情况在并发的情况下也很容易出现双写不成功,操作时序如下图如果使用更新模式,先更新DB再更..原创 2020-09-04 11:41:48 · 1783 阅读 · 2 评论 -
JAVA中List转数组和数组转List
1. 遇到好多次这样的问题了,直奔主题,附带测试2. 数组转List:核心代码是Arrays.asList(arr),示例:import java.util.*;public class asLists { public static void main(String[] args) { // 此处需要注意基本数据类型和包装类的接收方式 int[] arr = {1,2,3,4,5}; Integer[] arr1 = {1,2,3,4,5};原创 2020-06-26 11:40:43 · 3053 阅读 · 0 评论 -
Java的Arrays.asList()踩坑
最近在看代码时候,发现使用Arrays.asList()和自己以前理解的不一样,遂作整理。首先先放个测试用例public class asLists { public static void main(String[] args) { Integer[] arr = {1, 2, 3, 4}; int[] arr1 = {1, 2, 3, 4}; String[] str = {"a", "b", "cc"}; char[] c.原创 2020-06-13 11:30:51 · 782 阅读 · 2 评论 -
关于redis与db不一致问题的思考总结
腾讯之前一直深挖这一部分,让我有幸深入思考了一部分,今天记起来这儿,做一点总结,感谢腾讯的压力让我深入理解关于不一致的问题:一般情况下,我们都是先同步数据库,然后再删除redis,当删除redis时出问题了,这样就会出现不一致问题于是,我们可以先删除缓存,再同步到数据库。这样,保证下次访问时候,先访问redis,没有数据,则请求DB,保证了Redis与DB的一致。当出错了,至少不会出现超卖现象,但是用户体验感很差这样做会出现问题,那就是下一次访问,DB还没更新完成,Redis请求到没有更新的DB.原创 2020-05-22 22:23:24 · 1462 阅读 · 1 评论 -
最近面试一些厂的面经整理(阿里,腾讯,字节等)
1. 经历了一个半月的时间学习,已拿到阿里,腾讯,字节,美团,oppo,(360剩下hr)的实习offer,总结一些面试内容,希望能对后来的面试人起到帮助2. 阿里(已通过)一面1.两道算法题:卖酒瓶问题,五瓶啤酒瓶子可以兑换一瓶,三个瓶盖可以兑换一瓶,n个酒瓶,可以喝多少次map村成String和String存成mapsynchronized和volatileHashmap和......原创 2020-04-11 10:11:46 · 21646 阅读 · 71 评论 -
JAVA之HashMap源码分析(详细注释)
1. 初次看源码的童鞋,需要静下心来一步步走,多尝试几次就可以,一定要稳住。2. 先理解什么是HashMap在JDK1.7和之前,HashMap使用的数据结构是数组+ 链表,JDK1.7之后,使用的数据结构是数组+ 链表/红黑树,红黑树的插入,查找,删除等操作,平均复杂度均为O(logn)。哈希表添加,删除,查找等操作,性能十分之高,不考虑哈希冲突,时间复杂度为O(1)即可完成。一般是我们k...原创 2020-04-05 10:52:47 · 735 阅读 · 0 评论 -
JAVA种Map的几种遍历方式
1. 让手撕代码的时候,突然忘记了遍历方式,特此进行整理2. 新建一个map Map<String, Integer> map = new HashMap<>(); map.put("1", 1); map.put("2", 2);2.1 使用map.keySet()进行遍历for (String key : map.keySet()) { System.o...原创 2020-04-01 11:52:26 · 423 阅读 · 0 评论 -
JAVA设计模式之代理模式动态代理
1. 什么是动态代理?动态代理在实现阶段不用关心代理谁,而是在运行阶段才指定代理哪一个对象。常见的有Spring中的AOP就用到了动态代理。而动态代理有两部分,JDK动态代理和CGlib动态代理。本次对jdk动态代理进行整理2. 动态代理2.1 代理举例还是曾经的例子,我们个人打游戏太累,找个代练给我们上分,这就是代理。结构如图:2.2 创建接口IGamePlayerpublic ...原创 2020-03-29 12:54:33 · 499 阅读 · 0 评论 -
JAVA设计模式之代理模式静态代理
1. 什么是代理模式?官方定义是:为其他对象提供一种代理以控制对这个对象的访问。2. 代理案例举个例子,我们正常玩游戏,需要个人登录游戏账号,然后进行升级,这是一件漫长而又艰辛的事情,我们无法开外挂,因为要封号,于是我们找到代理厂家,沟通后代理商登录你的游戏账号进行升级,这就是代理3. 静态代理创建一个接口,然后创建被代理的类实现该接口并且实现该接口中的抽象方法。之后再创建一个代理类,...原创 2020-03-28 21:15:47 · 434 阅读 · 0 评论 -
JAVA设计模式之模板方法模式
1. 什么是模板方法模式? 定义一个操作中的算法的框架,将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重新定义该算法的某些特定步骤。2. 模板方法结构图3. 开始撸代码,举个连接数据库的例子(车辆模型)3.1 创建一个AbstractClass抽象类public abstract class AbstractClass { protected ab...原创 2020-03-27 17:52:12 · 410 阅读 · 0 评论 -
JAVA设计模式之工厂模式
1.什么是工厂模式?用于定义一个用于创建对象的接口,让子类决定实例化哪一个类。主类只需要访问工厂拿东西即可。2. 简单工厂模式开始撸代码:<code>2.1 创建一个接口</code>...原创 2020-03-26 22:45:06 · 400 阅读 · 0 评论 -
JAVA设计模式之单例模式
1.什么是单例模式单例模式的意思就是只允许存在一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,避免频繁创建对象,节约内存,这个类称为单例类。2. 前提知识1. static修饰的成员变量或者方法,独立于该类的任何对象。它不依赖类特定的实例,被类的所有实例共享,只要这个类被加载,该成员变量或方法就可以通过类名去进行访问,它的作用是,不用创建对象就可以调...原创 2020-03-26 09:11:32 · 356 阅读 · 0 评论 -
JAVA位运算题有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来?
1. 这个题目源自于位运算时候看到的问题,题目可以做个简化如: 有5个随机数,范围在0-9之间,写算法将不在随机数中的数进行求出来。有随机数[4, 8, 7, 5, 7],则不在其中的随机数为0 1 2 3 6 92. 思路常规思路就是开辟一个长度为10的数组,将随机数遍历并放入数组指定的索引位置,并改变对应索引的值为1,则值为0索引为目标不存在的数。 假设我们开辟的是int型数组,...原创 2020-03-24 10:19:30 · 1015 阅读 · 0 评论 -
JAVA之IOC控制原理
1. IOC的基础知识背景:IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。这样对象和对象之间有着复杂的依赖关系,所以才有了控制反转这个理论。2. 什么是IOCIoC是Inversion of Control的缩写,翻译成“控制反转”,即控制不再有对象之间相互调用进行,而是有IOC容器进行,模块只需要做好自...原创 2020-03-20 22:14:00 · 3134 阅读 · 0 评论 -
java通俗讲解的知识点整理
1. volatile关键字的讲解:传送门2. transient关键字的讲解:传送门3. synchronized关键字的讲解:传送门原创 2020-02-24 14:56:53 · 4275 阅读 · 0 评论 -
Java关键字transient和序列化问题
1. 问题描述简述java中的transient关键字,并说说序列化。2. 为了搞清楚transient,先从序列化说起。什么是序列化?Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,也可用于网络传输。常需要让我们的实体类实现Serializable接口,目的就是为了让其可序列化。什...原创 2020-02-23 22:33:53 · 794 阅读 · 0 评论 -
java中函数式编程及使用
1. 在遇到这个问题之前,我并不理解函数式编程有什么有点,Lambda形式的代码到底比普通方法的优势到底在哪里,我一直不理解,看到一个小例子,做一总结2. 针对日志打印问题做一个举例目标:1. 判断日志级别2. 根据级别决定是否显示日志3. 普通方法:public class DemoLog { public static void showLog(int l...原创 2020-02-07 19:13:42 · 911 阅读 · 1 评论 -
java中函数式接口及使用
1. 什么是函数式接口:有且仅有一个抽象方法的接口(注:一般会出现一个名词叫做“语法糖”,即使用更加方便而原理不变的代码语法,如Lambda可以认为是匿名内部类的语法糖)2. 定义其实就是在一个接口中有一个抽象方法的接口,称为函数式接口,当然接口可以包含其他的方法(默认、静态、私有)示例代码:@FunctionalInterface// 定义一个接口,只包含一个抽象方法p...原创 2020-02-07 18:55:18 · 2063 阅读 · 0 评论 -
深入理解public static <T> T max(Collection<? extends T> coll,Comparator <? super T> comp)
前几天看源码,遇到一段代码:public static <T> T max(Collection<? extends T> coll,Comparator<? super T> comp){}给我看的一脸懵逼,今天整理完泛型后重新理解,终于能看懂了解释第一个位置的 < T > 表示告诉虚拟机,一会我在参数中将要使用T类型的数...原创 2020-02-03 15:02:03 · 1018 阅读 · 0 评论 -
java泛型通配符<? extends T>和<? super T>的理解
1. 什么是泛型通配?当使用泛型类或者泛型接口时候,传递数据过程中,泛型类型不确定, 则可以通过<?> 来匹配。一旦使用通配符,只能使用Object中共性方法。2. 使用通配符<?>示例public class GenericDemo { public static void main(String[] args) { ArrayList<...原创 2020-02-03 14:35:04 · 1060 阅读 · 0 评论 -
java泛型问题的总结
1. 什么是泛型?泛型是JDK 5中引入的一个新特性,泛型提供了编译时类型安全监测机制,该机制允许程序员在编译时监测非法的类型。说白了就是 更好的安全性和可读性。2. 泛型正常分为三类1. 泛型类2. 泛型方法3. 泛型接口3. 泛型类/* E表示集合的元素类型 */public class GenericClass<E> { // name是E类型的,...原创 2020-02-03 14:06:40 · 555 阅读 · 0 评论 -
Java的Arrays类的常见操作
1. 常见的方法:sort() // 进行排序操作binarySearch() // 二分查找equals() // 进行比较fill() // 进行全部填充asList() // Array转listtoString() // 转成String类型copyOf() // 实现数组的复制2. 示例代码public static void main(S...原创 2020-01-28 13:07:00 · 621 阅读 · 0 评论 -
Java中Collections的使用
参考Collection的基本操作1. Collections对整个序列的更改或排序操作void reverse(List list) //List反转,返回更改后的Listvoid shuffle(List list) //进行随机混淆void sort(List list) //按自然排序的升序排序void sort(List list, Comparator c) //定制...原创 2020-01-28 11:52:05 · 1088 阅读 · 0 评论 -
java控制台输入小结)
1. 在我们刷题时候经常会看到需要从键盘输入数据进行测试,于是做一些输入整理2. Scanner实现输入public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.next(); System.ou...原创 2020-01-27 20:00:03 · 550 阅读 · 0 评论 -
java中&,|,^,之间的区别
今天在看别人代码时候,发现用到位运算符巧妙的解决了问题,技巧性较强,看的我一脸懵逼,遂做整理。先看看符号:符号 含义 & 都是1,结果才是1 ^ 一个1一个0,结果是1 | 只要有1,结果是1 进行测试:// 输出结果是0System.out.println(0&1);// 输出结果是1System.out.println...原创 2020-01-10 10:37:36 · 1133 阅读 · 2 评论 -
java中>与>>与>>>与<之间的区别
1. 今天在刷剑指,遇到一道题:**输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。**看到一个使用逻辑移位的放大进行的操作,很受启发,顺便整理一下从未用到的符号含义。2. 符号之间的区别符号 含义 正数 负数 > 普通的大于等于号 \ \ >> 带符号右移 正数右移高位补0 ...原创 2020-01-03 17:24:53 · 5920 阅读 · 1 评论 -
java实现单链表
1. 链表是一种常见的数据结构,单链表是一种链式存取的数据结构,链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),逻辑上是连续的,物理上是不连续的。 2.用java实现单链表的创建// 创建一个单链表节点public class ListNode{ // 数据域 int val; // 指针...原创 2020-01-01 19:31:44 · 1280 阅读 · 0 评论 -
java代码实现判断是否能ping通
package socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.InetAddress;import java.net.UnknownHostExcep...原创 2018-08-01 22:01:31 · 3143 阅读 · 2 评论 -
http响应中常见的几种响应代码
1. 200相应代码Status Code:200表示响应成功,很常见的一个状态2.300响应代码Status Code:301 表示客户端跳转,永久性跳转,一般在servlet中使用如下代码response.setStatus(301);response.setHeader("Location","fail.html");3.302响应代码Sta...原创 2018-12-28 00:41:00 · 8759 阅读 · 0 评论 -
JAVA日期Date操作
1.获取当前时间Date d = new Date(); //当无参数时候,打印出来的是系统当前时间System.out.println(d);Date d1 = new Date(5000); // 当有参数时候,表示得到系统初试时间,从1970年1月1日 早上8点0分0秒 开始经历了5秒的时间System.out.println(d1);输出如图所示2.当前时间转成数...原创 2018-12-29 00:26:41 · 2105 阅读 · 0 评论 -
使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件(转)
出处“https://www.cnblogs.com/smileberry/p/4145872.html1、相关文件关于Mybatis-Generator的下载可以到这个地址:https://github.com/mybatis/generator/releases下载后的目录结构如图 和Hibernate逆向生成一样,这里也需要一个配置文件:generatorConf...转载 2018-12-30 00:57:46 · 691 阅读 · 0 评论 -
SpringBoot+mybatis搭建项目出现的各种坑
问题:一个脑袋两个大1.将Springboot项目打包成war包 1.1首先保证你项目可以run起来不报错 1.2 配置pom.xml文件 1.2.1 配置成war包 代码:<packaging>war</pac...原创 2019-01-27 13:59:02 · 4555 阅读 · 1 评论 -
java.lang.NoClassDefFoundError: org/apache/lucene/analysis/Analyzer错误
直接叙述问题: java.lang.NoClassDefFoundError: org/apache/lucene/analysis/Analyzer错误原因: 自己的Springboot maven项目进行打包时候,无法将jar包放入war包中导致的错误解决方法: 启动一次tomcat,会自动解压war包,将需要的...原创 2019-01-23 10:26:06 · 3790 阅读 · 2 评论 -
SpringBoot Maven项目打包解决引入jar包的问题
1.问题: 前几天将SpringBoot Maven项目打包,总会报错,提示缺少相应的包,老是打包不成功2.原因: Maven项目想要打包SpringBoot项目,需要在pom.xml中进行配置一波,否则会过滤掉lib3.解决方法 3.1 在自己工程目录下新建一个lib文件夹,再将自己需要的jar包塞进去,如图: ...原创 2019-01-23 10:45:31 · 3997 阅读 · 2 评论 -
String,StringBuffer,StringBuilder三者区别及其对比测试
速度的快慢,用实验来说话,(针对100000个随机字符)如图: 1.首先是运行速度:StringBuilder > StringBuffer > StringJava中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢,而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对...原创 2019-03-10 22:53:39 · 1444 阅读 · 0 评论 -
java实现排列组合
参考https://blog.csdn.net/qq_34937383/article/details/77647963,测试可用排列公式组合公式1. 计算n! = n * (n-1) * ...*2 *1/** * 计算n的阶乘 * * @param n * @return 返回 n! */ private stat...原创 2019-03-24 16:52:42 · 14902 阅读 · 1 评论 -
Springboot+Mybatis + 异源数据库(Oracle&Mysql)
1.背景最近的项目需要同步另外一个数据库的数据,因此开始捣鼓springboot双(多)数据库的配置。参考了很多博客和手册,顺便整理了自己的项目,成功运行并。2.思路专门画个图,方便理解 3.按图走起,follow me3.1 pom.xml添加一些依赖<!-- oracle依赖 --><dependency&...原创 2019-03-28 13:46:08 · 1628 阅读 · 1 评论 -
Disconnected from the target VM, address: '127.0.0.1:62893', transport: 'socket'
今天在项目debug过程中遇到无法连接到虚拟机错误,昨天还好好的今天就挂了,很是懵逼,搜索一通后,发现问题是出在版本的问题,IDEA 与 Maven 的版本不兼容造成的上述问题。解决方法:重新更新一下Maven即可 还有一种情况就是内置tomcat的问题,如果不是Debug,则可以将tomcat依赖注释掉试试。目前只有...原创 2019-04-28 12:45:05 · 42263 阅读 · 6 评论 -
用java实现歌曲大串烧
原理:我们使用SequenceInputStream将FileInputStream对象进行集体整合,实现一个大的新文件代码如下:package com.test;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.i...原创 2018-05-29 10:27:20 · 1687 阅读 · 4 评论