![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 57
风之子_
sout. Hello World.
展开
-
数据容器——Java中的栈和队列
队列队列,一种先进先出的数据结构常用的操作队列的方法有:原创 2021-05-21 09:25:24 · 211 阅读 · 0 评论 -
使用Lock锁及Condition实现自定义阻塞队列
前言Lock锁相对于传统的synchronized关键字来说更加灵活,Lock锁为我们提供了显示加锁、可中断加锁、超时加锁等机制。Lock锁 VS synchronized锁:二则都是可重入锁synchronized是关键字,不会导致死锁,而Lock可能会出现死锁;synchronized不能响应中断,获取不到锁会一直阻塞,而Lock可以响应中断,可以知道是否获取了锁synchronized为独占锁,锁的获取和释放由JVM实现实现阻塞队列阻塞队列要点:当队列中没有元素时就阻塞,有则返原创 2020-12-01 00:20:51 · 394 阅读 · 0 评论 -
Java中的锁之synchronized
Java中锁的种类synchronizedSynchronized中的锁升级过程偏向锁、轻量级锁、重量级锁之间的转换:原创 2020-11-18 22:58:22 · 136 阅读 · 0 评论 -
Java多线程之CAS中存在的问题
CAS存在的问题这里重点介绍一下什么是ABA问题针对ABA问题的解决方案:在CAS的同时加入版本号的比较原创 2020-11-17 21:15:31 · 325 阅读 · 0 评论 -
缓存初见——缓存穿透、缓存击穿、缓存雪崩等问题的解决方案
缓存穿透缓存击穿缓存雪崩原创 2020-11-03 21:48:35 · 127 阅读 · 0 评论 -
缓存初见——实现缓存同步的几种方案
方案一:数据实时同步对应的业务流程图:方案二:数据准实时同步对应业务流程:方案三:任务调度更新相应业务流程:方案四:binlog日志订阅原创 2020-11-03 21:35:50 · 1976 阅读 · 0 评论 -
缓存初见——Caffeine的简单使用
Caffeine介绍Caffeine的简单使用使用Caffeine加载数据有三种方式:1、手动加载,也就是构建缓存的时候并不加载数据,在需要的时候再去加载并缓存public static void main(String[] args) throws InterruptedException { Cache<Object, Object> cache = Caffeine.newBuilder() .expireAfterWrite(2000, Time原创 2020-11-03 20:25:50 · 1567 阅读 · 2 评论 -
Optional的妙用——从此告别使用obj==null来判空
前言在日常开发中,一不小心就会出现NPE(NullPointerException),因此总少不了去判断一个对象是否为null的场景,常见的做法像这样:if(obj == null) { // TODO} else { // doSomething()}这样做没什么问题,但是还不够“优(zhuang)雅(X)”,所以 jdk 1.8 之后为我们新增了一个Optional类,从此就在判null的路上越走越远…正题:Optional的妙用1、看外貌:public final class O原创 2020-11-03 14:55:02 · 323 阅读 · 0 评论 -
缓存初见——EhCache
Ehcache简介Ehcache简单使用首先需要一个配置文件<?xml version="1.0" encoding="UTF-8"?><ehcache> <!-- 指定一个文件目录,当EhCache把数据写到硬盘上时,将把数据写到这个文件目录下 --> <diskStore path="java.io.tmpdir"/> <!-- cache元素的属性: name:缓存名称原创 2020-10-29 23:53:07 · 373 阅读 · 0 评论 -
缓存初见——Guava Cache的简单使用
Guava Cache简介Guava Cache使用的几种方式1、使用CacheLoader加载public static void main(String[] args) { // 缓存加载器 CacheLoader<String, String> loader = new CacheLoader<String, String>() { @Override public String load原创 2020-10-29 22:08:38 · 315 阅读 · 0 评论 -
缓存初见——利用Java中的Map实现简单的缓存
前言1、缓存常见的问题2、常见的内存缓存实现使用Java中的Map实现简单的缓存直接看代码,注释比较详细了package com.prince.cache;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ScheduledThreadPoolExecutor;import java.util.concurrent.TimeUnit;/**原创 2020-10-28 23:19:46 · 1267 阅读 · 1 评论 -
网络编程——NIO基础
NIO核心组件Buffer 缓冲区Channel 通道Selector 选择器1、Buffer缓冲区Buffer工作原理buffer的简单使用通过下面这个简单代码可以深入理解上面三个参数在每次读或写之后的变化public class BufferDemo { public static void main(String[] args) { // 初始化buffer容量为4字节 ByteBuffer byteBuffer = ByteBuffe原创 2020-09-26 19:08:19 · 147 阅读 · 0 评论 -
网络编程——BIO基本使用
BIO含义BIO简单使用1、客户端:连接本地的8000端口,并发送一个数据到服务器public class BIOClient { public static void main(String[] args) throws IOException { Socket socket = new Socket("localhost", 8000); OutputStream out = socket.getOutputStream(); Scann原创 2020-09-25 22:33:17 · 435 阅读 · 0 评论 -
网络编程——TCP/UDP协议回顾
OSI网络七层模型各层主要功能TCP协议三次握手与四次挥手机制UDP协议原创 2020-09-24 21:59:51 · 95 阅读 · 0 评论 -
勿忘初心——JVM调优基础
调优方向常用的JVM调优参数调优思路通用GC参数Parallel收集器调优参数CMS收集器调优参数G1收集器调优参数JIT编译器优化参数原创 2020-09-24 07:46:39 · 75 阅读 · 0 评论 -
勿忘初心——回顾Java内置命令
Java中常用的内置命令1、javap——Java反编译工具2、 jps——查看当前系统中的Java进程3、jstat—— 监视JVM信息,主要有GC信息等 (★★★★★)使用案例:查看gc情况,每10行重新输出表头,每1秒输出一次jstat -gc -h 10 <进程号> 10004、 jcmd——jps的替代工具(★★★★★)使用案例:1、查看GC堆信息jcmd <pid> GC.heap_info2、查看JVM运行参数jcmd <p原创 2020-09-22 23:42:34 · 117 阅读 · 0 评论 -
勿忘初心——回顾Java垃圾回收机制
如何判断对象是否可以被回收重点:可达性分析算法PS:Java中引用类型垃圾收集算法Hotspot采用的收集算法垃圾回收器1、 串行收集器2、 并行收集器3、 并发收集器4、 最先进的收集器——G1垃圾收集器的搭配...原创 2020-09-21 23:29:01 · 153 阅读 · 0 评论 -
勿忘初心——回顾Java类加载机制
类生命周期类加载器双亲委派模型原创 2020-09-21 21:58:59 · 80 阅读 · 0 评论 -
勿忘初心——ThreadLocal是如何实现线程隔离的
原理图看了图我相信大家已经很明确了,ThreadLocal之所以能达到变量的线程隔离,其实就是每个线程都有一个自己的ThreadLocalMap对象来存储同一个threadLocal实例set的值,而取值的时候也是根据同一个threadLocal实例去自己的ThreadLocalMap里面找,自然就互不影响了,从而达到线程隔离的目的!源码验证(有图有真相)1、验证一:每个线程都有一个自己的ThreadLocalMap对象大家注意看上面的注释:属于当前线程的ThreadLocal值,这个map由T原创 2020-09-15 22:18:12 · 946 阅读 · 0 评论 -
Spring框架——springMVC回顾
SpringMVC运行原理SpringMVC参数传递的几种方式1、 服务器向页面传参使用java.util.Map使用org.springframework.ui.Model使用org.springframework.ui.ModelMap使用org.springframework.web.servlet.ModelAndView(建议使用前面三种)import org.springframework.stereotype.Controller;import org.springfra原创 2020-09-13 13:16:13 · 117 阅读 · 0 评论 -
初识springboot——事务基础
事务特性并发事务可能出现的问题1、 脏读2、 不可重复读3、 幻读事务的隔离级别SpringBoot中事务1、事务注解@Transactional2、事务的传播行为propagation原创 2020-09-12 13:19:52 · 187 阅读 · 0 评论 -
Mybatis分页插件PageHelper的简单使用
引言实现在controller中实现我们的分页方法如下:/** * 使用PageHelper实现分页 * * @return 分页信息 */ @ResponseBody @GetMapping("/course/list2") public Object list2() { PageHelper.startPage(0, 3); List<VipCourse> all = courseDao.原创 2020-09-09 21:55:58 · 222 阅读 · 0 评论 -
Spring Data JPA结合Pageable实现分页功能
引言实现在controller中实现我们的分页方法如下:/** * 实现分页列表 * @return */ @ResponseBody @GetMapping("/course/list") public Object list(@RequestParam(name = "pageNum", defaultValue = "0") int pageNum, @RequestParam(name = "原创 2020-09-09 20:51:29 · 4848 阅读 · 0 评论 -
慎用重载 之 自动装箱带来的麻烦
考虑如下程序:public class Test { public static void main(String[] args) { Set<Integer> set = new TreeSet<Integer>(); List<Integer> list = new ArrayList<Integer>...原创 2018-08-08 17:57:08 · 236 阅读 · 0 评论 -
myeclipse中详细配置oracle数据库,mySql数据库(下)
在myEclipse中怎么配置mySql数据库,以下是详细的步骤第一步:第一步:在myEclipse打开Myeclipse Database Explore视图第二步:在左侧DB Browser下的空白处右键—>new....第三步:打开如下界面后,开始配置参数这里要注意,每一个选项都有正确填写1.Driver template:选择MySQ原创 2015-08-09 21:15:12 · 608 阅读 · 0 评论 -
myeclipse中详细配置oracle数据库,mySql数据库(上)
如何在myEclipse中配置oracle数据库第一步:在myEclipse打开Myeclipse Database Explore视图第二步:在左侧DB Browser下的空白处右键—>new......第三步:打开如下界面后,开始配置参数这里要注意,每一个选项都有正确填写1.Driver template:选择Oracle(Thin driver)原创 2015-08-09 10:27:40 · 3333 阅读 · 1 评论 -
千里之行,始于足下之:初识Hibernate
一、综述Hibernate(对象关系映射框架)是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取转载 2015-04-08 11:40:10 · 508 阅读 · 0 评论