自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 25000 字详解 23 种设计模式(多图 + 代码)

最近大街上流行起来了“快乐柠檬”,我们把快乐柠檬的饮料分为三类:红茶、绿茶、咖啡,在这三大类的基础上,又增加了许多的口味,什么金桔柠檬红茶、金桔柠檬珍珠绿茶、芒果红茶、芒果绿茶、芒果珍珠红茶、烤珍珠红茶、烤珍珠芒果绿茶、椰香胚芽咖啡、焦糖可可咖啡等等,每家店都有很长的菜单,但是仔细看下,其实原料也没几样,但是可以搭配出很多组合,如果顾客需要,很多没出现在菜单中的饮料他们也是可以做的。比较这两种模式,其实是比较对象适配器模式和代理模式,在代码结构上,它们很相似,都需要一个具体的实现类的实例。

2023-05-06 09:47:55 228 1

原创 程序员有哪些靠谱的副业赚钱途径

程序员怎么用工作外时间年入20w

2023-01-30 09:33:59 1667 1

原创 Nginx 的应用场景有哪些?

HTTP服务器Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。1、 首先在文档根目录Docroot(/usr/local/var/www)下创建html目录, 然后在html中放一个test.html;2、 配置nginx.conf中的serveruser mengday staff;http { server { listen 80;

2021-12-17 10:36:12 305

原创 MySQL行锁和表锁的含义及区别是什么?

一、前言对于行锁和表锁的含义区别,在面试中应该是高频出现的,我们应该对MySQL中的锁有一个系统的认识,更详细的需要自行查阅资料,本篇为概括性的总结回答。MySQL常用引擎有MyISAM和InnoDB,而InnoDB是mysql默认的引擎。MyISAM不支持行锁,而InnoDB支持行锁和表锁。如何加锁?MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此用户一般

2021-01-21 14:07:54 1511 1

原创 网关Gateway:限流10万QPS、跨域、过滤器、令牌桶算法

一、微服务网关Spring Cloud Gateway1.1 导引文中内容包含:微服务网关限流10万QPS、跨域、过滤器、令牌桶算法。在构建微服务系统中,必不可少的技术就是网关了,从早期的Zuul,到现在的Spring Cloud Gateway,网关我们用的不可少。今天我就将沉淀下来的所有与网关相关的知识,用一篇文章总结清楚,希望对爱学习的小伙伴们有所帮助。本篇文章主要介绍网关跨域配置,网关过滤器编写,网关的令牌桶算法限流【每秒10万QPS】首先我们来看什么是网关1.2 什么是微服务网关Ga

2021-01-06 14:59:39 1623 1

原创 面试-多线程1

Q:线程和进程的区别?进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位。线程:是进程的一个实体,是 cpu 调度和分派的基本单位,是比进程更小的可以独立运行的基本单位。特点:线程的划分尺度小于进程,这使多线程程序拥有高并发性,进程在运行时各自内存单元相互独立,线程之间内存共享,这使多线程编程可以拥有更好的性能和用户体验注意:多线程编程对于其它程序是不友好的,占据大量 cpu 资源。Q:一个Java应用程序至少有几个线程?两个:

2020-12-04 10:45:24 91

转载 快速搞定分布式事务

今天我想和大家一起盘一盘分布式事务,会介绍常见的分布式事务实现方案和其优缺点以及适用的场景,并会带出它们的一些变体实现。还会捎带一下分布式数据库对 2PC 的改进模型,看看分布式数据库是如何做的。然后再分析一波分布式事务框架 Seata 的具体实现,看看分布式事务究竟是如何落地的,毕竟协议要落地才是有用的。首先我们来提一下事务和分布式事务是什么。事务事务的 ACID 想必大家都熟知,这其实是严格意义上的定义,指的是事务的实现必须具备原子性、一致性、隔离性和持久性。不过严格意义上的事务很难达到,

2020-11-17 14:56:38 131

原创 面试:SpringBoot(2)

Q:如何使用Spring Boot实现异常处理?SpringControllerAdvice提供了一种使用处理异常的非常有用的方法。通过实现一个 ControllerAdvice类,来处理控制器类抛出的所有异常。Q:如何重新加载 Spring Boot上的更改,而无需重新启动服务器?使用DEV工具来实现。通过这种依赖关系,可以节省任何更改,嵌入式 tomcat将重新启动。使用Spring Boot有一个开发工具Dev Tools模块,可以重新加载 Spring Boot上的更改,而无需重新启动

2020-11-13 11:07:35 88

原创 面试:SpringBoot(1)

Q:什么是SpringBoot?用来简化spring应用的初始搭建以及开发过程,使用特定的方式来进行配置(properties或yml文件)创建独立的spring引用程序 main方法运行,嵌入的Tomcat 无需部署war文件,简化maven配置,自动配置spring添加对应功能starter自动化配置。Q:Spring Boot、Spring MVC 和 Spring 有什么区别?1、SpringSpring最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控

2020-11-12 16:45:55 53

原创 Spring Cloud(2)

Q:Eureka怎么实现高可用?集群:注册多台 Eureka,把 SpringCloud服务互相注册,客户端从 Eureka获取信息时,按照 Eureka的顺序来访问。Q:ZuulFilter常用有哪些方法?run():过滤器的具体业务逻辑shouldFilter():判断过滤器是否有效filterOrder():过滤器执行顺序filterType():过滤器拦截位置Q:如何实现动态Zuul网关路由转发?通过path配置拦截请求,通过 Serviceld到配置中心获取转发的服务列表,

2020-11-11 15:21:03 78

原创 Spring Cloud(1)

Q:什么是微服务?微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。另外,应避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调

2020-11-09 14:56:40 75

原创 数据结构与算法(二):交换排序

Q:交换排序两两比较待排序记录的关键字,如果发现两个记录的次序相反时即进行交换,直到没有反序位置。分为冒泡排序和快速排序Q:冒泡排序通过相邻元素之间比较和交换,使较小移向顶部,从后往前两两比较。时间复杂度:O(n^2)空间复杂度:O(1)稳定性:稳定/** * 冒泡排序 * 循环比较相邻的两个数,将较大的数放在后面 * * @param nums 待排序数值序列 */private static int[] bubbleSort(int[] nums) { int

2020-11-09 14:51:41 80

原创 分布式面试题(十):JVM性能调优

Q:深拷贝和浅拷贝浅拷贝(shallowCopy):增加了一个指针指向已存在的内存地址。深拷贝(deepCopy):增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存。浅复制:指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。深复制:在计算机中开辟一块新的内存地址用于存放复制的对象。使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。Q:常量池是什么可以理解为class文件之中的资源仓库,它是class文件结构中与其他

2020-11-06 13:50:13 172

原创 分布式面试题(九):JVM性能调优

Q:什么是JVM?JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得J

2020-11-06 13:45:42 276

原创 分布式面试题(八):Tomcat性能调优

Q:怎样加大 tomcat的内存?首先检查程序有没有限入死循环;这个问题主要还是由java.lang.Out0fMemoryError:Java heap space引起的。第一次出现这样的的问题以后,引发了其他的问题。在网上一查可能是JAVA的堆栈设置太小的原因。根据网上的答案大致有这两种解决方法:1、设置环境变量解决方法:手动设置 Heap size修改 TOMCAT_home/bin/catalina.sh setJAVA_OPTS=-Xms32m-Xmx512m可以根据自己机器的内存

2020-11-06 13:43:09 188

原创 分布式面试题(七):Tomcat性能调优

Q:怎样给 tomcat调优?1.JVM参数调优-Xms示JVM初始化堆的大小,-Xmx表示JVM堆的最大值。这两个值的大小一般根据需要进行设置。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。在 catalina.bat中,设置JAVA_OPTS=’-Xms256m-Xmx512m’,表示初始化内存为256MB,可以使用的最大内存为512MB2.禁用DNS查询当web应用程序向要记录客户端的信息时,它也会

2020-11-06 13:41:01 196

原创 分布式面试题(六):WebSocket

Q:什么是websocket?websocket是HTML5的一种新协议,允许服务器向客户端传递信息,实现浏览器和客户端双工通信。Q:全双工通讯协议的概念全双工是通讯传输的一个术语。通信允许数据在两个方向上同时传输,他在能力上相当于两个单工通信方式的结合。全双工指可以同时进行信号的双向传输。全双工:例如我们使用的手机就是全双工,在同一时刻两个用户可以同时给对方传送数据半双工:例如我们使用的对讲机,当A方按住通话按钮才可以向B方传送数据,B方也是,在同一时刻只有一个用户能够传送数据(A/用户都可

2020-11-05 09:01:50 1058

原创 分布式面试题(五):Nginx(2)

Q:ngx_http_ upstream_module的作用是什么?ngx_http_upstream_module 用于定义可通过fastcgi传递、proxy传递、 uwsgi传递、 memcached传递和scgi传递指令来引用的服务器组。Q:什么是C10K问题?C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。Q:请陈述stub_status和 sub_filter指令的作用是什么?Stub_status指令:用于了解Nginx当前状态,如当前的活动连接,接受和处理

2020-11-05 08:59:02 143

原创 分布式面试题(四):Nginx(1)

Q:什么是 Nginx?Nginx是一个web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。Q:列举Nginx的一些特性Nginx服务器的特性包括:反向代理/L7负载均衡器嵌入式Perl解释器动态二进制升级可用于重新编写URL,具有非常好的PCRE支持Q:Nginx 如何处理HTTP请求?Nginx使用反应器模式。主事件循环等待操作系统发出准备事件的信号,这样数据就可以从套接字读取,在该实例中读取到缓冲区并进行处理。单个线程可以提供数万个并发连接

2020-11-04 17:31:12 278

原创 分布式面试题(三):分布式Memachche

Q:memcached的 cache机制是怎样的?Memcached主要的 cache机制是LRU最近最少用算法+超时失效。当存数据到 memcached中,可以指定该数据在缓存中可以呆多久 ;如果 memcached的内存不够用了,过期的 slabs会优先被替换,接着就轮到老的未被使用的 slabs。Q:memcached如何实现冗余机制?不实现。Memcached应该是应用的缓存层。它的设计本身就不带有任何冗余机制。如果一个 Memcached节点失去了所有数据,应该可以从数据源(比如数据

2020-11-04 13:47:02 72

原创 分布式面试题(二):分布式Redis

Q:Redis集群最大节点个数是多少?16384个Q:Redis集群的主从复制模型是怎样的?为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,所以集群使用了主从复制模型,每个点都会有N-1个复制品Q:Redis和 Redisson有什么关系?Redisson是一个高级的分布式协调redis客服端,能帮助用户在分布式环境中轻松实现一些java的对象(Bloom filter,BitSet,set, SetMultimap, ScoredSortedSet,SortedSet, M

2020-11-03 14:59:38 98

原创 数据结构与算法(二):交换排序

Q:交换排序两两比较待排序记录的关键字,如果发现两个记录的次序相反时即进行交换,直到没有反序位置。分为冒泡排序和快速排序Q:冒泡排序通过相邻元素之间比较和交换,使较小移向顶部,从后往前两两比较。时间复杂度:O(n^2)空间复杂度:O(1)稳定性:稳定冒泡排序.png/** * 冒泡排序 * 循环比较相邻的两个数,将较大的数放在后面 * * @param nums 待排序数值序列 */private static int[] bubbleSort(int[] nums) {

2020-10-30 14:03:54 115

原创 数据结构与算法(一):插入排序

Q:插入排序插入排序的基本思想是:每次将一个待排序的记录按其关键字的大小插入到前面已排好序的文件中的适当位置,直到全部记录插入完为止。插入排序主要包括直接插入排序和希尔排序两种。Q:直接插入排序每次从无序区取出第一个元素把它插入到有序区的适当位置,使之成为新的有序区,经过n-1次插入后完成。时间复杂度:最好是O(n),最坏是O(n^2)空间复杂度:O(1)属于稳定算法。代码示例:/** * 直接插入排序 * * @param arrays 需要排序的序列 */public st

2020-10-29 17:44:09 57

原创 分布式面试题(一):分布式锁

Q:分布式锁1、在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行2、高可用的获取锁与释放锁3、高性能的获取锁与释放锁4、具备可重入特性(可理解为重新进入,由多于一个任务并发使用,而不必担心数据错误)5、具备锁失效机制,防止死锁6、具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败Q:基于zookeeper的分布式锁1.zookeeper的一些特性有序节点:假如当前有一个父节点为/lock,我们可以在这个父节点下面创建子节点;zookeeper提供了一个可选的有序特性

2020-10-29 13:49:57 154

原创 数据库面试题:Redis

Q:redis的数据类型有哪些?String常规的set/get操作,value可以是String也可以是数字。应用:一般做一些复杂的计数功能的缓存。hash这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。应用:单点登录,就是用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session的效果。listList的数据结构应用:可以做简单的消息队列的功能。另外,可以利用lrange命令,做基于redis的分页功能

2020-10-29 13:43:59 88

原创 数据库面试题(二)MySQL(2)

Q:为什么mysql建议使用自增主键?1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引。如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引。如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。2、数据记录本身被存于主索引(一颗B+Tree)的叶子节点上,这就要求同一个叶子节点内(大

2020-10-28 13:54:49 61

原创 数据库面试题(一)MySQL(1)

Q:SQL 的 select 语句完整的执行顺序?1、from 子句组装来自不同数据源的数据;2、where 子句基于指定的条件对记录行进行筛选;3、group by 子句将数据划分为多个分组;4、使用聚集函数进行计算;5、使用 having 子句筛选分组;6、计算所有的表达式;7、select 的字段;8、使用 order by 对结果集进行排序。Q:左连接和右连接的区别?外连接:左连接(左外连接):以左表作为基准进行查询,左表数据会全部显示出来,右表如果和左表匹配的数据则显示相

2020-10-27 09:37:37 137 1

原创 中间件面试题(一):RabbitMQ

Q:什么是RabbitMQ?为什么使用RabbitMQ?有什么好处?RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的,消息中间件;可以用它来:解耦、异步、削峰。优点:解耦、异步、削峰;缺点:降低了系统的稳定性:系统中使用了消息队列,如果消息队列挂了,那么系统也会挂掉。因此,系统可用性会降低;加入了消息队列,要多考虑很多方面的问题,比如:一致性问题、如何保证消息不被重复消费、如何保证消息可靠性传输等。因此,需要考虑的东西更多,复杂性增大。Q:RabbitMQ基本概念有哪些?

2020-10-26 18:53:33 85

原创 redis实现高并发机制的原理及redis运行原理

redis实现高并发机制的原理及redis运行原理图解

2020-10-23 11:03:38 471

原创 vue iview 实现树形下拉框

vue iview 实现树形下拉框加粗样式使用iview-select-tree实现,不知道怎么安装iview-select-tree,可以百度应该可以找到,直接代码看不懂可以问 最重要的是这个 v-if=“loading”,必须设置这个可以定义为trueorgCodeMap: {value: “orgCode”,title: “orgName”,children: “child”,},loading:true,这个orgCodeMap是为了转换机构数使用的/

2020-10-23 10:20:26 1039 5

原创 java8 快速实现List转map 、分组、过滤等操作

java8 快速实现List转map 、分组、过滤等操作利用java8新特性,可以用简洁高效的代码来实现一些数据处理。定义1个Apple对象:public class Apple {private Integer id;private String name;private BigDecimal money;private Integer num;public Apple(Integer id, String name, BigDecimal money, Integer num) {th

2020-10-23 09:48:46 303

空空如也

空空如也

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

TA关注的人

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