- 博客(40)
- 资源 (26)
- 收藏
- 关注
原创 Java中ReentrantLock是如何保证可见性?
正如官网上所说的ReentrantLock与sync的语义是一致的,也就是说ReentrantLock也具有一致性、可见性、原子性。通过阅读ReentrantLoc源码可知,lock()和unlock()主要通过volatile修饰的state状态操作的。我想问的是:ReentrantLock 是如何保证共享属性的可见性的?如下代码x变量怎么保证可见的? int x = 0; Re...
2020-01-12 15:09:37 3008 11
转载 Spring Boot中注解@ConfigurationProperties的三种使用场景
在Spring Boot中注解@ConfigurationProperties有三种使用场景,而通常情况下我们使用的最多的只是其中的一种场景。本篇文章带大家了解一下三种场景的使用情况。场景一使用@ConfigurationProperties和@Component注解到bean定义类上,这里@Component代指同一类实例化Bean的注解。基本使用实例如下:// 将类定义为一个bean的注解,比如 @Component,@Service,@Controller,@Repository.
2021-09-06 20:00:37 477
转载 如何快速的掌握一个项目?
前言开发人员经常会面临下面一些场景:1、新人入职,需要学习已有系统,作为 landing 的一部分,如何学习?2、被拉过去参与一个陌生系统的迭代开发或者系统维护(bugfix),如何快速上手?3、同事离职或转岗,需要把系统交接给你,怎么去接?内心 os:这是一口锅吗?这样的场景多了,就需要去梳理常见问题以及应对方法,方便后续遇到类似场景可以快速应对。本文总结熟悉系统主要分三部分:业务学习、技术学习、实战。每部分会梳理一些在学习过程中需要解答的问题,这些问题随着经验的积累需要逐步补
2021-08-21 17:57:00 401
原创 MySQL 连接的使用
JOIN 按照功能大致分为如下三类:INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。 LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。 RIGHT JOIN(右连接):与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。INNER JOINMySQL的INNER JOIN(也可以省略 INNER 使用 JOIN,效果一样)MySQL LEFT JOINMySQL left join 与 ...
2021-08-14 14:21:29 105
转载 HashMap中tableSizeFor
static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16; return (n < 0) ? 1...
2021-08-03 15:21:59 221
转载 MySQL 字符串和数值比较、字符串与字符串比较
一、字符串与数字比较MySQL字符串和数字比较的坑:比较时会把字符串类型转成整数类型,从首字母开始,遇到非数字类型后终止。原文:Comparison operations result in a value of 1 (TRUE), 0 (FALSE), or NULL. These operations work for both numbers and strings. Strings are automatically converted to numbers and numbers t
2021-07-17 16:43:50 1713
转载 Navicat使用技巧
Navicat Premium 常用功能讲解1.快捷键1.1. F8 快速回到当前对象列表1.2. Ctrl + q 打开查询界面1.3. Ctrl + d 快速修改当前的表结构1.4. Ctrl + r 运行当前查询界面里面的 sql 语句1.5. Ctrl + shift + r 运行当前选中的 sql 语句2.快速查看表结构2.1.右键表信息->选择对象信息2.2.右键表信息->选择对象信息->选择 DDL信息3.工具...
2021-06-01 22:30:51 1052
转载 IDEA 使用Git图文详解
一、配置git路劲:或二、克隆项目或填写克隆路径及输出路径三、上传项目到git仓库1、在你的idea里新建git仓库,这是新建本地仓库,等会会同步到线上git仓库2、新建后如果文件名不是绿色的表示没有加入到git索引中3、将需要上传的文件按照下图方式add4、添加后,相应的文件名会变成绿色5、然后commit项目,提交项目,这里是先提交带本地仓库6、然后push...
2021-05-23 15:21:08 489
原创 杂记整理
Spring1、@Resource和@Autowired的区别 两者都是用来实现依赖注入的,区别在于前者默认基于byname注入,后者默认基于bytype注入。2、@ConfigurationProperties的使用 该注解通常和@Component、@Bean、@EnableConfigurationProperties其中之一一块使用 同时注释到Bean上,初始化Bean时(@Compon...
2021-05-23 15:08:38 114
原创 idea中的一些常用快捷键
1. 删除光标所在行代码idea快捷键: Ctrl+Xeclipse快捷键: Ctrl+D2. 复制光标所在行代码,或者鼠标选中的代码idea快捷键: Ctrl+Declipse快捷键: Ctrl+Alt+上下键3. 切换代码大小写idea: Ctrl+Shift+Ueclipse: Ctrl+Shift+X(大写) Ctrl+Shift+Y(小写)4. 关闭当前代码窗idea: Ctrl+F4eclipse: Ctrl+W5. 快速定位到上一次编辑的位置idea: C
2021-05-11 22:47:28 441
原创 HashMap扩容时数据迁移实现的亮点(ConcurrentHashMap类似)
首先让我们看一下扩容代码: final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; int oldCap = (oldTab == null) ? 0 : oldTab.length; int oldThr = threshold; int newCap, newThr = 0; if (oldCap > 0) {
2020-11-13 15:54:52 2426 1
原创 NoSQL非关系型数据库主要分类
非关系型数据库是相对于关系型数据库(Oracle、MySQL、Sqlserver等)而言,非关系型数据库的特点:存储非结构化的数据,比如文本、图片、音频、视频。 表与表之间没有关联,可扩展性强。 保证数据的最终一致性。遵循 BASE(碱)理论。 Basically Available(基本 可用); Soft-state(软状态); Eventually Consistent(最终一致性)。 支持海量数据的存储和高并发的高效读写。 支持分布式,能够对数据进行分片存储,扩缩容简单。对...
2020-11-04 15:06:25 551
原创 Java线程调试详细教程
在多线程环境中,我们往往会遇到一些棘手的问题,怎么规定合适的线程顺序进行调试?怎么能让线程按照自己的想法执行?下面我们讲解一下解决方法。(本博客使用Eclipse,Idea工具也有对应的方式就不做赘述了)代码(仅两个类进行演示)package com.debug;public class DebugRunning implements Runnable { private String context; public DebugRunning(String context) {.
2020-10-19 11:22:04 1389 1
原创 Java诊断工具-Arthas-这篇文章就够了
Arthasgithub :https://github.com/alibaba/arthas Arthas 是Alibaba开源的Java诊断工具,采用命令行交互模式,是排查jvm相关问题的利器。下载安装curl -O https://alibaba.github.io/arthas/arthas-boot.jarjava -jar arthas-boot.jar# 然后可以选择一个Java进程常用命令具体每个命令怎么使用,大家可以自己查阅资料 ...
2020-10-14 14:52:16 450 1
转载 ZooKeeper-介绍与核心概念
原创ZooKeeper入门实战教程(一)-介绍与核心概念个人感觉博主对zookeeper的核心概要讲解的比较透彻易懂。
2020-08-12 11:26:34 108
转载 SpringCloud常见面试题及答案
1. 什么是 spring cloudspring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。2. spring cloud 断路器的作用是什么?在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一
2020-08-11 14:30:54 734
转载 springBoot手动装配,自动装配 实例
转载地址:https://blog.csdn.net/qq_36285943/article/details/105717131本篇文章推荐先跟着实例敲一遍代码。手动装配或是自动装配其本质是将对象注入容器中(IOC),主要差别仅仅是实现方式而已。
2020-07-28 09:36:43 244
原创 JAVA SPI详解
SPI是什么?SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩展的API寻找服务实现。使用场景数据库驱动加载接口实现类的加载 JDBC加载不同类型数据库的驱动日志门面接口实现类加载 SLF4J加载不同提供商的日志实现类Spring Spring中大量使用了SPI,比如:...
2020-07-27 16:32:45 363 1
原创 分布式系统经典问题深度分页
分布式文件系统必定面对的问题:深度分页问题:如何在数据分片存储的情况下, 获取前1000个文档?答案:先从每个分片上获取前1000个文档, 然后由处理节点聚合所有分片的结果之后,再排序获取前1000个文档。此时页数越深,处理的文档就越多,占用的内存就越大,耗时就越长。这就是深度分页问题。为了尽量避免深度分页为题,ES通过设定index.max_result_window限定最多到10000条数据。在设计分页系统时,有一个分页数十分重要:total_page=(total + p.
2020-07-07 15:22:32 625
原创 分布式中的脑裂问题
什么是脑裂问题?在分布式系统中有一个经典的网络问题。当一个集群在运行时,作为master节点的node1的网络突然出现问题,无法和其他节点通信,出现网络隔离情况。那么node1自己会组成一个单节点集群,并更新cluster state;同时作为data节点的node2和node3因为无法和node1通信,则通过选举产生了一个新的master节点node2,也更新了cluster state。那么当node1的网络通信恢复之后,集群无法选择正确的master。如何解决脑裂问题?解决方案也很简单
2020-07-07 10:47:41 1047 1
原创 Java知识点之杂记
这篇文章记录了一下Java知识点,后续会持续增加!~~~一、位运算中的与运算package com;/** * @author tzp * @created 2020年6月17日 下午7:28:52 * @类描述:位运算中与运算(&),运用 */public class ANDOperation { public static void main(String[] args) { //判断奇偶性 judgeOdevity(12); } /** * @.
2020-06-24 09:28:59 184
转载 HashMap中的hash函数
1. 什么是 hash 函数hash 函数,即散列函数,或叫哈希函数。它可以将不定长的输入,通过散列算法转换成一个定长的输出,这个输出就是散列值。需要注意的是,不同的输入通过散列函数,也可能会得到同一个散列值。因此我们不能使用散列函数来获取唯一值。2. HashMap 为什么要使用 hash 函数Java 的 HashMap 中使用的是数组 + 链表的结构,但在保存时,一个 K - V 键值对应该被存放到数组的哪个位置?通常我们都会想到:按照存入顺序存放。但是,按照这种策略,在取值时势必需要遍历
2020-06-18 19:44:08 1564 1
原创 HashMap常见面试题
谈一下HashMap的特性?HashMap以键值对的方式存储,允许null键和null值。 非线程安全 底层由hash表实现,无序
2020-06-18 17:43:36 361
原创 Java中的运算符
Java中的运算符分为四类:算数运算符:+ - * / % ++ --关系运算符:> >= == <= < !=逻辑运算符:&& & || | ! ^位运算符:& | ~ ^ >> << >>>算数运算符和关系运算符比较简单不进行赘述了!~~~逻辑运算符:注意:逻辑运算符操作的都是boolean类型的变量,而且结果也是boolean...
2020-06-17 20:48:11 142
原创 简单介绍阻塞队列BlockingQueue
阻塞队列:当队列元素为空时,阻塞所有提取元素的线程。当队列元素满时,阻塞所有添加元素的线程。BlockingQueue接口的主要常用实现类:ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等。ArrayBlockingQueue:由数组实现的有界阻塞队列,其队列大小在初始化时就已经确定。其线程安全主要通过一个ReentrantLock对象保证。LinkedBlockingQueue:由链表实现的无界(Inte..
2020-06-15 15:29:45 115
原创 线程池讲解之ThreadPoolExecutor
ThreadPoolExecutor核心参数: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, Blocki
2020-06-08 20:11:43 206
原创 Spring MVC执行流程及简单问题
流程1、 用户发送请求至前端控制器DispatcherServlet。2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。4、 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器。5、 执行处理器(Controller,也叫后端控制器)。6、 Controller.
2020-06-04 10:07:15 197
原创 Spring的BeanFactoryPostProcessor接口看这篇文章就够了
BeanFactoryPostProcessor接口是在spring容器加载完BeanDefinition之后,在bean实例化之前执行的,用来改变BeanDefinition属性的。BeanDefinition类就是配置的Bean定义,例如:<bean id = "springListener" class = "com.SpringListener" />什么叫做在spring容器加载完BeanDefinition之后?什么又叫做在bean实例化之前执行的?要解答这个问题就..
2020-06-02 15:15:45 511 1
转载 平衡二叉树、B树、B+树、B*树 理解其中一种你就都明白了
本篇文章转载自知乎的文章:连接地址。从网上找了几篇关于B树的知识,整体感觉这篇文章不错。
2020-05-08 15:48:24 155
原创 Linux常用命令
绝对路径: 如/etc/init.d 当前目录和上层目录: ./ ../主目录: ~/切换目录: cd查看当前进程: ps执行退出: exit查看当前路径: pwd清屏: clear退出当前命令: ctrl+c 彻底退出执行睡眠 : ctrl+z 挂起当前进程 fg 恢复后台查看当前用户 id: "id":查看显示目前登陆账户的 uid 和 gid 及所......
2020-01-21 11:20:57 298
原创 什么是乐观锁和悲观锁?
乐观锁:对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将比较-替换(CAS)这两个动作作为一个原子操作尝试去修改内存中的变量,如果失败则表示发生冲突,那么就应该有相应的重试逻辑。悲观锁:对于并发间操作产生的线程安全问题持悲观状态,悲观锁认为竞争总是会发生,因此每次对某资源进行操作时,都会持有一个独占的锁,就像 synchronized、Reentr...
2020-01-12 15:27:10 437 1
转载 为什么 wait, notify 和 notifyAll 这些方法不在 thread 类里面?
Java提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。简单的说,由于wait,notify,notifyAll都是锁级别的操作,所以把他们定义在object类中因为锁属于对象。如果wait, notify 和 notifyAll 这些方法在 thread 类里面会有什么问题?wait方法仍然可以使当前线程挂起,但问题是挂起后怎么被其他线程唤醒(唤醒线程时需要知道要唤...
2020-01-10 11:29:20 3079
SPI示例代码及实现方式
2020-07-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人