自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 Synchronized的原理及自旋锁,偏向锁,轻量级锁,重量级锁的区别

在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。 锁从宏观上分类,分为悲观锁与乐观锁。乐观锁乐观锁是一种乐观思想,即认为读多写少,遇...

2018-01-30 00:24:16 25457 23

原创 mysql datatime 索引失效

mysql中执行select * from table where create_at > ‘xxx’用explain查看执行计划时,扫描的rows是全表原因是扫描的行数过多,mysql会判断执行全表扫描更好,就会执行全表扫描,一般来说是超过数据30%(待确认)...

2020-10-23 14:33:08 1160

原创 volatile的应用与原理

背景多线程开发中,不少见 volatile,其很典型的标记就是可见性,接下来一起了解一下其原理吧定义volatile 是轻量级的 synchronized,它在多处理器开发中保证了共享变量的“可见性"可见性的意思是一个线程修改一个共享变量时,另外一个线程能读到这个修改的值volatile 的使用比锁的成本更低,因为它不会引起线程上下文的切换和调度术语内存屏障是一组处理器指令,用于实现对内存操作的顺序限制缓存行缓存中可以分配的最小存储单位。实现原理有 volatile 修饰的变

2020-07-02 22:39:30 255

原创 记一次目标驱动导致的bug

背景最近做的一个项目中,用到了目标驱动架构模式,但由于目标下发的不准确,导致出现了线上bug。目标驱动目标驱动是通过不同的轮询目标的状态,决策出需要达到的目标,使得状态能到达到最终的目标;简单点的意思就是不断循环着四种状态:轮询—>决策—>发送目标—>达到目标。目标驱动有什么好处的?解耦系统a可以专注数据的收集,系统b可以进行目标驱动,使得系统c最终可以达成目标假如没有目标驱动,系统a即要数据的收集,数据的目标决策,数据的最终状态下发管理,通知系统c减少工作量

2020-06-26 23:26:15 306

原创 Mybatis 源码解析(一)—— 初始化过程

前言什么是 MyBatis?MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。关于mybatis的基本使用,可以参考mybatis中文官网https://mybatis.org/mybatis-3/zh/i

2020-06-15 23:38:14 254

原创 深入了解Spring与Java的SPI机制

SPI(service provider interface)机制是JDK内置的一种服务发现机制,可以动态的发现服务JDK的SPI机制jdk 的 spi 机制是通过 ServiceLoader 类来加载扩展的服务提供类为什么需要这种机制呢?大家可以从类加载器文章中双亲委派的破坏了解原因双亲委派模型破坏原因简单的说,类加载器中的双亲委派模型的工作原理是对于类的加载,先交给父类加载器完成,如果父类加载器无法完成加载,子类加载器才进行加载。JDK中的一些基础类接口,例如 JDBC,如果按照双亲委派模

2020-05-30 20:05:02 934

原创 深入了解Java虚拟机类加载机制、过程与类加载器

虚拟机类加载机制是把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型。​ 需要注意的是 Java 语言与其他编译时需要进行连接工作的语言不通,它的连接过程是在程序运行期间完成的,这样会在类加载时稍微增加一些性能开销,但是却能为 Java 应用程序提供高度的灵活性。例如,如果编写一个使用接口的应用程序,可以等到运行时再指定其实际的实现。​ 通过文章,你可以了解到以下内容类加载时机类加载过程类加载器与不足1. .

2020-05-29 22:40:43 330 1

原创 分布式链路跟踪系统

链路跟踪框架原理浅析APM工具(Application Performance Management)现在的APM工具,基本都是参考google的Dapper(大规模分布式系统的跟踪系统)实现的。主要功能是通过对跟踪请求的处理,来观察请求链路,进行性能消耗跟踪。特点一般的APM工具需要满足以下几点低消耗跟踪系统对在线服务的影响应该做到足够小。在一些高度优化过的服务,即使一点点损耗也会很容易察觉到,而且有可能迫使在线服务的部署团队不得不将跟踪系统关停。应用级的透明对于应用的程序员来说

2020-05-28 01:40:29 342

原创 async-profiler性能分析工具

async-profiler性能分析工具可以对项目进行性能分析,可以追踪 CPU 周期,也可以追踪 Java 堆中的分配、锁争用,以及软件和硬件的性能计数器。环境准备async-profilercd /tmp // 你的项目目录git clone https://github.com/jvm-profiling-tools/async-profilercd async-profilermake运行./profiler.sh可以看到工具的使用命令$ ./profiler.shUsage:

2020-05-26 23:06:35 1030

原创 Redis知识扫盲,十二大知识要点

1. 为什么使用 Redis性能:对于频繁的数据库操作,可以用 Redis 缓存,提升响应速率并发:在大并发的情况下,大量请求访问数据库会导致异常,所以 Redis 可以作为缓冲操作2. 使用 Redis 有什么缺点缓存和数据库双写一致性问题缓存雪崩问题缓存击穿问题缓存并发竞争问题3. 单线程的 Redis 为什么这么快纯内存操作单线程操作,避免频繁的上下文切换采用...

2020-04-28 22:31:09 162

原创 mybatis之装饰者设计模式

前言mybatis是一款优秀的持久层框架,支持sql,存储过程以及高级映射,也是一款开源框架,源码中使用了多种的设计模式,今天就来讲一个装饰者设计模式mybatis-装饰者设计模式在源码的cache中,应用了装饰者设计模式,通过装饰者模式,可以增强cache的功能,比如原来是LruCache,通过FifoCache装饰后,变成拥有Lru和Fifo的功能的cacheCache接口所有装饰者...

2020-04-25 19:23:30 504

原创 分布式自增ID生成器

背景在数据量大的业务中,但数据库压力增加,也便产生了分库分表,但是分库分表的ID不能依赖当前库的自增ID实现,所以,也变需要分布式自增ID生成了1. 默认步长模式步长模式的基本思路是,使用一个名为Sequence数据表的一条记录来存储全局的ID当前值。 每个服务实例要获取ID时,先锁住这行记录,将这个值增加,例如加1000,这样这1000个ID就被这个实例独享,在服务自己的内存中慢慢使用,用...

2020-04-22 22:50:44 906

原创 AIOPS智能运维,超高地体现运营价值的能力

AIOps(Artificial Intelligence for IT Operations):智能运维前言AIOps也就是Artificial Intelligence for IT Operations,智能化运维;这是一种运营趋势,可以很大的提高运营的能力,实现更高的价值;朝着把平凡的项目实现智能运维的目标出发吧业务运维发展趋势提升IT基础架构运营能力基于大数据分析的思路,在...

2020-04-21 23:17:35 747

原创 五种Linux IO模型+同步异步,阻塞非阻塞,再也不怕头条面试官挂我了

背景小K在面试中被头条面试官问了五种IO模型,只是含糊的回答了;头条面试官一脸不满意的回答,你回去花两小时认真看看吧,保证你有收获,最后,当然就是面试不通过了,所以在面试中,IO模型是非常常见的问题,我们需要理解IO模型的分类,特点,为什么有这种模型。首先记住从245原则去讲解,2代表两类;第一类有4个名词,代表阻塞,非阻塞,同步,异步;第二类有5个名词,代表阻塞IO,非阻塞IO,IO多路...

2020-04-20 23:36:11 263

原创 Linux grep、awk命令节省了90%的时间

背景开发过程中,经常会遇到一些文本匹配,在文本的匹配中,又经常遇到一些操作,为了能节省在文本中匹配与处理的时间,我们需要很好地熟悉一些grep,sed,awk命令简介grep:适合单纯的查找或匹配文本sed:适合编辑匹配到的文本awk:适合格式化文本,对文本进行较复杂格式处理入门1. grep...

2020-04-18 22:23:32 219

原创 JVM运维命令

命令参数-Xms:初始堆大小-Xmx:最大堆大小-XX:NewSize=n:设置年轻代大小-XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值.注意Survivor区有两个.如:3,表示Eden:Survivor=3:2...

2020-04-17 21:02:58 239

原创 insert ignore 与 insert 与 replace

insert into表示插入数据,数据库会检查主键(PrimaryKey),如果出现重复会报错;replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和。如果对于一个单行REP...

2019-09-22 20:39:09 402

原创 Java8 Function和BiFunction

1.Function作为一个函数式接口,主要方法apply接收一个参数,返回一个值int test(Function<Integer, Integer> func) { return func.apply(1);}void main() { System.out.println(test((a)-> a + 1)); // 2}2.Func...

2019-09-22 18:09:31 566

原创 mysql 查看日志和启动日志

mysql有以下几种日志:     错误日志:     -log-err     查询日志:     -log     慢查询日志:   -log-slow-queries     更新日志:     -log-update     二进制日志: -log-bin   查看日志 SHOW VARIABLES LIKE "general_log%";启用日志 SET GLOBA...

2018-09-15 15:41:02 20190

原创 Java 定义常量

常量定义方法1. 接口:变量默认为 static final2. 枚举 enum每个常量都是唯一的,可以通过 values() 方法遍历,也可以有非 public 的构造方法3. 普通类中使用 static final 修饰变量...

2018-08-18 17:33:46 685

原创 Jstack中线程thread的状态 BLOCKED,WAITING,TIMED_WAITING

1.BLOCKED这种状态是指一个阻塞线程在等待monitor锁如:wait2.WAITING一个线程在等待另一个线程执行一个动作时在这个状态如:Object#wait() 而且不加超时参数Thread#join() 而且不加超时参数LockSupport#park()3.TIMED_WAITING一个线程在一个特定的等待时间内等待另一个线程完成一个动作会在这个状态如:Thread#sleep()...

2018-07-02 23:15:05 4161

原创 异常 及 try catch finally注意点

异常分类:1.Error(JVM虚拟机错误)2.Exception(异常):程序可以处理的异常    根据编译特性分类:    (1)检查性异常:在编译的时候必须检查,如IOException    (2)非检查性异常:在编译时可以不检查,如RuntimeException    根据运行时特性分类:    (1)运行时异常:不用捕捉的异常,如RuntimeException    (2)非运行时...

2018-06-12 14:06:06 363

原创 设计模式的六大设计原则

1)单一指责原则(Single Responsibility Principle,SRP)每个类的功能单一,不能多功能2)里氏替换原则(Liskov Substitution Principle LSP,LSP)   1.子类必须完全实现父类的方法   2.子类可以有自己的个性   3.覆盖或实现父类的方法时输入参数可以被放大   4.覆盖或实现父类的方法时输出结果可以被缩小3)依赖倒置原则(De...

2018-06-12 11:23:48 243

原创 DBCP数据库连接池的连接有效检测配置

基本配置initialSize :连接池启动时创建的初始化连接数量(默认值为0)maxActive:连接池中可同时连接的最大的连接数(默认值为8,调整为20,高峰单机器在20并发左右,自己根据应用场景定)maxIdle:连接池中最大的空闲的连接数,超过的空闲连接将被释放,如果设置为负数表示不限制(默认为8个,maxIdle不能设置太小,因为假如在高负载的情况下,连接的打开时间比关闭的时间快,会引起...

2018-05-06 22:07:22 3541

原创 CAS SSO单点登录

CAS是一个单点登录框架,SSO(Single Sign On)即单点登录,在多应用系统中,只需要登录一次,就可以在多个系统方法,CAS认证中心利用Cookie的Ticket来辨别,各个系统利用Session来辨别流程图:图中的三个重要标识:ticket:用户从 CAS 认证中心获得的票据,没有缓存,存在 url 中session:用户登录 app 的服务端会话,登录成功后,缓存在...

2018-04-10 14:11:30 318

原创 springmvc + mybatis配置

百度各有其说,最后参考了官网的mybatis-spring和一些博客,实践了多次,遇到各种坑,终于解决了pom.xml&lt;dependency&gt; &lt;groupId&gt;mysql&lt;/groupId&gt; &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt; &lt;versi...

2018-03-05 11:30:15 272

转载 Java序列化(Serializable+ExternalSeralizable)

java序列化的详解,在比较满意的一篇文章收集的转至:http://blog.csdn.net/dreamtdp/article/details/153783291、序列化是干什么的?       简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Ja

2018-01-29 14:37:19 849

原创 Java 单例模式(饿汉+懒汉)

java单例就是一个类始终只实例化一次饿汉模式:在程序启动,类加载的时候就初始化:public class Singleton{ private static Singleton instance = new Singleton(); private Singleton(){} public static Singleton newInstance(){

2018-01-16 23:33:13 369

原创 springmvc Redis配置使用(Jedis)

首先要在本地安装redis,具体察看(mac安装):http://blog.csdn.net/kirito_j/article/details/79079411项目环境:maven,springmvcpom.xml org.springframework.data spring-data-redis 1.0.2.RELEASE

2018-01-16 23:09:09 1352

原创 mac redis4.0+安装

环境搭建1、下载官网地址:http://redis.io/ 2、将下载下来的tar.gz 压缩包拷贝到usr/local目录下 该目录需要root权限 sudo cp redis-4.0.6.tar.gz /usr/local 3、使用终端进入local文件夹中,解压该压缩文件 sudo tar -zxf redis-4.0.6.tar.gz 4、编译测试:sudo

2018-01-16 21:33:02 589

转载 spring mvc 的jpa JpaRepository数据层 访问方式汇总

本文转载网址:http://jishiweili.iteye.com/blog/2088265AppleFramework在数据访问控制层采用了Spring Data作为这一层的解决方案,下面就对Spring Data相关知识作一个较为详细的描述。 1.Spring Data所解决的问题 Spring Data :提供了一整套数据访问层(DAO)的解决方案,致力于减少数据访问层(D

2018-01-13 15:28:13 387

原创 mysql数据库基本知识总结

1.   Distinct(筛选不同)2.   Group by(注意select中的要全部group by)3.   Having(group by后的选择)4.   And & Or5.   Order by(降序desc,升序asc)6.   Select top问题(使用limit)7.   Like(通配符,%全部,_单个,[charList]字符列中任意一个,[

2018-01-12 11:41:49 319

原创 【阿里、腾讯、头条】等12家企业【C++方向】30场面试经验

作者:陈止风链接:https://www.nowcoder.com/discuss/27739?type=2&order=0&pos=75&page=2来源:牛客网面试经验包括 阿里巴巴、今日头条、腾讯、360、网易游戏、人人网、美团点评、京东、网易、去哪儿网、PayPal、美丽联合 共12家企业拿到的正式offer包括阿里巴巴、今日头条、腾讯、京东、去哪儿网,口头录用意向

2017-08-07 16:38:50 1747

原创 char* 与 char[] 的区别

问题:同样char *c = "abc"和char c[]="abc",前者改变其内容程序是会崩溃的,而后者完全正确。理解:一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可

2017-08-06 20:03:48 343

转载 JUnit单元测试使用java详解

原文地址 http://www.open-open.com/lib/view/open1462177214142.html我们写单元测试,一般都会用到一个或多个单元测试框架,在这里,我们介绍一下JUnit4这个测试框架。这是Java界用的最广泛,也是最基础的一个框架,其他的很多框架,包括我们后面会看到的Robolectric,都是基于或兼容JUnit4的。然而首先要解决的问题是。。。为

2017-04-07 12:31:51 653

原创 HDU1028 DP

本题的意思是:整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n。    如6的整数划分为        6    5 + 1    4 + 2, 4 + 1 + 1    3 + 3, 3 + 2 + 1, 3 + 1 + 1 + 1    2 + 2 + 2, 2 + 2 + 1 + 1, 2 + 1 + 1 + 1 + 1 

2017-03-20 22:37:08 480

原创 IOS开发的OC基础和UI基础的简介

1.变量2.类的声明和实现3.类的继承4.初始化,分+,-,和重写init5.属性,@property 变量 自动生成_变量,set,get方法和实现。  可以用点语法代替get和set方法  修饰对象用retain 基本数据类型assign nonatomic非原子性(一般为这个) atomic为原子性 保证    线程安全  @pro

2017-02-23 16:20:50 712

原创 mysql 外键(foreign key)的使用,同一个table的两个外键对应一个table的主键

官方语法:[CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name, ...) REFERENCES tbl_name (index_col_name,...) [ON DELETE reference_option] [ON UPDATE reference_option]refere

2017-02-10 14:27:31 10838

原创 几个简单的Unity3D脚本(C#)

一:首先建立一个空白工程,创建一个空GameObject,在Assets中创建一个名为CustomEditor的文件夹,在该文件夹中创建一个LevelScript的c#文件。LevelScript.cs如下:using UnityEngine;using System.Collections;public class LevelScript : MonoBehaviour { p

2017-01-12 17:08:51 6886

原创 Unity3d multi-object not supported的错误

应该是动了神秘地带,把工程Copy一遍,Editor是隐藏的,所以Copy不到。新建一个工程,再粘贴上,立刻能用了。小伙,别百度了,这样处理最快!

2017-01-12 17:02:11 768 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除