- 博客(14)
- 收藏
- 关注
原创 volatile
volatile volatile 保证共享变量的“可见性”,可见性就是当一个线程修改了共享变量时,另一个线程可以及时的读到共享变量修改后的值。 volatile是如何保证可见性的? 有被volatile修饰的共享变量在进行写操作时会多出一行汇编代码(Lock前缀的指令),该指令在多核处理器下会引发两件事情,1)在当前处理器缓存行的数据写回到主内存中;2)这个写操作会使其他CPU里面缓存的该内存地址的数据无效。 volatile为什么没有原子性? 例如你让一个v
2021-03-04 17:37:05
187
1
原创 Synchronized
Synchronized Synchronized 是 Java 中解决并发问题的一种最常用的方法,也是最简单的一种方法。 Synchronized的作用主要有三个: 原子性:确保线程互斥的访问同步代码; 可见性:保证共享变量的修改能够及时可见,其实是通过 Java内存模型(JMM) 中的 “对一个变量unlock操作之前,必须要同步到主内存中;如果对一个变量进行lock操作,则将会清空工作内存中此变量的值,在使用此变量前,需要重新从主内存中 load 操作或 assign 操作初始化变量值” 来保
2021-03-04 17:31:51
269
1
原创 Rabbitmq学习笔记
1 什么是MQ **MQ(Message Queue) **: 是一种跨进程的通信机制, 用于上下游传递消息 . 在互联网架构中, MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务 . JMS(Java Message Server) : java 消息服务应用程序接口, 是一个java平台面向消息中间件的技术规范(API接口规范) . Amqp(Advanced Message Q...
2019-09-18 16:28:02
249
原创 java代码的执行顺序
java代码的执行顺序,这是一个很基础的问题,但是工作几年之后,你能随口说出来吗? 当然这个问题在工作中几乎遇不到,但是在面试中,也许会被问到 /** * @Description: 动物 父类 * @author: wangjie * @createAt: 2019-08-15-21:25 */ public class Animal { public Animal() { ...
2019-08-15 21:59:53
272
1
原创 sql语句添加、修改字段以及索引
sql语句添加、修改字段以及索引(mysql) 在工作中,我们经常会遇到数据库表字段不够,修改扩展或者修改。 -- 修改字段名 alter table TABLE_NAME rename column A to B; -- 修改字段类型 alter table TABLE_NAME alter column COLUMN_NAME COLUMN_TYPE not null ; -- 添加字段类...
2019-06-28 14:00:40
6396
原创 工厂模式
0 定义 人们经常说到的工厂模式有三种:简单工厂模式,工厂方法模式和抽象工厂模式. * 简单工厂模式:严格来说,它不是一种设计模式,比较像是一种编程习惯,由于经常使用,很多人也会称它为一种设计模式. * 工厂方法模式:定义了一个创建对象的接口,但是是由子类来决定实例化那一种对象,将对象实例化推迟到子类. * 抽象工厂模式:提供一个接口,用来创建相关或相互依赖对象的家族,而不需要明确指定具体...
2018-08-20 16:29:00
152
原创 elasticsearch 入门1
0. elasticsearch 是什么? ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 1 安装 ...
2018-08-16 00:12:04
241
原创 常见单例模式实现方式
单例模式 单例: 有且仅有一个实例,提供全局访问. 1 饿汉式 在单例类被加载时候(立即加载),就实例化一个对象并交给自己的引用. 线程安全. public class Singleton1{ private static Singleton1 instance = new Singleton1(); private Singleton1(){} ...
2018-07-26 21:13:14
250
原创 sql 查询语句优化
1.选择最有效率的表顺序(只在基于规则的优化器中有效)Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表d)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询,那就需要选择交叉表作为基础表,交叉表是指那个被其他表所引用的表。2.WHERE子句中的连接顺序.Oracle采用自下而上的顺序解析
2017-04-30 16:11:01
526
原创 SQL select语句的执行顺序
最近在面试,有一个题目是让说出给定的sql语句的解析执行顺序,以及怎么优化. 感觉我回答的不理想,就查阅了一下.现在就总结一下我查阅的结果,以便日后温习:(8) select (9)distinct (11)[top] (1) from (3) [left/right outer] join (2) on (4) where (5) group by (6) with <CUBE |
2017-04-29 16:26:41
592
原创 关于try-with-resource的 输入输出流自动关闭
最近在做代码审核的时候,审核工具提示我将 try-catch-finally 给替换掉,而且根据公司相关要求,该提示的级别还不低,不改不予通过. 先看看代码吧:FileReader fr = null; BufferedReader br = null;try { fr = new FileReader(fileName); br = new BufferedReader(fr
2017-04-07 09:47:52
9606
原创 关于 回调 的一些理解(以jdbctemplate为例)
以前一起没有很好的理解 “回调”,偶然的机会下,看了一下spring的jdbctemplate,觉得对回调的理解很有帮助,就稍微自己总结一下,以便日后温习. 回调: 就是在方法的参数中传递一个接口,父在调用此方法时,必须调用方法中传递的接口的实现类。
2017-02-12 13:54:32
2430
原创 String "+"的问题
今天项目查bug时,发现一个空指针问题,查了半天,最终定位到是有String +运算造成的.于是就写了一个测试:public static void main(String [] arg0){ String a = null; String b = "null"; String c = "==="; String ac = a+c;
2017-01-09 16:34:20
406
原创 行转列sql题
样本数据 id name score 1 aa 30 2 aa 40 3 aa 50 1 bb 50 2 bb 40 3 bb 30 想转化成 name score1 score2 scoer3 aa 30 40 50 bb 50 40 30 方法一: selec
2017-01-06 11:16:32
303
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人