- 博客(91)
- 资源 (9)
- 收藏
- 关注
原创 【死磕JVM】五年 整整五年了 该知道JVM加载机制了!
类加载Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程和那些编译时需要连接工作的语言不同,在Java语言里,类型的加载,连接和初始化过程都是在程序 运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为java应用程序提供比较高的灵活性。当我们使用到某个类的时候,如果这个类还未从磁盘上加载到内存中,JVM就会通过三步走策略(加载、连接、初始化)来对这个类进行初始化,JVM完
2021-02-27 17:29:52
7289
38
原创 【死磕JVM】JVM快速入门之前戏篇
简介Java是一门可以跨平台的语言,但是Java本身是不可以实现跨平台的,需要JVM实现跨平台。javac编译好后的class文件,在Windows、Linux、Mac等系统上,只要该系统安装对应的Java虚拟机,class文件都可以运行。达到 ”一次编译,到处运行” 的效果。什么是JVMJVM是可以运行在Java代码的虚拟的计算机,既然是虚拟的计算机,当然也包含自己的CPU、字节码指令集、寄存器、栈、垃圾回收、堆和存储方法域,我们可以理解成JVM自己就是一套操作系统。Java从编译到执行Virt
2021-02-24 15:51:42
1842
23
原创 运维:生产日志重复打印了,赶紧来看看~
一、前言在一次生产环境发布后,运维对我说,你这个日志打印了两遍,你看一下,我很好奇,打印了两遍,本地和测试都没有这个问题啊,然后运维就发了下面两个文件给我,一看还真是,日志怎么打印了两遍启动也是日志会打印两遍二、解决方案刚开始是看资料说设置:配置文件中logger的additivity属性为 false但是还是会重复打印两遍日志,并没有什么特别的效果但是后来一想,本地和测试都可以,只有生产不行,是不是文件日志文件设置的有问题,于是重新写了日志类:logback-spring.xml<
2021-02-04 11:07:10
3410
2
原创 面试题系列——偷偷学MyBatis
MyBatis 面试题1、什么是Mybatis?1、Mybatis 是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql 执行性能, 灵活度高。2、MyBatis 可以使用XML 或注解来配置和映射原生信息, 将POJO 映射成数据库中的记录,避免了几乎所有的JDBC 代码和手动设置参数以及获取结果集。3、通过xml 文件或注解的方式将
2021-01-08 15:52:11
469
5
原创 从美术生到程序员转型之路【我的故事】
前言一直就想写一个关于自己经历的文章,奈何一直没有好的思路加上也很忙,终于好不容易有了一个周末,想着写写吧,小农是一个在上海勤劳的打工人,想一想自己做这行(程序员)已经也不少时间了,以前从没有想过自己会去做软件,也从来想过要去干嘛或者长大了要做什么,小时候,最开心的事情自然就是玩耍了,小时候学习成绩并不算太好,除了初三的时候好像醒悟了一下,努力了一点,但是亡羊补牢为时已晚。临近初中毕业的之前会有很多那种高中或者技校的老师来宣传,那个时候爸妈也没怎么去管我们,看我们自己的意愿,看自己怎么选择,后来我选择继
2020-12-28 16:04:20
6764
25
原创 这一年,你过得还好吗?
文章目录一、前言二、我们的20202020年,我们戴上了口罩2020年,我们告别了许多传奇2020年,世界经历的自然灾害三、我的20202020的小结四、我的2021五、正能量六、总结一、前言2020只剩下不到十天了,这一年,你过得还好吗?也许,我们曾在深夜的被窝里哭到鼻塞,第二天依旧像个没事人一样也许,去年我们规划的计划,搁置到了现在却还是没机会实现也许,曾经说好"要永远永远在一起的人",如今已变成陌路人也许这一年我们有太多的遗憾…但是。。。。。上帝为你关上一扇门的时候,也会为你打开一扇窗
2020-12-25 13:39:52
1182
16
原创 关于MySQL索引知识与小妙招 — 学到了!
一、索引基本知识1.1 索引的优点1、大大减少了服务器需要扫描的数据量2、帮助服务器避免排序和临时表3、将随机io变成顺序io1.2 索引的用处1、快速查找匹配WHERE子句的行2、从consideration中消除行,如果可以在多个索引之间进行选择,mysql通常会使用找到最少行的索引3、如果表具有多列索引,则优化器可以使用索引的任何最左前缀来查找行4、当有表连接的时候,从其他表检索行数据5、查找特定索引列的min或max值6、如果排序或分组时在可用索引的最左前缀上完成的,则对表进行
2020-12-19 15:28:52
3989
11
原创 看完这篇,再也不怕面试官问我线程池了
一、为什么需要线程池在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题。因此,在大多数并发框架中都会使用线程池来管理线程,使用线程池管理线程主要有如下好处:1、使用线程池可以重复利用已有的线程继续执行任务,避免线程在创建和销毁时造成的消耗2、由于没有线程创建和销毁时的消耗,可以提高系统响应速度3、通过线程可以对线程进行合理的管理,根据系统的承受能力调整可运行线程数量的大小等二、工作原理线程池执行所提交的任务过程:▪ 1、先判断线程池中核心线程池所有的线程是否都在
2020-12-02 10:12:23
8098
32
原创 微服务下的持续集成-Jenkins自动化部署GitHub项目
文章目录一、DevOps概念二、为什么要做持续集成三、常见云服务四、手动部署Jenkins五、Jenkins + Maven +Git 自动化继承/测试一、DevOps概念持续集成服务(Continuous Integration,简称 CI)它绑定 Github 上面的项目,只要有新的代码,就会自动抓取。然后,提供一个运行环境,执行测试,完成构建,还能部署到服务器。持续集成指的是只要代码有变更,就自动运行构建和测试,反馈运行结果。确保符合预期以后,再将新代码"集成"到主干。持续集成的好处在于,每
2020-11-19 22:56:14
2130
20
原创 安装linux虚拟机(CentOS) 详细教程
Linux 环境准备:虚拟机安装包(包含密钥):https://pan.baidu.com/s/1ZlDb1AQrIHflfHgICXj84w 提取码:k1kdCentOS镜像文件:http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso1:虚拟机安装1.1、新建虚拟机,选择自定义1.2、...
2020-11-16 22:19:44
3256
10
原创 JDK新特性-Lambda表达式的神操作
一、Lambda表达式的介绍Lambda表达式是 Java8 中最重要的新功能之一。使用 Lambda 表达式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看起来更简洁易懂。Lambda表达式同时还提升了对集合、框架的迭代、遍历、过滤数据的操作。lambda表达式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看起来更简洁易懂lambda表达式同时还提升了对集合、框架的迭代、遍历、过滤数据的操作lambda可以极大的减少代码冗余,同时代码的可读性要好过冗长的内
2020-11-07 15:22:47
1744
21
原创 JDK新特性——Stream代码简洁之道
一、概述Stream 是一组用来处理数组、集合的API,Stream API 提供了一种高效且易于使用的处理数据的方式。Java 8 中之所以费这么大的功夫引入 函数式编程 ,原因有两个:代码简洁函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。多核友好,Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是用用一下parallel()方法Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤
2020-10-24 12:17:54
6116
172
原创 ActiveMQ详细入门教程系列(一)
一、什么是消息中间件两个系统或两个客户端之间进行消息传送,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。消息中间件,总结起来作用有三个:异步化提升性能、降低耦合度、流量削峰。系统A发送消息给中间件后,自己的工作已经完成了,不用再去管系统B什么时候完成操作。而系统B拉去消息后,执行自己的操作也不用告诉系统A执行结果,所以整个的通信过程是异步调用的。二、什么是ActiveMQActiveM
2020-10-11 10:50:19
1993
34
原创 程序员必须了解的知识点——你搞懂mysql索引机制了吗?
索引是什么MySQL官方对索引的定义为:索引(Index)是帮助MySQL 高效 获取数据的数据结构。在使用数据库中,通常数据库查询是数据库的最主要功能之一。但每种查找算法都只能应用于特定的数据结构之上。例如二分查找要求被检索数据有序而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现
2020-09-20 15:48:14
4462
12
原创 多线程与高并发笔记
1. 创建线程的三种方式实现Runnable 重写run方法继承Thread 重写run方法线程池创建 Executors.newCachedThreadPool()2. Thread线程操作方法Thread.sleep([mills])当前线程睡眠指定mills毫秒Thread.yield()当前线程优雅让出执行权join例如Thread t1, t2在t2的run方法中调用t1.join(),线程t2将等待t1完成后执行3. Thread状态
2020-09-13 10:14:52
2748
18
原创 五大分布式事务,你了解多少?
一、前言事务(Transaction):一般是指要做的或所做的事情,由 事务开始(begin transaction) 和 事务结束(end transaction) 之间执行的全体操作组成。简单的讲就是:要么全部被执行,要么就全部失败。那分布式事务,自然就是运行在分布式系统中的事务,是由多个不同的机器上的事务组合而成的。同上,只有分布式系统中所有事务执行了才能是成功,否则失败。事务的基本特征ACID:原子性(Atomicity): 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做.
2020-09-12 10:59:03
2955
26
原创 面试中的这些点,你get了吗?
一、前言因为疫情的原因,小农从七月份开始找工作,到现在已经工作了一个多月了,刚开始找工作的时候,小农也担心出去面试技能不够,要懂的东西很多,自己也准备可能会面试一段时间,从找工作到入职花了十几天,总共拿到了5份office,然后选择了一家去入职了,因为项目需要上线了,所以小农最近一直在加班,平时会比较忙一点,刚好周末想着把这段时间的经历写出来,希望对找工作或者刚入职的同学,能有一点点的帮助吧二、面试前的准备磨刀不费砍材功,对于想要找工作的小伙伴们,面试前的准备肯定是少不了的,至于多久开始准备,如果.
2020-08-29 12:43:02
7426
27
原创 Spring Cloud Admin健康检查 邮件、钉钉群通知
源码地址:https://github.com/muxiaonong/Spring-Cloud/tree/master/cloudadminAdmin 简介官方文档:What is Spring Boot Admin?SpringBootAdmin是一个用于管理和监控SpringBoot微服务的社区项目,可以使用客户端注册或者Eureka服务发现向服务端提供监控信息。注意,服务端相当于提供UI界面,实际的监控信息由客户端Actuator提供通过SpringBootAdmin,你可以通过华丽大气的界
2020-08-22 11:23:53
3660
51
原创 来自灵魂的拷问——知道什么是SQL执行计划吗?
面试官说:工作这么久了,应该知道sql执行计划吧,讲讲Sql的执行计划吧!看了看面试官手臂上纹的大花臂和一串看不懂的韩文,吞了吞口水,暗示自己镇定点,整理了一下思绪缓缓的对面试官说:我不会面试官:。。。。,回去等通知吧我:%^&%$!@#一、前言当我们工作到了一定的年限之后,一些应该掌握的知识点,我们是必须需要去了解的,比如今天面试官问的SQL执行计划当我们执行一条SQL的时候,可以直接对应的结果,但是你并不晓得,它会经历多深远黑暗的隧道,通过连接器、查询缓存、分析器、优化器、执行器重.
2020-08-06 23:36:59
1150
17
原创 掌握Redis分布式锁的正确姿势
前言在Java中,我们对于锁会比较熟悉,常用的有 synchronized、Lock锁,在java并发编程中,我们通过锁,来实现当多个线程竞争同一个共享资源或者变量而造成的数据不一致的问题,但是JVM锁只能针对于单个应用服务,随着我们业务的发展需要,单体单机部署的系统早已演化成分布式系统,由于分布式系统的多线程、多进程而且分布在不同的机器上,这个时候JVM锁的并发控制就没有效果了,为了解决跨JVM锁并且能够控制共享资源的访问,于是有了分布式锁的诞生。为什么JVM锁在分布式下不可以呢?我们通过代码来.
2020-07-18 11:12:12
2894
5
原创 SpringColud Eureka的服务注册与发现
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>有的教程中还引入spring-boot-starter-web,其实不用。因为上面的依赖已经包含了它。在pom中点此依赖进去,一共点4次spring-c
2020-06-13 19:46:42
4355
45
原创 小白也能看懂的锁升级过程和锁状态
一、前言锁的状态总共有四种,级别由低到高依次为:自旋锁、偏向锁、轻量级锁、重量级锁,这四种锁状态分别代表什么,为什么会有锁升级?其实在 JDK 1.6之前,synchronized 还是一个重量级锁,是一个效率比较低下的锁,但是在JDK 1.6之后,Jvm为了提高锁的获取与释放效率对(synchronized )进行了优化,引入了 偏向锁 和 轻量级锁 ,从此以后锁的状态就有了四种(自旋锁、偏向锁、轻量级锁、重量级锁),并且四种状态会随着竞争的情况逐渐升级,而且是不可逆的过程,即不可降级,也就是说只能进
2020-06-06 12:40:23
7357
76
原创 悲观锁与乐观锁的实现(详情图解)
一、前言在了解悲观锁和乐观锁之前,我们先了解一下什么是锁,为什么要用到锁?技术来源于生活,锁不仅在程序中存在,在现实中我们也随处可见,例如我们上下班打卡的指纹锁,保险柜上的密码锁,以及我们我们登录的用户名和密码也是一种锁,生活中用到锁可以保护我们人身安全(指纹锁)、财产安全(保险柜密码锁)、信息安全(用户名密码锁),让我们更放心的去使用和生活,因为有锁,我们不用去担心个人的财产和信息泄露。而程序中的锁,则是用来保证我们数据安全的机制和手段,例如当我们有多个线程去访问修改共享变量的时候,我们
2020-05-27 10:26:59
13264
123
原创 面试三轮我倒在了一道sql题上——sql性能优化
一、前言最近小农在找工作,因为今年疫情的特殊原因,导致工作不是特别好找,所以一旦有面试电话,如果可以,都会去试一试,刚好接到一个面试邀请,感觉公司还不错,于是就确定了面试时间,准备了一下就去面试了。第一轮面试是小组组长面试,通过。第二轮是经理面试也是通过了。第三轮总监面试,前面都还有模有样,突然画风一转,面试官说:“问你最后一个问题”面试官:10W条数据,我要从其中查出100条不连续的数据,给你id,来查name和password进行展示,如何才能高性能的去使用?我:在id上建立聚簇索引,
2020-05-14 16:30:14
18094
184
原创 “金三银四” 是找工作的最佳时期吗?
一、为什么会出现“金三银四”的现象职场中,一直有“金三银四、金九银十”的说法,这指的是一年中求职的两个高峰期那么为什么会出现金三银四的现象?一、年终奖已发放,调薪情况已确定二、公司增加员工名额,弥补劳动缺口中国的春节一般都是在一月中下旬或者在二月中上旬,所以在这个期间很多公司都会选择在春节前完成对员工的综合考评,并发放我们最期待的年终奖,发了年终奖和没有年终奖那根本就是两个状态啊如果在年末离职,那么可能错过了考评,那么一年辛辛苦苦,心心恋恋的年终奖就拿不到了,这样未免也太亏了,所以即使是在年初
2020-05-12 14:10:59
6650
46
原创 JVM性能优化(四)提高网站访问性能之Tomcat优化
一、前言tomcat 服务器在JavaEE项目中使用率非常高,所以在生产环境对tomcat的优化也变得非常重要了,对于tomcat的优化,主要是从2个方面入手,一是tomcat本身的配置,另一个是tomcat所运行的Jvm虚拟机的调优Tomcat配置优化案例中使用的Tomcat版本是 8.0+ 版本下载安装:https://tomcat.apache.org/download-80.c...
2020-05-05 12:07:28
2492
7
原创 JVM性能优化(三)G1垃圾收集器
文章预习:JVM性能优化(二)垃圾回收算法详解一、简介G1垃圾收集器是在jdk1.7中正式使用的全新的垃圾收集器,oracle官方计划在jdk9中将G1变成默认的垃圾收集器,以替代CMSG1的设计 原则就是简化JVM性能调优,开发人员只需要简单的三步即可完成调优:第一步:开启G1垃圾收集器第二步:设置堆的最大内存第三步:设置最大的停顿时间G1中提供了三种模式垃圾回收模式,Youn...
2020-04-28 15:13:29
2554
16
原创 JVM性能优化(二)垃圾回收算法详解
一、什么是垃圾回收程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占用内存资源,最终将导致内存溢出,所以对内存资源的管理是非常重要了。1.1 C/C++语言的垃圾回收在C/C++语言中,没有自动垃圾回收机制,是通过new关键字申请内存资源,通过delete 关键字释放内存资源,如果程序员在某些位置没有写delete进行释放,那么申请的对象将一直占用内存资源,最终可能会导致...
2020-04-25 10:20:38
2035
20
原创 JVM性能优化 (一) 初识JVM
一、我们为什么要对JVM做优化在本地开发环境中我们很少会遇到需要对JVM进行优化的需求,但是到了生产环境,我们可能会有下面的需求:运行的应用“卡住了”,日志不输出,程序没有反应服务器的CPU负载突然升高在多线程应用下,如何分配线程的数量?本次使用的JDK版本为1.8二、JVM的运行参数在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能够高效的运行,绝大部分的...
2020-04-22 13:50:24
1923
19
原创 说说TCP的三次握手和四次挥手
一、传输控制协议TCP简介1.1 简介TCP(Transmission Control Protocol) 传输控制协议,是一种 面向连接的、可靠的、基于字节流的传输层 通信协议。TCP是一种面向连接(连接导向)的、可靠的基于字节流的传输层通信协议。TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据。TCP把连接作为最基本的对...
2020-04-08 21:53:16
1267
39
原创 闲下来的学习时光
一、疫情下的阴影2020年开头,我们国家就迎来了一场艰难的战斗,在新型冠状病毒影响下,让全中国进入了一场没有硝烟的战争,
2020-03-14 09:36:50
3973
10
原创 在老家最长的寒假之旅
一、前言一月二十二号,在外地工作的我,准备从上海回到湖北老家,前几天就听同事说当时肺炎有点严重,但是当时其实并没有很在意,因为当时报告的情况并不是特别严重,只是当时的上海口罩就已经都卖光了,刚好一个朋友那附近有就让他帮忙买了一盒3M的口罩,就这样带着一个箱子一盒口罩踏上了返乡的路程,当时高铁上基本上所有的人都戴着口罩,傍晚我爸来接我,回到了家中,原以为可以正常返程,没有想到在家乡一呆就到了今天,...
2020-03-08 15:17:38
3881
8
原创 网页性能优化之图片懒加载
一、前言最近因为需要做一个小网站,但是呢,因为图片比较多,打开网页速度很慢,服务器压力就会很大。不仅影响渲染速度还会浪费带宽,比如一个1M大小的图片,并发情况下,达到1000并发,即同时有1000个人访问,就会产生1个G的带宽。于是就想到了图片懒加载来减轻服务器的压力,优先加载可视区域的内容,其他部分等进入了可视区域再加载,从而提高性能,可以大幅度的提高网页加载速度,效果很明显,于是想着将这个方...
2020-01-14 10:33:19
5066
10
原创 你好2020,再见2019(年终总结)
一、前言不知不觉,新的一年已经来到,还有二十几天就要过年了,总是在感慨时间过的真快,感觉仿佛昨天还是2019年七月份,马上就快要过年了,回想2019年一年,好像算是做了一点有意义的事情:在自媒体方面:公众号开始写起来了,博客也有在慢慢的积累,阅读量从四万到10万,对于我个人来说也是一个小小的突破,获取的英雄榜的荣誉称号,对我也是一个肯定,以后以后再接再厉。在技能方面:19年大部分时间都会下...
2020-01-02 11:18:18
3499
23
原创 idea java web项目导出为jar打包成可运行exe程序
一、前言前几天一个朋友找我,说有一个 数据接口开发 能够页面展示的小项目,能够在本地运行就行,不需要放到网上,问我这边可不可以做,本来想 婉言谢绝 的,但是听到说,可以给点 辛苦费,于是想到了 李白大诗人 说的一句:人生贵相知,何用金与钱。,朋友吗,不就是互相帮助吗?这个功能可以做的,我来我来,可以完成的,钱不钱的无所谓,主要是想为朋友做点事,咳咳咳~,言归正传,我那个朋友呢,他不是一个开发者,...
2019-12-04 16:12:29
4494
20
原创 数据结构 线性结构篇——链表
一、前言在前面两章我们讲解了动态数组、栈和队列的讲解,这些底层都是依托静态数组,靠 resize 解决固定容量问题的,之前虽然用户看到的是动态数组,但是依然使用的是静态数组,他是依靠 resize 这个方法解决 固定容量问题 ,但是我们今天要讲解的 链表 不一样,链表 是我们数据结构学习的一个重点,也有可能是一个难点,为什么链表这么重要呢?因为他是最简单的也是 真正的动态数据结构。二、为什么链...
2019-11-30 14:38:23
2652
19
原创 数据结构 线性结构篇——栈和队列
文章目录一、栈1.1 什么是栈1.2 栈的应用1.2.1 无处不在的撤销(undo)操作1.2.1 计算机程序调用的系统栈1.3 栈的实现一、栈1.1 什么是栈栈是一种线性架构相比数组,栈对应的操作时数组的子集栈只能从一端添加元素,也只能从一端取出元素,最先放入堆栈中的内容最后被拿出来,最后放入堆栈中的内容最先被拿出来, 被称为 先进后出 、后进先出。这里说的一端指的就是 栈顶,删除...
2019-11-25 15:09:39
2721
31
原创 数据结构 线性结构篇——动态数组和时间复杂度分析
一、数组基础1.1 定义数组(Array)是一种线性表数据结构,它用一组连续的内存空间来存储一组具有相同类型的数据。1.2 创建流程当我们在 java 中当创建一个数组时,会在内存中划分出一块 连续的内存 ,当有数据进入的时候会将数据 按顺序 的存储在这块连续的内存中。当需要读取数组中的数据时,需要提供数组中的 索引 ,然后数组根据索引将内存中的数据取出来,返回给读取程序。把数据...
2019-11-21 10:56:06
2359
21
CXF+Spring+自定义拦截器 WebService实例源码下载
2016-04-19
jquery easyui api
2016-08-08
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝