
程序员
文章平均质量分 81
普通网友
这个作者很懒,什么都没留下…
展开
-
14种经典Java算法详解,面试官随便问
又是新的一年,去年“金九银十”没赶上,问到算法一脸懵逼,吞吞吐吐。今年重振旗鼓,记住下面这些算法,手撕面试官!今年“金九银十”我必上的首班车!二分查找又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。public static int biSearch(int []array,int.原创 2020-09-22 16:53:17 · 908 阅读 · 0 评论 -
牛皮啊,兄弟!性能篇系列—stream详解
Stream APIJava 8集合中的Stream相当于高级版的IteratorStream API通过Lambda表达式对集合进行各种非常便利高效的聚合操作,或者大批量数据操作Stream的聚合操作与数据库SQL的聚合操作sorted、filter、map等非常类似 在数据操作方面,Stream不仅可以通过串行的方式实现数据操作,还可以通过并行的方式处理大批量数据,提高处理效率// java.util.Collectiondefault Stream<E> stream()原创 2020-09-18 20:15:46 · 500 阅读 · 0 评论 -
程序员:小姐姐,你学“反射”脱我裤子干嘛,这样不太好吧
前言:反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))首先学习反射之前,我要提出疑问:反射是个什么东西?它是用来做什么的?平时的应用场景有哪些?为啥要用它?它有什么优缺点?它的工作原理是什么?我怎么使用它?注意:光理论是不够的,在此送大家十套2020最新Java架构实战教程+大厂面试题库,转发本文,关注我后在后台私信【666】即可免费获取!Q1:什么是反射?A:反射就是把java类中的各种成分..原创 2020-09-14 20:19:30 · 738 阅读 · 0 评论 -
CPU使用率100%怎么办
工作中遇到CPU使用率100%,不要慌,一起来找出原因并fix掉它。记住这里大致流程,当线上突然遇到时,也不必手足无措。总体流程找出CPU比较高的进程PIDtop打印该进程下线程的CPU占用比较高的tidtop -Hp {PID}将该tid进行16进制转换idprintf "%x\n" {tid}打印线程的堆栈信息jstack {PID} |grep {id} -A 100当然这四步的执行需要时间,但我们可以将这几步写成sh...原创 2020-08-22 20:59:09 · 1334 阅读 · 0 评论 -
使用limit分页查询时,做delete操作,会导致丢失查找数据
一、准备数据 1.1 mysql数据脚本 1.2代码 二、验证 1.验证前全部数据 2.第一页数据 3.删除记录 4. 新增记录 5.第二页数据 6. 验证后的数据 7. log 三、结论 四、建议 没看过瘾?想要源文件? 一、准备数据1.1 mysql数据脚本 ...原创 2020-08-22 20:57:16 · 493 阅读 · 0 评论 -
sunFlow基于是基于camunda开发的工作流web系统
unFlow基于是基于camunda开发的工作流web系统。设计理念是易用,简单,美观,高效。 尤其注重对开发友好; 项目设计之初就考虑了前后端分离的vue开发模式。角色和路由之间的绑定跟角色和数据权限之间是不耦合的。前端开发只需要开发路由组件, 后端开发只需要开发 数据api接口。从菜单配置界面上分前端做的是左边的部分,后端是开发右边的部分,当然如果你不用工作流只用后台权限管理本框架也是一个绝佳的选择。wiki软件架构软件架构说明:目前项目分三个模块,camunda(工作流相关服务),upms-s原创 2020-08-20 16:11:50 · 1621 阅读 · 0 评论 -
大牛总结的 Spring Data JPA使用方法,不是一般的香啊
Spring Data JPA 是在 JPA 规范的基础上进行进一步封装的产物,和之前的 JDBC、slf4j 这些一样,只定义了一系列的接口。具体在使用的过程中,一般接入的是 Hibernate 的实现,那么具体的 Spring Data JPA 可以看做是一个面向对象的 ORM。虽然后端实现是 Hibernate,但是实际配置和使用比 Hibernate 简单不少,可以快速上手。如果业务不太复杂,个人觉得是要比 Mybatis 更简单好用。本文就简单列一下具体的知识点,详细的用法可以见参考文献中的博原创 2020-08-06 21:07:03 · 821 阅读 · 1 评论 -
JVM类加载器,类加载机制详解,看这一篇就够了
前言今天我们来讲讲jvm里类加载的过程,我们写了那么多类,却不知道类的加载过程,岂不是很尴尬。jvm的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由jvm的具体实现指定的。[来自官方规范]jvm组成结构之一就是类装载器的系统,我们今天就来仔细讲讲这个组件。Java代码执行流程图大家通过这个流程图,了解一下我们写好的Java代码是如何执行的,其中要经历类加载器这个流程,我们就来仔细讲讲这里面的知识点。原创 2020-08-06 21:03:40 · 461 阅读 · 0 评论 -
面试总被jvm对象的访问问题打回,推荐你看看这篇文章
对象的内存布局#在 HotSpot虚拟机中,对象在内存中存储的布局分为三块区域:对象头,实例数据,和对齐填充。对象头#对象头包括如下两部分信息:MarkWord:用于存储对象自身的运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。为了在极小空间内存储更多的信息,它被设计成了一个非固定的数据结构,根据对象的状态来复用自己的存储空间,如下:类型指针:到对象类型数据的指针,即虚拟机通过这个指针来确定这个对象属于哪个类。(有的虚拟机通过句柄池来实现.原创 2020-08-06 21:02:49 · 381 阅读 · 0 评论 -
SpringBoot中启动Tomcat的步骤流程
SpringBoot中如何启动Tomcat流程SpringBoot 项目之所以部署简单,其很大一部分原因就是因为不用自己折腾 Tomcat 相关配置,因为其本身内置了各种 Servlet 容器。一直好奇: SpringBoot 是怎么通过简单运行一个 main 函数,就能将容器启动起来,并将自身部署到其上 。此文想梳理清楚这个问题。我们从SpringBoot的启动入口中分析:Context 创建// Create, load, refresh and run the Applic.原创 2020-08-03 20:17:02 · 1967 阅读 · 0 评论 -
关于Java日志组件间关系的知识点分析
Java日志组件间关系详解一、 总览本文章不对日志组件进行优劣评价,只是对关系进行对比。在日志中组件中存在这样的几种关系, 这几种关系理解清楚, 有助于我们对日志的引入和使用。二、 日志门面日志门面就是指直接引入我们程序中进行记录日志的日志组件,作为日志门面的这些组件会在程序中直接依赖, 上图中就列举的几种常见的日志门面的组件。像一些软件直接回默认使用一些组件, 比如Spring使用的就是commons-logging, activiti使用的日志门面就是slf4j, 其他的软件也都会选原创 2020-08-03 20:16:37 · 418 阅读 · 0 评论 -
没有比这个更全的Java ThreadLocal实例用法了
java ThreadLocal使用案例详解本文借由并发环境下使用线程不安全的SimpleDateFormat优化案例,帮助大家理解ThreadLocal.最近整理公司项目,发现不少写的比较糟糕的地方,比如下面这个:public class DateUtil { private final static SimpleDateFormat sdfyhm = new SimpleDateFormat( "yyyyMMdd"); public synchroniz原创 2020-08-03 20:14:33 · 391 阅读 · 0 评论 -
全体起立,给我看SpringBoot中启动Tomcat的步骤流程
SpringBoot中如何启动Tomcat流程SpringBoot 项目之所以部署简单,其很大一部分原因就是因为不用自己折腾 Tomcat 相关配置,因为其本身内置了各种 Servlet 容器。一直好奇: SpringBoot 是怎么通过简单运行一个 main 函数,就能将容器启动起来,并将自身部署到其上 。此文想梳理清楚这个问题。我们从SpringBoot的启动入口中分析:Context 创建// Create, load, refresh and run the Applic.原创 2020-08-03 20:12:17 · 587 阅读 · 0 评论 -
浅析Java线程Dump分析工具jstack解析及使用环境
Java线程Dump分析工具jstack使用详解jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式:jstack [-l][F] pid如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jst原创 2020-08-03 20:09:46 · 763 阅读 · 0 评论 -
强啊老铁,纯手撸Java编程实现高斯模糊和图像的空间卷积的实例讲解
Java编程实现高斯模糊和图像的空间卷积详解高斯模糊高斯模糊(英语:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果,通常用它来减少图像杂讯以及降低细节层次。这种模糊技术生成的图像,其视觉效果就像是经过一个半透明屏幕在观察图像,这与镜头焦外成像效果散景以及普通照明阴影中的效果都明显不同。高斯平滑也用于计算机视觉算法中的预先处理阶段,以增强图像在不同比例大小下的图像效果。 从数学的角度来看,图像的高斯模糊过原创 2020-08-01 19:22:27 · 723 阅读 · 0 评论 -
牛人总结springboot之jackson的两种配置方式总结
springboot之jackson的两种配置方式springboot 针对jackson是自动化配置的,如果需要修改,有两种方式:方式一:通过application.yml配置属性说明:##spring.jackson.date-format指定日期格式,比如yyyy-MM-dd HH:mm:ss,或者具体的格式化类的全限定名spring.jackson.deserialization是否开启Jackson的反序列化spring.jackson.generator是否开启json的原创 2020-08-01 19:20:27 · 1008 阅读 · 0 评论 -
Java获取Html文本中的img标签下src中的实例方法
Java获取Html文本中的img标签下src中的内容方法如下所示:/** * 得到网页中图片的地址 * @param sets html字符串 */ public Set<String> getImgStr(String htmlStr) { Set<String> pics = new HashSet<String>(); String img = ""; Pattern p_image; Matcher m_image;原创 2020-08-01 19:16:54 · 511 阅读 · 0 评论 -
MySQL从入门到放弃安装的心得日志
详解MySQL从入门到放弃-安装学习内容1.软件安装及服务器设置。2.(选做,但是强烈建议) 使用图形界面软件 Navicat for SQL3.数据库基础知识数据库定义 关系型数据库 二维表 行 列 主键 外键4.MySQL数据库管理系统数据库 数据表 视图 存储过程软件安装MySQL下载链接:MySQL下载第一个,之后解压缩。我的目录在C:\Users\Public\MySQL,之后在该文件夹配置my.ini接下来启动MySQL,在.原创 2020-08-01 19:14:49 · 415 阅读 · 0 评论 -
如何解决MySQL多线程复制遇到Error_code: 1872
MySQL多线程复制遇到Error_code: 1872的解决方案上周在生产环境上遇到一个问题,不敢独享,拿出来给小伙伴们做个简单的分享。起因 :由于IDC机房断电(估计又是哪里被挖掘机碰了下吧),导致所有服务器重启,影响到了其中的MySQL数据库。来看下这时数据库遇到的问题:数据库版本 :MySQL 5.7.10问题表现:从机复制报如下错误:Slave SQL for channel ”: Slave failed to initialize relay log info struct原创 2020-08-01 19:13:01 · 561 阅读 · 0 评论 -
MySQL截取和拆分字符串函数实例讲解
MySQL截取和拆分字符串函数用法示例本文实例讲述了MySQL截取和拆分字符串函数用法。分享给大家供大家参考,具体如下:首先说截取字符串函数:SUBSTRING(commentid,9)这个很简单,从第9个字符开始截取到最后。SUBSTRING的参数有三个,最后一个是截取的长度,默认是到结尾,负数是倒数第几位。接着说拆分字符串函数:SUBSTRING_INDEX(commentid, '-', 1)这个就稍稍复杂一些了,他的意思是以 - 进行拆分字符串,从第一个关键词原创 2020-08-01 19:12:01 · 479 阅读 · 0 评论 -
找不到或无法加载主类(IDEA中启动spring boot项目)
提示:需要对IDEA编辑工具使用熟悉出现一个问题,就是spring boot项目在IDEA中,启动类右键运行,控制台提示:错误: 找不到或无法加载主类 xxx.xxx.xxx.xxxx 启动类包名。说明一下我的情况,项目是从远程git仓库导出的Maven项目,直接使用Maven打包jar是可以成功的,并且生成了 target输出目录,生成了target目录后就可以运行了,不会报错找不到主类,但是你会发现你修改的Java代码无效,也就是不会编译到target目录中。搞了半天,其实从开始到最后都原创 2020-07-29 19:36:16 · 1375 阅读 · 0 评论 -
大神手把手教你Intellij Idea部署OpenCV 4.0.0环境的具体步骤
Intellij Idea部署OpenCV 4.0.0环境本文为大家分享了Intellij Idea部署OpenCV 4.0.0环境,供大家参考,具体内容如下建议 OpenCV-4.0.0 的解压位置不要放在C盘1. 首先下载并安装好Intellij Idea 2018.3 或者其他版本的Idea2. 新建一个Java工程2.1 点击File2.2 点击Java直接点Next2.3 可以选择或者不选择2.4 填写好项目名称3. 添加...原创 2020-07-29 19:35:17 · 815 阅读 · 1 评论 -
嗯,不错通俗易懂的讲解Java8 ParallelStream并发安全原理
Java8 parallelStream并发安全背景Java8的stream接口极大地减少了for循环写法的复杂性,stream提供了map/reduce/collect等一系列聚合接口,还支持并发操作:parallelStream。在爬虫开发过程中,经常会遇到遍历一个很大的集合做重复的操作,这时候如果使用串行执行会相当耗时,因此一般会采用多线程来提速。Java8的paralleStream用fork/join框架提供了并发执行能力。但是如果使用不当,很容易陷入误区。Java8的parall原创 2020-07-29 19:34:11 · 736 阅读 · 0 评论 -
神仙打架:RabbitMQ七战Kafka,看看谁才是王者
作为一个有丰富经验的微服务系统架构师,经常有人问我,“应该选择RabbitMQ还是Kafka?”。基于某些原因, 许多开发者会把这两种技术当做等价的来看待。的确,在一些案例场景下选择RabbitMQ还是Kafka没什么差别,但是这两种技术在底层实现方面是有许多差异的。不同的场景需要不同的解决方案,选错一个方案能够严重的影响你对软件的设计,开发和维护的能力。这篇文章会先介绍RabbitMQ和Apache Kafka内部实现的相关概念。紧接着会主要介绍这两种技术的主要不同点以及他们各自的优缺点,最后我们原创 2020-07-22 21:11:20 · 457 阅读 · 0 评论 -
开发两年了,构造方法和方法重载还不会啊,弟弟?我来点点你
成员方法类成员主要包括成员变量和成员方法。 带参数的成员方法 带参数的成员方法可以接受用户输入的内容。创建带参数的方法时定义的参数叫形式参数,即形参;调用方法时传入的参数叫实际参数,即实参。 语法结构:// 有参方法[访问修饰符] 返回值类型 方法名(参数列表){ 代码; return 具体的返回值; }复制代码参数传递:基本数据类型做参数时,传递的是值,不能出方法的范围 引用数据类型做参数时,传递的是地址,可以影响方法外部 特殊:String做参数时,等同于基本数.原创 2020-07-22 21:07:49 · 381 阅读 · 0 评论 -
一道腾讯的面试题:如何避免 CDN 为 PC 端缓存移动端页面
❞如果 PC 端和移动端是一套代码则不会出现这个问题。「这个问题出现在 PC 端和移动端是两套代码,却共用一个域名。」使用 nginx 配置如下,根据 UA 判断是否移动端,而走不同的逻辑 (判断UA是否移动端容易出问题)location / { // 默认 PC 端 root /usr/local/website/web; # 判断 UA,访问移动端 if ( $http_user_agent ~* "(Android|webOS|iPhone|iPad|B原创 2020-07-14 15:18:55 · 631 阅读 · 0 评论 -
太厉害了,阿里大牛居然把Git,GitHub总结的这么全面,撸源码去
“版本控制系统”( Version Control System, vcs)是程序代码管理软件的通称,是用来保存程序文件的修改记录以及历史版本,以便日后查看或是使用。Vcs已经有数十年的发展历史,最早期的系统是采用集中管理和控制的方式。如果要修改某一个 程序文件,必须先将它锁定,然后取出修改。在完成修改和回传之前,其他人都不能更改这个程序文件。这种方式可以有效避免“冲突”( confict)的发生(也就是防止不同人同时修改同一段程序代码所造成混淆的情况) ,但是付出的代价,是效率降低。因为如果想要修改的原创 2020-07-10 14:12:21 · 1037 阅读 · 0 评论 -
No Code的世界绝无代码!GitHub CEO:编码的未来根本就没有编码
近年来,无代码开发日渐流行。非专业的人员现在也能够参与到开发中了!越来越多的企业选择了无代码开发平台,以提高工作的效率,互联网企业或因无代码/低代码开发迎来「新时代」。世界正变得由软件驱动。对于IT部门而言,这意味着对软件的需求不断增长,以满足不断变化的需求。用户对可用性有很高的期望,并要求业务运营具有更大的灵活性。频繁的更新和升级是「新常态」——这意味着产品的2.0版可能会与第一个版本几乎同时构建。但是招开发人员也不是一件容易的事情。更快的开发软件,更高的自动化程度,这是企业的目.原创 2020-07-10 14:12:14 · 699 阅读 · 0 评论 -
谷歌、微软、亚马逊、阿里、字节深度学习面试问答整理(基础篇)
初学者深度学习面试题通常会问这些问题,以使应聘者熟悉面试官和面试环境。尽管问题本身可能很难回答,但此级别是你最好的机会,可以说服面试官您关于深度学习的基本概念很清楚。你对这些问题的答案不必太详尽,但请记住,面试官可能会在稍后提出更高级的问题时回想起你的答案。相当于暗示面试官,你的技术大概会在什么程度。1.感知器和逻辑回归之间有什么区别?多层感知器(MLP)是我们用于分类的最基本的神经网络之一。对于二元分类问题,我们知道输出可以是0或1。这就像我们的简单逻辑回归一样,其中我们使用logit函数原创 2020-07-10 14:12:07 · 531 阅读 · 0 评论 -
Tomcat爆出安全漏洞!Spring Cloud/Boot框架多个版本受影响
01事件背景6月25日, Apache 官方安全团队通过邮件公开报告了一个高危漏洞,邮件中介绍了 HTTP/2 拒绝服务漏洞的细节及解决方案。如下图所示:漏洞详情链接:http://mail-archives.apache.org/mod_mbox/www-announce/202006.mbox/%3Cfd56bc1d-1219-605b-99c7-946bf7bd8ad4@apache.org%3E翻译漏洞名称:Apache Tomcat HTTP/2 拒绝服务漏..原创 2020-07-10 14:12:00 · 946 阅读 · 0 评论 -
PHP是最好的语言?Go:论性能,在座各位都是渣渣
月初看到斗鱼开源了基于 Go 语言的微服务框架 Jupiter,我就开始关注微服务架构的逐渐 “Go 化”,这已经是互联网应用开发模式的不知道多少次变革了。从低效的单体应用开发时代,到一切皆云上的云原生时代,如同一股巨浪滚滚而来。微服务架构作为云原生落地实践的代表,凭借“分而治之”的手段,把臃肿的单体应用拆分为可以各自为战的微服务,成为各家大厂的首选。 而 Go 这个高性能的编译型编程语言,其简明的语法、丰富的内置类型和极高的并发性能,让开发者发现这是落地微服务架构实践的绝佳利器。01.原创 2020-07-02 20:07:11 · 586 阅读 · 0 评论 -
还有人说GraphQL不行?现在轻松秒杀RESTful,屌不屌
REST作为一种现代网络应用非常流行的软件架构风格,自从Roy Fielding博士在2000年他的博士论文中提出来到现在已经有了20年的历史。它的简单易用性,可扩展性,伸缩性受到广大Web开发者的喜爱。REST 的 API 配合JSON格式的数据交换,使得前后端分离、数据交互变得非常容易,而且也已经成为了目前Web领域最受欢迎的软件架构设计模式。但随着REST API的流行和发展,它的缺点也暴露了出来:滥用REST接口,导致大量相似度很高(具有重复性)的API越来越冗余。 对于前端.原创 2020-07-01 22:14:54 · 856 阅读 · 0 评论 -
RocketMQ高阶业务问题及解决方案
RocketMq全链路消息零丢失方案发送消息到mq零丢失: 事务消息 Broker 存储消息零丢失:同步刷盘+主从机制 Consumer 消费消息零丢失:手动提交offset + 自动故障转移Broker消息零丢失方案:同步刷盘 + Raft协议主从同步Broker 是负责存储消息的,怎么保证消息发送到Broker后,一定不会丢失呢?刷盘失败首先RocketMq一般情况下,为了保证高吞吐量,使用的是异步刷盘策略。但是这种策略会出现消息写入os cache成功,但是异步写入磁盘的时候失败原创 2020-06-28 20:41:23 · 722 阅读 · 0 评论 -
JVM系列之垃圾回收器——G1的运行原理以及调优思路
1. G1 垃圾回收器Garbage First 简称 G1,是继 CMS 垃圾回收器之后,又一款并发的垃圾回收器,在 JDK7 中被去掉 Experimental 标识,开始可以被正式使用,在 JDK9 中被 JVM 设置为默认的垃圾回收器。G1 是垃圾收集器发展史上的一个新的里程碑,它采用分区算法,基于 Region 的内存布局方式,对整个堆内存进行局部回收,既能回收新生代,也能回收老年代。G1 垃圾回收器的目标是在期望的停顿时间内,尽可能地提高系统的吞吐量。2. G1 的特点与上篇文章(J原创 2020-06-28 20:41:12 · 2185 阅读 · 0 评论 -
小白进阶篇之为什么你的JVMSurvivor区仅仅20M
背景某一天,有一位同学在群里发来一张 jmap -heap 内存使用情况图。说 Survivor 区占比总是在 98% 以上。仔细观察这张图,其中包含几个重要信息:From 和 To 区都比较小,只有 10M。容量比较小,才显得占比高。 Old 区的占比和使用量(两个多 G)都比较高。此外,还可以看到 Eden、From、To 之间的比例不是默认的 8:1:1。于是,立马就想到 AdaptiveSizePolicy。经群友的确认,使用的是 JDK 1.8 的...原创 2020-06-27 19:26:31 · 1161 阅读 · 0 评论 -
聊聊nacos-sdk-go的NamingProxy
序本文主要研究一下nacos-sdk-go的NamingProxyNamingProxynacos-sdk-go-v0.3.2/clients/naming_client/naming_proxy.gotype NamingProxy struct { clientConfig constant.ClientConfig nacosServer nacos_server.NacosServer}复制代码NamingProxy定义了clientConfig、nacosServe原创 2020-06-27 19:26:23 · 583 阅读 · 0 评论 -
Spring 通过BeanInstance获取对象
Spring Bean 的实例化_02你的赞是我最大的动力,期待与你共同进步 在上篇文章中提到 Object sharedInstance = getSingleton(beanName); 这一行代码,在容器初始化的时候返回的对象为null。 但是,今天这篇文章中,我要先来处理 sharedInstance 不为null的情况,看看Spring做了什么样的处理。对应下述流程图中的方法: getObjectForBeanInstanceprotected Object getObje原创 2020-06-26 21:32:06 · 538 阅读 · 0 评论 -
Java本地缓存技术选型(Guava Cache、Caffeine、Encache)
言对一个java后台开发者而言,提到缓存,第一反应就是redis和memcache。利用这类缓存足以解决大多数的性能问题了,并且java针对这两者也都有非常成熟的api可供使用。但是我们也要知道,这两种都属于remote cache(分布式缓存),应用的进程和缓存的进程通常分布在不同的服务器上,不同进程之间通过RPC或HTTP的方式通信。这种缓存的优点是缓存和应用服务解耦,支持大数据量的存储,缺点是数据要经过网络传输,性能上会有一定损耗。与分布式缓存对应的是本地缓存,缓存的进程和应用进程是同一个,数原创 2020-06-26 21:31:57 · 1706 阅读 · 0 评论 -
活到老学到老,原来Spring使用到的是这些设计模式
设计模式单例模式懒汉式有线程安全和不安全的写法public class SingletonL { private static SingletonL instance=null; private SingletonL(){} public static SingletonL getInstance(){ if(instance == null){ instance=new SingletonL(); }原创 2020-06-22 19:22:34 · 405 阅读 · 0 评论 -
你真的理解MySQL锁么,来看看大牛是怎么分析的
MySQL锁1、基本概念锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中的数据也是一种供多个用户使用的共享资源,当多个用户并发地存取数据时,在数据库加锁的目的可以保证数据库数据的一致性。 锁的类型 在数据库中,对数据的操作其实只有两种,即读和写,所以可用共享锁和互斥锁实现,即共享锁间之间是兼容的,而互斥锁间不兼容。 共享锁(读锁):允许事务读 互斥锁(写锁):允许事务删除或者更新一行数据 共享锁代表了读操作、互斥锁代表了写操作,所以我们可以在数据原创 2020-06-22 19:22:03 · 488 阅读 · 0 评论