![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
日积跬步
积跬步,至千里
向上吧,少年!
这个作者很懒,什么都没留下…
展开
-
一些重要但容易忽视的知识点
1、mavenmaven是一个软件项目管理工具,可以对Java项目进行全自动构建,管理项目所需要的依赖。2、之前项目中使用过哪些框架,评价一下自己掌握的程度?原创 2021-05-29 13:37:15 · 67 阅读 · 0 评论 -
redis中常用命令
redis中常用命令:操作字符串对象:set name zhangsanget nameEXPIRE name 10info:Redis Info命令返回关于Redis服务器的各种信息和统计数值。Flushdb:Redis Flushdb 命令用于清空当前数据库中的所有 key。Shutdown:将数据同步保存到磁盘,然后关闭服务。Save:Redis Save 命令执行一个同步保存操作,将当前Redis实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。原创 2021-05-29 11:17:16 · 193 阅读 · 0 评论 -
Spring中用了哪些设计模式
工厂模式:Spring使用工厂模式可以通过BeanFactory或ApplicationContext创建bean对象。两者对比:BeanFactory:延迟注入(使用到某个bean的时候才会注入),相比于BeanFactory来说会占用更少的内存,程序启动速度更快。ApplicationContext:容器启动的时候,不管你用没用到,一次性创建所有bean。BeanFactory 仅提供了最基本的依赖注入支持,ApplicationContext 扩展了 BeanFactory,除了有BeanFa原创 2021-05-29 10:53:38 · 75 阅读 · 0 评论 -
观察者模式
观察者模式是一种对象行为型模式。它表示的是一种对象与对象之间具有依赖关系,当一个对象发生改变的时候,这个对象所依赖的对象也会做出反应。原创 2021-05-29 10:50:40 · 40 阅读 · 0 评论 -
@Valid注解
转载:https://blog.csdn.net/weixin_38118016/article/details/80977207@Valid用于验证注解是否符合要求,直接加在变量user之前,在变量中添加验证信息的要求,当不符合要求时就会在方法中返回message 的错误提示信息。...转载 2021-05-28 18:06:02 · 101 阅读 · 0 评论 -
linux经常使用的命令
/** * ls:列出目录内存 * cd:切换目录命令 * pwd:显示当前工作目录 * mkdir:创建目录 * cat:显示指定文件的所有内容 * tail:用来显示指定文件末尾内容,常用查看日志文件。 * tail -n显示行数 * cp:复制命令 * mv:为文件或目录改名、或将文件或目录移入其它位置。 * 举例: * 将info目录放入 logs 目录中。注意,如果 logs 目录不存在,则该命令将 info 改名为 logs。 * mv info/ logs * rm.转载 2021-05-28 15:19:06 · 61 阅读 · 0 评论 -
springboot和spring的区别?
springboot开发中简化了很多xml的配置,约定大于配置。springboot内置了容器,不需要配置tomcat,可以直接打包jar运行。原创 2021-05-27 22:11:26 · 79 阅读 · 0 评论 -
商品秒杀实现过程
可以将数据库中所有的sku(库存)缓存到redis中,进行下单的时候,检查redis中是否存在,如果存在并有库存,满足购买条件,则下单,进行支付,当进行支付的时候,首先检查rediszhon原创 2021-05-27 21:58:50 · 167 阅读 · 0 评论 -
SDS
Redis没有使用C语言的传统字符串,而是自己构建了一种简单动态字符串(SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。SDS的优点C语言传统的字符串,并不能满足Redis对字符串在安全性、效率、以及功能方面的要求。1、常数复杂度获取字符串长度因为C字符串并不记录自身的长度信息,所以为了获取一个C字符串的长度,程序必须遍历整个字符串,操作的时间复杂度为O(N)。和C字符串不同,因为SDS在len属性中记录了SDS本身的长度,所以获取一个SDS长度的时间复杂度仅为O(1)。通过使用转载 2021-05-26 14:30:05 · 214 阅读 · 0 评论 -
I/O多路复用
select、poll、epoll都是I/O多路复用的具体实现。epoll性能比其他几者要好。原创 2021-05-25 21:24:37 · 48 阅读 · 0 评论 -
DispatcherServlet相关
Spring的web框架围绕DispatcherServlet设计。 DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解的controller声明方式。Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)。SpringMVC执行原理1.原创 2021-05-25 18:01:27 · 98 阅读 · 0 评论 -
Java中Comparable和Comparator区别
参考:https://www.cnblogs.com/xujian2014/p/5215082.html原创 2021-05-25 17:57:50 · 35 阅读 · 0 评论 -
Eureka
Eureka:负责各个服务的注册与发现,Eureka 包含两个组件:Eureka Server和Eureka Client。1、在每个客户端启动的时候,会自动的将自己的服务名称,ip地址,端口号等信息注册到注册中心。2、服务端是一个注册中心,里面有一个注册表,保存了各服务所在的机器和端口号,供所有的客户端查询。Eureka采用了C-S的架构设计,EurekaServer 作为服务注册功能的服务器,他是服务注册中心而系统中的其他微服务。使用Eureka的客户端连接到EurekaServer并维原创 2021-05-25 17:53:40 · 58 阅读 · 1 评论 -
Ribbon
Ribbon: 本质是一个带有负载均衡功能的http客户端,在每次请求的时候会选择一台机器,均匀的把请求分发到各台机器上。Ribbon是客户端负载均衡的工具,主要功能是提供客户端的软件负载均衡算法。在配置文件中列出LoadBalancer(简称LB:负载均衡)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法!Ribbon的负载均衡默认使用的最经典的Round Robin轮询算法。Ribb原创 2021-05-25 17:40:43 · 83 阅读 · 0 评论 -
Zuul
路由网关Zuul包含了对请求的路由和过滤两个最主要的功能:其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。...原创 2021-05-25 17:36:48 · 56 阅读 · 0 评论 -
Hystrix
Hystrix断路器服务熔断和服务降级服务熔断:分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况,这种现象被称为服务雪崩效应。熔断机制是对应雪崩效应的一种微服务链路保护机制。服务熔断:一般是某个服务故障或者异常引起,类似现实世界中的 “保险丝” , 当某个异常条件被触发,直接熔断整个服务,而不是一直等到此服务超时!服务降级:降级的目的是为了解决整体项目的压力,而牺牲掉某一服务模块而采取的措施。服务降级:整体资源不够用了,将某些服务先关掉。服务雪崩:当A调用微服务原创 2021-05-25 17:29:24 · 32 阅读 · 0 评论 -
Feign
来自:https://blog.csdn.net/JZJASXL/article/details/94732768在Spring Cloud中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnection、Apache的Http Client、Netty的异步HTTP Client、Spring的RestTemplate。但是,用起来最方便的还是要属Feign了。Feign是一种HTTP客户端。在Sprin原创 2021-05-25 16:57:57 · 67 阅读 · 0 评论 -
线程池拒绝策略
来自:https://www.cnblogs.com/zz-ksw/p/12831249.html(写得很好)在创建线程池时我们可以指定自己的拒绝策略,如下new ThreadPoolExecutor(5,10,5, TimeUnit.SECONDS, new LinkedBlockingDeque<>(),new ThreadPoolExecutor.AbortPolicy());new ThreadPoolExecutor(5,10,5, TimeU...转载 2021-05-25 11:29:31 · 90 阅读 · 0 评论 -
强软弱虚引用
来自:https://www.jianshu.com/p/825cca41d962强引用强引用是使用最普遍的引用,如果一个对象具有强引用,那垃圾收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用对象来解决内存不足的问题。软引用软引用是用来描述一些还有用但并非必须的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围进行第二次回收。如果这次回收还没有足够.原创 2021-05-25 10:53:20 · 42 阅读 · 0 评论 -
看消息队列视频笔记
1、为什么要用消息队列?常见应用场景:解耦、异步、削峰2、各种消息队列产品的比较?ActiveMQ 开发语言:JavaRabbitMQ 开发语言:erlangRocketMQ 开发语言:Javakafka 开发语言:scala吞吐量是指单位时间内成功地传送数据的数量(以比特、字节、分组等测量)。ActiveMQ和RabbitMQ的单机吞吐量是万级。RocketMQ和kafka的单机吞吐量是10万级。ActiveMQ和RabbitMQ的可用性高(主从架构)。RocketMQ和.原创 2021-05-23 20:22:54 · 129 阅读 · 13 评论 -
redis如何实现高可用【主从复制、哨兵机制】
https://blog.csdn.net/itcats_cn/article/details/82428716原创 2021-05-14 15:25:15 · 54 阅读 · 0 评论 -
explain的type字段
all:全表扫描index:查询索引索引range:查询部分索引ref:联表查询,按联表的索引查询,但是不是主键或唯一索引eq_ref:用于联表查询的情况,按联表的主键或唯一键联合查询。const/system:const是直接按主键或唯一键读取null:MySQL不访问任何表或索引,直接返回结果...原创 2021-05-14 15:22:42 · 69 阅读 · 0 评论 -
9.2 springmvc的启动过程
见https://blog.csdn.net/m0_38045306/article/details/113618999原创 2021-05-13 22:38:11 · 73 阅读 · 0 评论 -
BeanFactory和FactoryBean的区别
BeanFactory是IOC最基本的容器,负责生产和管理bean,它为其他具体的IOC容器提供了最基本的规范,例如DefaultListableBeanFactory,XmlBeanFactory,ApplicationContext 等具体的容器都是实现了BeanFactory,再在其基础之上附加了其他的功能。 BeanFactory和FactoryBean其实没有什么比较性的,只是两者的名称特别接近,所以有时候会拿出来比较一番,BeanFactory是提供了IOC容器最基本的形式,...转载 2021-05-13 17:54:59 · 56 阅读 · 0 评论 -
8.3 SpringBoot自动配置模块
@SpringBootApplication等同于下面三个注解:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan其中@EnableAutoConfiguration是关键(启用自动配置),内部实际上就去加载META-INF/spring.factories文件的信息,然后筛选出以EnableAutoConfiguration为key的数据,加载到IOC容器中,实现自动配置功能!下面来自:https://blog.c转载 2021-05-13 15:49:13 · 117 阅读 · 0 评论 -
7.8 AOP中的各种名词概念;
下面来自:https://blog.csdn.net/anneng19980624/article/details/1013601741、Advice(通知/增强)增强的代码2、Pointcut(切入点)目标对象中要增强的的方法3、Joinpoint(连接点)目标对象中所有可以增强的方法叫做连接点4、Target(目标对象)被代理对象5、Weaving(织入)将通知应用到连接点的过程6、Proxy(代理)生成的代理对象7、Aspect(切面)切入点+通知就形成了切面下面来自转载 2021-05-12 22:42:25 · 105 阅读 · 0 评论 -
7.7 Spring AOP底层实现,以及两种动态代理的实现(建议自己手动实现两种代理方式);
转载:https://www.cnblogs.com/hublogs/p/12035415.htmlAOP (Aspect Oriented Programing) 称为:面向切面编程,它是一种编程思想。AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码的编写方式(例如性能监视、事务管理、安全检查、缓存、日志记录等)切面:需要代理一些方法和增强代码AOP的应用场景场景一:记录日志场景二:监控方法运行时间 (监控性能)场景三: 权限控制场景四: 缓存优化 (第一次调用查询转载 2021-05-12 22:28:47 · 549 阅读 · 0 评论 -
缓存穿透、缓存击穿和缓存雪崩
缓存穿透是指缓存服务器中没有缓存数据,数据库中也没有符合条件的数据,导致业务系统每次绕过缓存服务器去查询下游的数据库,缓存服务器完全失去了其应用的作用。缓存穿透问题解决办法:1、缓存空值 2、布隆过滤器1、缓存空值在缓存中,之所以会发生穿透,就是因为缓存没有对那些不存在的值得Key缓存下来,从而导致每次查询都要请求到数据库。那么我们就可以为这些key对应的值设置为null并放到缓存中,这样再出现查询这个key 的请求的时候,直接返回null即可 。2、布隆过滤器在缓存穿透防治原创 2021-05-11 22:25:29 · 44 阅读 · 0 评论 -
14.6 分布式锁(Redis和zookeeper实现),和分布式事务。
驾驭命运的舵是奋斗。不抱有一丝幻想,不放弃一点机会,不停止一日努力。我们这个世界,从不会给一个伤心的落伍者颁发奖牌。下面来自:https://blog.csdn.net/wuzhiwei549/article/details/80692278三种实现分布式锁的方式:1、为什么使用分布式锁在单机应用中,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,也就是所有的请求都会分配到当前服转载 2021-05-05 21:59:15 · 189 阅读 · 0 评论 -
14.4 BIO和NIO;
https://www.cnblogs.com/zedosu/p/6666984.htmlBIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO(NIO.2):异步非阻塞式IO,服务器实现模式.转载 2021-05-05 21:29:09 · 73 阅读 · 0 评论 -
14.3 微服务和分布式是什么;
参考博客:https://blog.csdn.net/qq_37788067/article/details/79250623集群是个物理形态,分布式是个工作方式。分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上1:分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几转载 2021-05-05 19:44:16 · 63 阅读 · 0 评论 -
14.1 如何定时得往数据库中插入500万条数据以及删除,保证数据插入正确做到最优解;
这个问题网上回答不多,应该不会被问到,如果被问到参考:https://blog.csdn.net/Hero_shine/article/details/99687706可以使用【批处理】解决,减少连接数据库的次数,同时将单条插入语句改为一次插入多条数据以提高效率。List<User> list = findAllUser();Statement stat = conn.createStatement();for (User u : list) { String sql = "原创 2021-05-05 19:24:46 · 277 阅读 · 0 评论 -
mq(武哥漫谈IT)
参考:https://mp.weixin.qq.com/s/KWoOW1TeJoMhGOSM7AlRegMQ的应用场景非常多,大家能倒背如流的是:系统解耦、异步通信和流量削峰,除此之外,还有延迟通知、最终一致性保证、顺序消息、流式处理等等。消息队列的模型。它其实解决的是:生产者和消费者的通信问题。那它对比 RPC 有什么联系和区别呢?通过对比,能很明显地看出两点差异:1、引入 MQ 后,由之前的一次 RPC 变成了现在的两次 RPC,而且生产者只跟队列耦合,它根本无需知道消费者的存在。2、转载 2021-05-05 16:54:29 · 230 阅读 · 0 评论 -
五种IO模型
来自:https://blog.csdn.net/qq_34638435/article/details/81878301在《Unix网络编程》一书中提到了五种IO模型,分别是:阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO。1、阻塞IO模型 最传统的一种IO模型,即在读写数据过程中会发生阻塞现象。 当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出CPU。当数据就绪之后,内核会将数据拷贝到用户线程,并返转载 2021-05-05 15:17:47 · 44 阅读 · 0 评论 -
Redis11问
本文主要来自微信公众号阿里云云栖号1、Redis的数据结构与对象Redis用到的所有主要数据结构1、简单动态字符串(SDS)2、链表 linkedlist双端链表3、字典hashtable用于保存键值对的抽象数据结构。4、跳跃表skiplist跳跃表是有序集合的底层实现之一。5、整数集合intset用于保存整数值的集合抽象数据结构,不会出现重复元素,底层实现为数组。6、压缩列表ziplist压缩列表是为节约内存而开发的顺序性数据结构,他可以包含多...转载 2021-05-05 10:24:44 · 85 阅读 · 0 评论 -
springboot自动配置原理
@SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.c转载 2021-04-25 17:29:57 · 94 阅读 · 0 评论 -
树的子结构、二叉树镜像
树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)考察递归和树答案参考:https://www.cnblogs.com/lishanlei/p/10707732.html先上代码public class DailyTest { public static void main(String[] args) { System.out.println(666); } public boolea原创 2021-04-21 22:01:37 · 40 阅读 · 0 评论 -
10.6 Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别;
对比ZookeeperCAP原则又称CAP定理,指的是在一个分布式系统中一致性(Consistency) 可用性(Availability) 分区容错性(Partition tolerance)CAP原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。CAP理论的核心一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求Zookeeper保证的是CP;Eureka保证的是AP;CAP理论指的是一个分布式系统最多只能同时满足一致性(Consistency)...原创 2021-04-19 22:35:24 · 95 阅读 · 0 评论 -
10.5 什么是Eureka的自我保护模式
见10.4原创 2021-04-19 22:32:31 · 96 阅读 · 0 评论 -
10.4 Eureka怎么实现高可用
Eureka服务注册与发现Eureka遵循的是AP原则CAP原则又称CAP定理,指的是在一个分布式系统中一致性(Consistency) 可用性(Availability) 分区容错性(Partition tolerance)CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。Eureka采用了C-S的架构设计,EurekaServer作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务。使用Eureka的客户端连接到EurekaServer并维持心跳连接。这..原创 2021-04-19 22:32:05 · 877 阅读 · 1 评论