java
程序秘籍
资深软件工程师,擅长java开发、高并发处理。关注大数据,分布式,高性能架构领域。
展开
-
JVM运行结构图
JVM简介JVM是Java Virtual Machine的简称,意为Java虚拟机。JVM有很多种,使用最为广泛的JVM为HotSpot。JVM是Java程序得以运行的平台,也是Java程序可以跨平台的底层支撑,从整体上来看,JVM的主要功能可以分为加载和执行两大块。其中类加载器负责.class文件的寻址与加载,执行引擎负责字节码指令执行及内存的管理等等。下面是JVM一个经典的体系结构图:...原创 2019-11-18 22:12:34 · 612 阅读 · 0 评论 -
Java线上应用故障排查
前言在平时的工作中有时会碰到线上故障排查,把排查故障的方法和解决方案做个总结,记录下来作为笔记,一可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的朋友有好的经验可以交流,大家一起进步。一、故障排查高CPU占用1、top命令:Linux命令,可以查看实时的CPU使用情况,也可以查看最近一段时间的CPU使用情况。2、PS命令:Linux命令,强大的进程状态监控命令,可以查看进程以及...原创 2019-11-16 22:09:10 · 295 阅读 · 0 评论 -
解锁Redis分布式锁的正确实现姿势
一、什么是分布式锁?分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。二、常见的分布式锁有哪些实现方式?数据库乐观锁或者悲观锁实现的分布式锁;基于Redis的分布式锁;基于ZooKeeper的分布式锁。本次将主要介...原创 2019-11-12 22:53:46 · 679 阅读 · 0 评论 -
高并发分布式场景最全的MQ消息重发幂等性解决方案
@T高并发分布式场景最全的MQ消息重发幂等性解决方案OC一、幂等性是什么?在编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。简单来说就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的。二、什么情况下会出现重复消费?...原创 2019-11-09 09:43:53 · 1148 阅读 · 0 评论 -
java集合总结
以思维导图的形式梳理java集合,便于直观的对集合有一个整体清晰的认识。java技术交流群有兴趣的朋友可以加微信一起交流学习,微信号:zw9191991原创 2018-03-22 11:32:31 · 212 阅读 · 0 评论 -
C# Encoding.Unicode.GetBytes(password) 转 java 写法
在 .net C#中16进制 Encoding.Unicode.GetBytes(password) 转java 写法为:/**16进度**/byte[] passwordByte = paswword.getBytes("UTF-16LE");原创 2018-09-03 19:05:30 · 3386 阅读 · 1 评论 -
C# Convert.FromBase64String(salt) 转 java 写法
C# Convert.FromBase64String(salt) 转 java 写法:/**base64**/byte[] saltByte = DatatypeConverter.parseBase64Binary(salt);原创 2018-09-03 19:45:35 · 4927 阅读 · 0 评论 -
JAVA线程池总结 详解一
线程池的优点1、线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。2、可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。线程池的创建1 public ThreadPoolExecutor(int corePoolSize,2 int maximum...转载 2019-02-27 13:47:56 · 147 阅读 · 0 评论 -
JAVA线程池总结 详解二
Executor框架的两级调度模型在HotSpot VM的模型中,JAVA线程被一对一映射为本地操作系统线程。JAVA线程启动时会创建一个本地操作系统线程,当JAVA线程终止时,对应的操作系统线程也被销毁回收,而操作系统会调度所有线程并将它们分配给可用的CPU。在上层,JAVA程序会将应用分解为多个任务,然后使用应用级的调度器(Executor)将这些任务映射成固定数量的线程;在底层,操作...转载 2019-02-27 13:48:53 · 151 阅读 · 0 评论 -
最全的分布式事务总结
目录1. 事务的定义 22. 数据库本地事务四大特性 ACID 23. mysql InnoDB 实现原理 24. 什么是分布式事务 35. 分布式事务产生的原因 46. 分布式事务的基础理论 47. 分布式事务协议 58. 分布式常用解决方案 79. 开源分布式框架 131.事务的定义事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执...原创 2019-03-15 11:58:06 · 298 阅读 · 0 评论 -
JVM系列(二)java类的加载机制详解
java类的加载机制详解 1、什么是java类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并...转载 2018-03-19 19:02:19 · 164 阅读 · 0 评论 -
JVM系列总结(一)
什么是JVM?JVM(Java Virtual Machine,Java虚拟机) Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。因此在运行时,Java源程序需要通过编译器编译成为.class文件。众所周知java.exe是java class文件的执行程序,...原创 2018-03-19 18:43:15 · 168 阅读 · 0 评论 -
单例模式中为什么用枚举更好?
枚举单例有序列化和线程安全的保证,而且只要几行代码就能实现是单例最好的的实现方式,不过你仍然可以使用其它的方式来实现单例,但是我仍然得不到一个更有信服力的原因不去使用枚举。转载 2017-04-05 18:59:37 · 282 阅读 · 0 评论 -
java之yield(),sleep(),wait()区别详解-备忘笔记
1、sleep()使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。例如有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的转载 2017-06-02 15:00:06 · 204 阅读 · 0 评论 -
java中yield()方法如何使用
Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。结论:yield()从未导致线程转到等待/...原创 2017-06-02 15:08:16 · 67895 阅读 · 12 评论 -
35 个 Java 代码性能优化总结
前言代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑 的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上 线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考转载 2017-07-18 11:22:56 · 377 阅读 · 0 评论 -
高并发系统的一些处理策略
高并发系统的一些处理策略:服务器配置数据库设计以及优化缓存数据一致性处理 服务器配置: 集群的环境,每个主机选择apahe 还是nginx,nignx的并发性好。nginx和apche区别 以及服务器的配置,例如缓存大小等 根据实际情况,可能对于图像比较多的情况,单独配置nginx服务器,作为图像服务器。在实习中使用的是七牛家的云存储单独作为图转载 2017-11-29 11:47:44 · 1459 阅读 · 0 评论 -
软件项目开发步骤
第一步:需求调研分析 1、相关系统分析员向用户初步了解需求,然后用word列出要开发的系统大功能模块,每个大功能模块有哪些小功能模块,对于有些需求需要明确相关的界面时,在这一步里面可以初步定义好少量的界面。 2、系统分析员深入了解和分析需求,根据自己的经验和需求用word或相关的工具再做出一份文档系统的功能需求文档。这次的文档会清楚利用系统大致的大功能模块,大功能模块有哪些小功能模原创 2017-11-25 17:00:19 · 3624 阅读 · 0 评论 -
jvm中的年轻代 老年代 持久代 gc
虚拟机中的共划分为三个代:年轻代(Young Generation)、老年代(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。 年轻代:所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对...转载 2018-03-01 11:45:23 · 202 阅读 · 0 评论 -
BIO与NIO、AIO的区别
IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒绝请求,如...转载 2018-03-17 16:46:20 · 187 阅读 · 0 评论 -
NIo、Bio、aio、 的原理及区别与应用场景
在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下: 序号问题1什么是同步?2什么是异步?3什么是阻塞?4什么是非阻塞?5什么是同步阻塞?6什么是同步非阻塞?7什么是异步阻塞?8什么是异步非阻塞?散仙不才,在查了一部分资料后,愿试着以通俗易懂的方式解释下这几个名词。如有不足之处,还望告知。 在弄清楚上面的几个问题之前,我们首先得明白什么是同步,异步,阻塞,非阻塞,只有这几个...转载 2018-03-17 16:58:17 · 178 阅读 · 0 评论 -
单例模式中为什么用枚举更好?
枚举单例有序列化和线程安全的保证,而且只要几行代码就能实现是单例最好的的实现方式,不过你仍然可以使用其它的方式来实现单例,但是我仍然得不到一个更有信服力的原因不去使用枚举。转载 2017-04-05 18:13:17 · 212 阅读 · 0 评论