java
文章平均质量分 51
java:热门的语言,web语言
959y
奋斗ing
展开
-
Guava缓存
Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另一方面它补充了很多jdk中没有的功能,能让我们开发中更为高效。<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version&原创 2022-03-11 20:05:20 · 1226 阅读 · 0 评论 -
面试_Java集合 [29]
文章目录1.常见的集合有哪些2.List 、Set和Map 的区别3.ArrayList4.ArrayList的扩容机制5.怎么在遍历 ArrayList 时移除一个元素6.Arraylist 和 Vector 的区别7.Arraylist 与 LinkedList 区别8.HashMap9.HashMap扩容过程10.红黑树的特点11.为什么使用红黑树而不使用AVL树12.在解决 hash 冲突的时候,为什么选择先用链表,再转红黑树13.HashMap 的长度为什么是 2 的幂次方14.HashMap为什原创 2022-02-18 18:12:48 · 236 阅读 · 0 评论 -
CompletableFuture异步编排
文章目录1.业务问题2.CompletableFuture介绍3.创建异步对象4.计算完成时回调方法5.线程串行化与并行化方法6.多任务组合7.优化商品详情页1.业务问题询商品详情页的逻辑非常复杂,数据的获取都需要远程调用,必然需要花费更多的时间。假如商品详情页的每个查询,需要如下标注的时间才能完成获取sku的基本信息 1.5s获取sku的图片信息 0.5s获取spu的所有销售属性 1ssku价格 1.5s那么,用户需要4.5s后才能看到商品详情页的内容。很显然是不能接受原创 2022-01-30 15:15:15 · 251 阅读 · 0 评论 -
java学习路线
1.性能调优2.并发编程3.开源框架4.分布式5.微服务6.手写框架7.项目实战原创 2022-01-29 17:47:23 · 1179 阅读 · 2 评论 -
Java的方法引用
文章目录1.方法引用2.方法引用与lambda3.方法引用的使用1.方法引用方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文。计算时,方法引用会创建函数式接口的一个实例。方法引用通过方法的名字来指向一个方法。方法引用可以使语言的构造更紧凑简洁,减少冗余代码。方法引用使用一对冒号 ::2.方法引用与lambda3.方法引用的使用@Data@ApiModelclass Dat原创 2022-01-27 14:02:02 · 7303 阅读 · 0 评论 -
SpringBoot 配置文件敏感信息如何加密
MySQL 登录密码,Redis 登录密码以及第三方的密钥等等一览无余。这里介绍一个加解密组件,提高一些属性配置的安全性。文章目录1.引入包2.配置加密、解密的密码3.测试用例中生成加密后的秘钥4.将加密后的字符串替换原明文5.部署时配置 salt(盐)值1.引入包<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot原创 2022-01-26 20:43:50 · 962 阅读 · 0 评论 -
解决if-else的问题
文章目录1.业务2.策略模式3.Map+函数式接口4.总结1.业务根据业务去写代码1.if-else 2.switchswitch(resourceType){ case "红包": 查询红包的派发方式 break; case "购物券": 查询购物券的派发方式 break; case "QQ会员" : break; case "外卖会员" : break; ...... default : logger.info("查找不到该优惠券类型resourceTy原创 2022-01-18 23:17:34 · 288 阅读 · 0 评论 -
Stream流解决java问题
文章目录1.题目①2.题目②3.双循环判断值1.题目①需求:筛选出卡路里小于 400 的菜肴对筛选后的进行排序获取排序后的名字菜肴.class:public class Dish { private String name; private boolean vegetarian; private int calories; private Type type; // getter and setter}java 8 之前private List&原创 2022-01-03 18:14:47 · 390 阅读 · 0 评论 -
future相关
Future是Java 5添加的类,用来描述一个异步计算的结果。你可以使用isDone方法检查计算是否完成,或者使用get阻塞住调用线程,直到计算完成返回结果,你也可以使用cancel方法停止任务的执行。虽然Future以及相关使用方法提供了异步执行任务的能力,但是对于结果的获取却是很不方便,只能通过阻塞或者轮询的方式得到任务的结果。阻塞的方式显然和我们的异步编程的初衷相违背,轮询的方式又会耗费无谓的CPU资源,而且也不能及时地得到计算结果,为什么不能用观察者设计模式当计算结果完成及时通知监听者呢?1.原创 2021-12-10 00:17:36 · 349 阅读 · 0 评论 -
innodb引擎的4大特性
文章目录1.插入缓冲(insert buffer)2.二次写(double write)3.自适应哈希索引(ahi)4.预读(read ahead)4.1 线性预读4.2 随机预读1.插入缓冲(insert buffer)插入缓冲(Insert Buffer/Change Buffer):提升插入性能,change buffering是insert buffer的加强,insert buffer只针对insert有效,change buffering对insert、delete、update(dele.原创 2021-09-24 10:05:39 · 2748 阅读 · 0 评论 -
FastDFS选择策略
1.FastDFS如何选择tracker和客户端通信?在trakcer集群中,每个tracker的地位都是平等的,因此client可以随机选择一个tracker进行连接。client会通过轮询的方式选择一个tracker,要是此tracker不能提供服务,则换下一个tracker。2.FastDFS如何选择一个group?可以手动指定一个group可以通过所有存储节点组轮询的方式选择一个group可以根据剩余存储空间最多的方式选择一个group3.FastDFS如何选择一个storage?该存原创 2021-09-22 15:22:30 · 391 阅读 · 0 评论 -
ThreadLocal面试 [20]
文章目录1.ThreadLocal是什么,有什么特性2.ThreadLocal底层的数据结构3.ThreadLocal的Map的初始值,加载因子是多少4.ThreadLocal底层的Hash算法是什么5.ThreadLocal如何解决hash碰撞6.ThreadLocal的扩容机制7.ThreadLocal的get方法的流程8.ThreadLocal的Key是强还是软引用9.ThreadLocal的Key可能过期吗10.ThreadLocal的set方法流程11.如何避免ThreadLocal内存泄露12.原创 2021-09-11 22:01:12 · 415 阅读 · 0 评论 -
java 哲学家就餐模拟
问题描述:一圆桌前坐着5位哲学家,两个人中间有一只筷子,桌子中央有面条。哲学家思考问题,当饿了的时候拿起左右两只筷子吃饭,必须拿到两只筷子才能吃饭。上述问题会产生死锁的情况,当5个哲学家都拿起自己右手边的筷子,准备拿左手边的筷子时产生死锁现象。解决办法:每个哲学家必须确定自己左右手的筷子都可用的时候,才能同时拿起两只筷子进餐,吃完之后同时放下两只筷子。 class philosopher extends Thread{ private String name; private For原创 2021-09-11 13:23:26 · 412 阅读 · 0 评论 -
hashCode 和对象的内存地址
hashCode文章目录hashCodehashCode 的生成逻辑第 0 种算法第 1 种算法第 2 种算法第 3 种算法第 4 种算法第 5 种算法根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。 public static void main(String[] args) { Object o = new Object(); System.out.println(o); int has原创 2021-08-21 18:07:36 · 580 阅读 · 0 评论 -
工作中的git命令
文章目录1.分支操作2.暂存操作3.回退操作4.标签操作5.常规操作6.git创建项目仓库7.忽略已加入到版本库中的文件8.取消忽略文件9.拉取、上传免密码1.分支操作git branch 创建分支git branch -b 创建并切换到新建的分支上git checkout 切换分支git branch 查看分支列表git branch -v 查看所有分支的最后一次操作git branch -vv 查看当前分支git brabch -b 分支名 origin/分支名 创建远程分支到本地gi原创 2021-07-23 09:21:34 · 130 阅读 · 0 评论 -
Object o = new Object()在内存中占了多少字节
一、 结论maven<dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version></dependency>测试public class ObjectLayOutTest { public static void ma原创 2021-07-09 09:28:07 · 330 阅读 · 4 评论 -
偏向锁、轻量级锁、重量级锁、自旋锁原理
文章目录一、简介二、Java对象头中的Mark Word三、偏向锁四、轻量级锁五、重量级锁六、自旋锁七、锁升级过程一、简介在讲解这些锁概念之前,我们要明确的是这些锁不等同于Java API中的ReentratLock这种锁,这些锁是概念上的,是JDK1.6中为了对synchronized同步关键字进行优化而产生的的锁机制。这些锁的启动和关闭策略可以通过设定JVM启动参数来设置,当然在一般情况下,使用JVM默认的策略就可以了。二、Java对象头中的Mark WordHotSpot中,Java的对象内存原创 2021-07-08 20:12:49 · 1646 阅读 · 0 评论 -
git-分布式版本控制
git灵活分支,容灾性强,异地协作方便。svn为集中式的版本控制,git为分布式的版本控制文章目录1.基本命令1. 查看版本2.git init3. git add4.git commit -m "" xxx5.git reset --hard xxx2.分支操作2.1 什么是分支2.2 分支的指令2.3 创建分支和切换分支图例3.git_idea3.1 git定位3.2 初始化仓库3.3 添加到暂存区3.4 添加到本地库3.5 切换版本3.6 创建分支3.7 切换分支3.8 合并分支1.基本命令原创 2021-06-29 10:40:37 · 292 阅读 · 0 评论 -
jdbc_从入门到精通_3
1.批量添加2.字符串拼接3.事务4.获得自增的数据5.添加二进制文件1.批量添加Batch @Test public void test1(){ Long start = System.currentTimeMillis(); Connection connection = null; PreparedStatement ps = null; try { connection = JDBCUt原创 2021-04-30 19:46:55 · 327 阅读 · 1 评论 -
jdbc_从入门到精通_2
1.多条数据的select封装在一个实体类中 @Test public void test2()throws Exception{ Connection connection = JDBCUtils.getConnection(); String sql = "select * from user"; PreparedStatement ps = connection.prepareStatement(sql); Result原创 2021-04-30 19:35:42 · 137 阅读 · 1 评论 -
重定向技术_javaweb_Servlet
重定向技术虽然比较简单理解但是比较难实现就像标签a一样,但是在java后端进行重定向的话就是请求和响应的关系了。而之后的SpringMvc耶可以进行重定向,因为是封装了ServletServlet版:Demo01.java@WebServlet("/Demo01_Response")public class Demo01 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, .原创 2021-04-29 20:16:49 · 337 阅读 · 0 评论 -
jdbc_从入门到精通_1
文章目录1.获取连接2.动态获取连接(配置文件获取)3.增删改4.封装工具类JDBCUtils5.封装增删改代码6.select一条数据7.封装查找一条数据的代码在一个方法中1.获取连接 @Test public void test1()throws Exception{ String url = "jdbc:mysql:///test"; String user = "root"; String password = "root";原创 2021-04-29 18:59:10 · 215 阅读 · 0 评论 -
Servlet
Servlet简介servlet是Server Applet的简称,翻译过来就是服务程序.好吧,这么说你可能还是不太懂,简单的讲,这个servlet是运行在服务器上的一个小程序,用来处理服务器请求的.进一步讲,我们知道,一般的网页程序,是由我们通过浏览器访问来实现的,在这个过程中,我们的浏览器发送访问请求,服务器接收请求,并对浏览器的请求作出相应的处理.这就是我们熟悉的B/S模型(浏览器-服务器模型).而servlet就是对请求作出处理的组件,运行于支持Java的应用服务器中.后面的框架比如Spring原创 2021-04-29 18:42:44 · 177 阅读 · 0 评论 -
JSP中不能使用El表达式的解决方法
今天在写一个普通Servlet的程序时,碰到一个问题,在jsp页面中书写为user.username的表达式语言,在浏览器页面中仍然显示为{user.username}的表达式语言,在浏览器页面中仍然显示为user.username的表达式语言,在浏览器页面中仍然显示为{user.username},说明jsp根本不认识${}标签,摸索了一下,发现我的web.xml中声明的是<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web.原创 2021-04-28 19:33:52 · 1050 阅读 · 1 评论 -
String_inner深入理解
前菜首先搞清楚一个题目题目1:new String(“ab”)造了几个对象题目2:new String(“a”) + new String(“b”)造了几个对象答案:1.2个,根据字节码文件可以看出:1个是堆中的"ab",一个是字符串常量池中的"ab"2.1.StringBuilder()2.new String(“a”)3.常量池中的"a"4.new String(“b”)5.常量池中的"b"深入剖析:StringBuilder中的toString方法:new原创 2021-04-07 20:03:17 · 601 阅读 · 0 评论 -
对于String的深入解析
String不可变特性创好了就不可以改变,如果添加啥东西的或者改变的话必须重写造。 public void test1(){ String s1 = "atguigu"; String s2 = "atguigu";// s2 = "Zjy"; System.out.println(s1 == s2); System.out.println(s1); System.out.println(s2)原创 2021-04-06 20:00:57 · 210 阅读 · 0 评论 -
log4j.propertie_入门
1.导入Maven <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dep原创 2021-03-18 22:21:23 · 178 阅读 · 0 评论 -
AQS_1
markword1.锁状态2.GC状态3.hashcodemarkword为8字节,最后两个字节记录锁状态作用为如果加锁的话改变的是markword的内容。锁升级:无锁态:new -> 偏向锁 ->轻量级锁 -> 重量级锁 ->GC标记信息乐观锁CAS悲观锁Synchronized,vector,hashtable自旋锁CAS可重入锁Synchronized,Reentrantiock,Lock读写锁ReentrantReadWrtieLock,CopyOnW原创 2021-03-14 16:54:04 · 171 阅读 · 0 评论 -
ELK介绍
文章目录1.ELK简介2.ELK架构图3.Filebeat工作原理4.Logstash工作原理1.ELK简介ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:原创 2021-03-09 15:04:40 · 45633 阅读 · 0 评论 -
贪吃蛇_java应用Gui
1.GUI介绍早期,电脑向用户提供的是单调、枯燥、纯字符状态的“命令行界面(CLI)”。就是到现在,我们还可以依稀看到它们的身影:在Windows中开个DOS窗口,就可看到历史的足迹。后来,Apple公司率先在电脑的操作系统中实现了图形化的用户界面(Graphical User Interface,简称GUI),但由于Apple公司封闭的市场策略,自己完成电脑硬件、操作系统、应用软件一条龙的产品,与其它PC不兼容。这使得Apple公司错过了一次一统全球PC的好机会。后来,Microsoft公司推出了风靡原创 2021-03-05 20:29:35 · 165 阅读 · 0 评论 -
Java晋升路线图
初级:系统,辅助中级:模块的开发高级:系统的优化和维护,培养初级中级技术管理路线,架构师路线,产品经理路线原创 2021-03-04 14:47:32 · 2686 阅读 · 3 评论 -
Stream操作_中间操作
Stream流失操作#Lambda表达式filterskiplimitditinctmapsortfilter @Test public void test3(){ ArrayList<Integer> list = new ArrayList<>(); list.add(2); list.add(3); list.add(4); list.stream().filter原创 2021-03-03 21:58:21 · 255 阅读 · 1 评论 -
Stream流式操作_造流操作
Java8 中添加了一个新的接口类 Stream,相当于高级版的 Iterator,通过 Lambda 表达式对集合进行各种非常便利、高效的聚合操作(Aggregate Operation),或者大批量数据操作 (Bulk Data Operation)。Stream不仅可以通过串行的方式实现数据操作,还可以通过并行的方式处理大批量数据,提高数据的处理效率。如何建流1.集合转流 @Test //集合转流 public void test2(){ ArrayList原创 2021-03-03 17:39:05 · 367 阅读 · 1 评论 -
NIO(New IO)_Buffer_Channel
Java NIO(New IO或 Non Blocking IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。java IO 与 java NIO 的区别一、通道(Channel)与缓冲区(Buffer)若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道以及用于容纳数据的缓冲区。然后操作缓冲区,对数据进行处理。简而言之,Channel 负责传输, Buf原创 2021-03-02 20:03:18 · 245 阅读 · 0 评论 -
BlockingQueue_阻塞队列_juc
BlockingQueueLinkedBlockingQueue,ArrayBlockingQueueQueue:Deque,AbstractQueue,BlockingQueue加入和移除1抛出异常的情况 @Test public void test1(){ ArrayBlockingQueue arr = new ArrayBlockingQueue<>(1); System.out.println(arr.add("A"));/原创 2021-03-02 19:52:20 · 327 阅读 · 0 评论 -
辅助类_juc
1.CountDownLatch计数器减为0的时候开始后面的代码CountDownLatch.countDown()CountDownLatch.await()package Demo;import java.util.concurrent.CountDownLatch;public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException {原创 2021-03-02 17:33:36 · 416 阅读 · 0 评论 -
Callable_实现多线程
package CallableDemo;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;public class Demo01 { public static void main(String[] args) throws ExecutionException, InterruptedExc原创 2021-03-02 17:05:36 · 311 阅读 · 0 评论 -
8锁问题
8锁问题:关于锁的8个问题public class demo01 { public static void main(String[] args) { Phone1 phone = new Phone1(); new Thread(()->{ phone.send(); },"A").start(); // 延时2秒 try { TimeUnit.SECONDS原创 2021-03-02 15:13:49 · 168 阅读 · 0 评论 -
juc_lock
一个不是juc一个是juc情况class Data2{ private int number = 0; Lock lock = new ReentrantLock(); Condition condition = lock.newCondition(); public void increment() throws Exception{ lock.lock(); try { while (number != 0){.原创 2021-03-02 12:01:02 · 297 阅读 · 0 评论 -
Juc_无juc情况
Synchronized和Lock的区别import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class Ticket{ private int number = 30; private Lock lock = new ReentrantLock(); public void sale(){ lock.lock(); tr原创 2021-03-02 11:41:13 · 515 阅读 · 0 评论