自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 oracle中截取字段中某一个字符最后一次出现的位置到末尾

比如有一个a字段格式如下:aaaa-bbbb-cc要截取最后的cc1,首先获取最后一次出现的- 的位置instr('aaaa-bbbb-cc','-',-1),这样就得到了最后一个-的下标2,从最后一次出现-的位置开始截取字符串下标加一,然后截取substr('aaaa-bbbb-cc',instr('aaaa-bbbb-cc','-',-1)+1)运行例子:select substr('aaaa-bbbb-cc',instr('aaaa-bbbb-cc','-',-1

2020-09-25 16:42:43 5994

原创 Java 代码精简之道

1.利用语法1.1.利用三元表达式普通:String title;if (isMember(phone)) { title = "会员";} else { title = "游客";}精简:String title = isMember(phone) ? "会员" : "游客";注意:对于包装类型的算术计算,需要注意避免拆包时的空指针问题。1.2.利用 for-each 语句从 Java 5 起,提供了 for...

2020-06-29 22:14:11 238

原创 java代码精简之道

1.利用语法1.1.利用三元表达式普通:String title;if (isMember(phone)) { title = "会员";} else { title = "游客";}精简:String title = isMember(phone) ? "会员" : "游客";注意:对于包装类型的算术计算,需要注意避免拆包时的空指针问题。1.2.利用 for-each 语句从 Java 5 起,提供了 for-each 循环,简化了数组和集合的循环遍历。fo.

2020-05-21 13:56:20 298

转载 Java常用工具类

下文主要分享这几个方向的常用工具类:字符串相关工具类Java 中 String 应该是日常用的最多一个类吧,平常我们很多代码需要围绕 String ,做一些处理。JDK 提供 String API 虽然比较多,但是功能比较基础,通常我们需要结合 String 多个方法才能完成一个业务功能。下面介绍一下 Apache 提供的一个工具类 StringUtils.Maven Pom 信息如下:<dependency><groupId>org.apac...

2020-05-11 08:44:01 631

原创 IntelliJ IDEA新建Maven模块module显示为灰色

2020-04-23 08:52:40 921

转载 Spring注解驱动开发(四)

AOP面向切面编程AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次...

2020-04-14 16:53:27 160

转载 Spring注解驱动开发(三)

The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform.属性赋值@value赋值使用@Value赋值基本数值...

2020-04-14 16:52:00 130

转载 Spring注解驱动开发(二)

The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform.声明周期@Bean指定初始化和销毁方法Bean的生命周期...

2020-04-14 16:49:52 145

转载 Spring注解驱动开发(一)

The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform.组件注册@Configuration和@Bean的注入使用...

2020-04-13 16:26:55 145

原创 10 假如生产环境出现 CPU 过高,请谈谈你的分析思路和定位?

先用 top 命令找出 CPU 占比最高的 ps -ef 或者 jps 进一步定位,得知是一个怎么样的一个后台程序 定位到具体的线程或代码 ps -mp 11111 -o THREAD,tid,time -m 显示所有的线程 -p 进程使用cpu的时间 -o 该参数后是用户自定义格式 将需要的线程 ID 转化为 16 进制格式 jstat <进程ID> | g...

2020-04-13 15:51:09 232

原创 9 生产环境服务器变慢,诊断思路和性能评估谈谈?

整机:top CPU:vmstat 内存:free 硬盘:df 磁盘IO:iostat 网络IO:ifstat

2020-04-13 15:47:07 262

原创 8 G1 垃圾收集器你了解吗

以前收集器的特点 年轻代和老年代是各自独立且连续的内存块 年轻代收集器使用 eden + S0 + S1 进行复制算法 老年代收集必须扫描整个老年代区域 都是以尽可能的少而快速地执行 GC 为设计原则 G1 是什么 G1 是一种面向服务端的垃圾收集器,应用在多核处理器和大容量内存环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集器的暂停时间要求。 像 CMS 收集器一样,...

2020-04-13 15:46:31 166

原创 4 强引用、软引用、弱引用和虚引用分别是什么?

在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用;Java中根据其生命周期的长短,将引用分为4类。强引用 特点:我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用就是强引用。 当JVM内存空间不足,JVM宁愿抛出OutOfMemoryError运行时错误(OOM),使程序异常终止,也不会靠随意回...

2020-04-13 15:43:46 148

原创 1 JVM 垃圾回收的时候如何确定垃圾?知道什么是 GC Roots?

什么是垃圾 简单来说就是内存中已经不在被使用到的空间就是垃圾 要进行垃圾回收,如何判断一个对象是否可以被回收? 引用计数法 枚举根节点做可达性分析 为了解决引用计数法的循环引用问题,Java 使用了可达性算法。跟踪收集器采用的为集中式的管理方式,全局记录对象之间的引用状态,执行时从一些列GC Roots的对象做为起点,从这些节点向下开始进行搜索所有的引用链,当一个对象到G...

2020-04-13 15:42:55 199

原创 7 怎么查看服务器默认垃圾收集器是哪个?生产是如何配置垃圾收集器?谈谈你对垃圾收集器的理解?

怎么查看服务器默认垃圾收集器是哪个? Java -XX:+PrintCommandLineFlags Java 的 GC 回收的类型主要有: UseSerialGC,UseParallelGC,UseConcMarkSweepGC,UseParNewGC,UseParallelOldGC,UseG1GC Java 8 以后基本不使用 Serial Old 垃圾收集器 参数说明...

2020-04-13 15:41:29 326

原创 6 GC 垃圾回收算法和垃圾收集器的关系?谈谈你的理解?

四种 GC 垃圾回收算法 引用计数 复制回收 标记清除 标记整理 GC 算法是内存回收的方法论,垃圾收集其就是算法的落实的实现。 目前为止还没有完美的收集器的出现,更加没有万能的收集器,只是针对具体应用最适合的收集器,进行分代收集。 串行垃圾回收器(Serial) 它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程,所以不适合服务环境。 并行垃圾回...

2020-04-13 15:40:22 183

原创 5 请谈谈你对 OOM 的认识?

java.lang.StackOverflowError 在一个函数中调用自己就会产生这个错误 java.lang.OutOfMemoryError : Java heap space new 一个很大对象 java.lang.OutOfMemoryError : GC overhead limit exceeded 执行垃圾收集的时间比例太大, 有效的运算量太小,默认情况下,,...

2020-04-13 15:37:50 255

原创 3 你平时工作用过的 JVM 常用的基本配置参数有哪些?

-Xms 初始大小内存,默认为物理内存 1/64 等价于 -XX:InitialHeapSize -Xmx 最大分配内存,默认为物理内存的 1/4 等价于 -XX:MaxHeapSize -Xss 设置单个线程栈的大小,一般默认为 512-1024k 等价于 -XX:ThreadStackSize -Xmn 设置年轻代的大小 整个JVM内存大小=年轻代大小...

2020-04-13 15:32:05 234 1

原创 2 你说你做过 JVM 调优和参数配置,请问如果盘点查看 JVM 系统默认值?

JVM 的参数类型标配参数 -version -help X 参数(了解) -Xint:解释执行 -Xcomp:第一次使用就编译成本地代码 -Xmixed:混合模式 XX 参数 Boolean 类型:-XX:+ 或者 - 某个属性值(+ 表示开启,- 表示关闭) -XX:+PrintGCDetails:打印 GC 收集细节 -XX:-PrintGC...

2020-04-13 15:31:01 173

原创 11 死锁编码以及定位分析

产生死锁的原因 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象,如果无外力的干涉那它们都将无法推进下去,如果系统的资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。 代码 12345678910111213141516171819202122...

2020-04-13 15:17:49 136

原创 10 线程池用过吗?生产上你如何设置合理参数?

线程池的拒绝策略你谈谈?是什么 等待队列已经满了,再也塞不下新的任务,同时线程池中的线程数达到了最大线程数,无法继续为新任务服务。 拒绝策略 AbortPolicy:处理程序遭到拒绝将抛出运行时 RejectedExecutionException CallerRunsPolicy:线程调用运行该任务的 execute 本身。此策略提供简单的反馈控制机制,能够减缓新任务的提交速度...

2020-04-09 22:19:43 168

原创 09 线程池使用过吗?谈谈对 ThreadPoolExector 的理解?

为什使用线程池,线程池的优势?线程池用于多线程处理中,它可以根据系统的情况,可以有效控制线程执行的数量,优化运行效果。线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,那么超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。主要特点为:线程复用 控制最大并发数量 管理线程主要优点降低...

2020-04-09 22:18:48 138

原创 02 请谈谈你对 volatile 的理解

olatile 是 Java 虚拟机提供的轻量级的同步机制保证可见性 禁止指令排序 不保证原子性JMM(Java 内存模型) 你谈谈基本概念JMM 本身是一种抽象的概念并不是真实存在,它描述的是一组规定或则规范,通过这组规范定义了程序中的访问方式。 JMM 同步规定 线程解锁前,必须把共享变量的值刷新回主内存 线程加锁前,必须读取主内存的最新值到自己的工作内存 加锁解...

2020-04-09 22:12:14 99

原创 08 synchronized 和 Lock 有什么区别?

原始结构 synchronized 是关键字属于 JVM 层面,反应在字节码上是 monitorenter 和 monitorexit,其底层是通过 monitor 对象来完成,其实 wait/notify 等方法也是依赖 monitor 对象只有在同步快或方法中才能调用 wait/notify 等方法。 Lock 是具体类(java.util.concurrent.locks.Lock)是...

2020-04-09 22:10:34 118

原创 07 堵塞队列你知道吗?

阻塞队列有哪些ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)对元素进行排序。 LinkedBlokcingQueue:是一个基于链表结构的阻塞队列,此队列按 FIFO(先进先出)对元素进行排序,吞吐量通常要高于 ArrayBlockingQueue。 SynchronousQueue:是一个不存储元素的阻塞队列,每个插入操作必须等到另...

2020-04-09 22:09:46 121

原创 06 CountDownLatch/CyclicBarrier/Semaphore 使用过吗?

CountDownLatch让一些线程堵塞直到另一个线程完成一系列操作后才被唤醒。CountDownLatch 主要有两个方法,当一个或多个线程调用 await 方法时,调用线程会被堵塞,其他线程调用 countDown 方法会将计数减一(调用 countDown 方法的线程不会堵塞),当计数其值变为零时,因调用 await 方法被堵塞的线程会被唤醒,继续执行。假设我们有这么一个场景,教室...

2020-04-09 22:08:36 120

原创 05 java 中锁你知道哪些?请手写一个自旋锁?

公平和非公平锁是什么 公平锁:是指多个线程按照申请的顺序来获取值 非公平锁:是值多个线程获取值的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,在高并发的情况下,可能会造成优先级翻转或者饥饿现象 两者区别 公平锁:在并发环境中,每一个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个就占有锁,否者就会加入到等待队列中,以后会...

2020-04-09 22:07:05 237

原创 05 我们知道 ArrayList 是线程不安全,请编写一个不安全的案例并给出解决方案?

故障现象 123456789101112 public class ContainerDemo { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); ...

2020-04-09 22:05:24 127

原创 04 原子类 AtomicInteger 的 ABA 问题谈一谈?原子更新引用知道吗

原子引用 12345678910 public class AtomicReferenceDemo { public static void main(String[] args) { User cuzz = new User("cuzz", 18); User faker = new U...

2020-04-09 22:04:26 217

原创 03 CAS 你知道吗?

CAS 你知道吗? 1234567891011 public class CASDemo { public static void main(String[] args) { AtomicInteger atomicInteger = new AtomicInteger(666); // 获取真实值,...

2020-04-09 22:03:02 123

原创 01 动态代理是如何实现的?JDK Proxy 和 CGLib 有什么区别?

90% 的程序员都直接或间接的使用过动态代理,无论是日志框架或 Spring 框架,它们都包含了动态代理的实现代码。动态代理是程序在运行期间构建代理对象和动态调用代理方法的一种机制。那么,如何实现动态代理?JDK Proxy 和 CGLib 有什么区别?动态代理的常用实现方式是反射。反射机制是指程序在运行期间可以访问、检测和修改其本身状态或行为的一种能力,使用反射我们可以调用任意一个类对象...

2020-04-09 21:31:36 164

转载 docker Mysql5.7的安装和Navicat远程连接

文章目录目录文章目录前置条件 拉取mysql:5.7的docker镜像 预先配置 建立配置文件 运行命令 使用navicat连接mysql进行检查 连接云端mysql

2020-03-31 20:32:02 1571

原创 sleep方法和wait方法的区别

来自不同的类:wait方法是Object类的方法,sleep方法是Thread类的方法。对于锁的占用情况不同:最主要是sleep方法没有释放锁,而 wait 方法释放了锁,使得其他线程可以使用同步控制块或者方法。使用范围:wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用唤醒方式:调用sleep()方法的线程通常是睡...

2020-02-14 13:17:48 175

原创 Mybatis中当实体类中的属性名和数据库字段不一致时怎么处理

写sql语句时起别名 在Mybatis的全局配置文件中启用驼峰规则 在Mapper映射文件中使用ResultMap来自定义映射规则

2020-02-11 22:07:04 1897

原创 mysql 什么情况下需要做索引

哪些情况需要做索引主键主动创建唯一索引 频繁作为查询条件的字段应该创建索引 查询中其他表关联的的字段,外键关系应创建索引 单建/组合索引的选择问题,组合索引性价比最高 查询中排序的字段应该做索引 查询中统计或者分组字段哪些情况不需要创建索引表记录太少 经常增删改查的字段 where条件里用不到的字段 过滤性不好的字段...

2020-02-11 21:46:21 591

原创 ArrayList去重

1.利用HashSet(不保证元素顺序一致)  HashSet不会存在相同的元素,可以利用这一点去除List中的重复元素public static void main(String[] args) { List<String> beforeList = new ArrayList<String>(); beforeList.ad...

2020-02-11 15:01:10 425

转载 java生成csv文件时,某数据含有逗号,双引号的分割问题

解决思路:某字符含有逗号时,将该字符用双引号引起来,那么字符里的逗号将不会被解析;含有双引号时,可替换为两个双引号public String handleCsvComma(String str) { String handleStr=str; //先判断字符里是否含有逗号 if(str.contains(",")){ //如果还有双引号,先将双引号转义,避...

2020-01-16 22:13:30 4414

原创 IntelliJ IDEA给Serializable类加上自动的serialVersionUID

2020-01-06 22:14:07 273

原创 Redis

Redis实现缓存的常用注解@Cacheable @Cacheput @CachEvictRedis 分布式锁支持分布式 可以更加细粒度的控制 多台机器上的多个进程对一个数据进行互斥的操作Redis 持久化的使用的方式:RDB持久化 AOF持久化 无持久化 同时使用RDB持久化和AOF持久化...

2019-12-01 13:46:38 72

转载 抽象类和接口的区别与应用场景

接口和抽象类有什么区别在应用场景下,选择使用接口和抽象类的依据是什么?一、抽象类和接口在语法上的异同:1、相同点都不能被实例化2、不同点     第一点. 接口是抽象类的变体,接口比抽象类更加抽象,接口中所有的方法都是抽象的。第二点. 每个类只能继承一个抽象类,但是可以实现多个接口第三点.抽象类中不一定都是抽象方法,抽象的而抽象类可以实现部分方法。但是接口中方法必须为...

2018-10-29 23:03:52 145

空空如也

空空如也

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

TA关注的人

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