- 博客(44)
- 收藏
- 关注
原创 SpringCloudGateway源码阅读(一)核心概念及路由加载
public class RouteDefinition {// 唯一idprivate String id;// 断言定义private List predicates = new ArrayList<>();// 过滤器定义private List filters = new ArrayList<>();// 跳转uriprivate URI uri;// 元数据private Map<String, Object> metadata = new
2022-05-05 18:42:05 891
原创 SpringCloud-05-Zuul网关
[](()1.什么是ZuulZull包含了对请求的路由(用来跳转的)和过滤两个最主要功能:路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。注意:Zuul尽管起着过滤器和路由的功能,但是它仍然是一个客户端的服
2022-05-05 18:40:00 235
原创 springboot集成rabbitmq商品秒杀业务实战(流量削峰)
org.springframework.amqpspring-rabbit2,配置application.yml配置文件spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTCuserna.
2022-05-05 18:38:24 437
原创 springboot进行controller单元测试
@TypeExcludeFilters(WebMvcTypeExcludeFilter.class)@AutoConfigureCache@AutoConfigureWebMvc@AutoConfigureMockMvc@ImportAutoConfigurationpublic @interface WebMvcTest {/**Properties in form {@literal key=value} that should be added to the Spring{@l
2022-05-05 18:36:35 812
原创 SpringBoot快速整合Mybatis&MybatisPlus
mysqlmysql-connector-java5.1.45com.baomidoumybatis-plus-boot-starter3.4.0 [](()2.2 在application.yml进行配置数据源[](()2.2.1 新建applicaiton.yml`环境隔离spring:profiles:active: dev《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】server:comp
2022-05-05 18:34:17 689
原创 springboot全局异常捕获,java下载教程
public String test(){for(String s: list){if(s.equals(“小红”)){log.info(“听说点赞的都发财了!!!”);}else{log.info(“没点赞的好像也发财了!!!”);}}return “success”;}这是一个典型的空指针异常,真正写代码的时候是不会这么干的,这里为了展示效果才这样写的,我们请求/test接口,看看会发生什么?我靠?这是什么玩意?这要是让用户/甲方爸爸看到,那还不得被骂死?那如何解决这个问题呢?
2022-05-05 18:32:46 466
原创 SpringBoot全局异常处理+Slf4j日志文件配置
====================================================================1)相关依赖org.springframework.bootspring-boot-starter-weborg.projectlomboklomboktrue2)Json数据包装类@Data@AllArgsConstructor@NoArgsConstructorpublic class JsonResult {private Intege
2022-05-05 18:30:46 432
原创 【计算机网络】第六章--应用层
DNS的层次结构:根域名服务器:根域名服务器是最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的IP地址。根域名服务器也是最重要的域名服务器,不管是哪个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器。因特网上有13个根域名服务器,尽管我们将这13个根域名服务器中的每个都视为单个服务器,但每个“服务器”实际上是冗余服务器的集群,以提供安全性和可靠性。需要注意的是,根域名服务器用来管辖顶级域(如.com),通常它并不直接把待查询的域名直
2022-05-04 15:11:21 2163 1
原创 【源码分析设计模式 10】SpringMVC中的建造者模式
public class HighBuilding extends HouseBuilder {@Overridepublic void buildBasic() {System.out.println(" 高楼的打地基100米 ");}@Overridepublic void buildWalls() {System.out.println(" 高楼的砌墙20cm ");}@Overridepublic void roofed() {System.out.println(" 高楼的透
2022-05-04 15:09:47 203
原创 【死磕Java并发】
i = j + 1; —4上面四个操作,有哪个几个是原子操作,那几个不是?如果不是很理解,可能会认为都是原子性操作,其实只有1才是原子操作,其余均不是。1—在Java中,对基本数据类型的变量和赋值操作都是原子性操作;2—包含了两个操作:读取i,将i值赋值给j《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】3—包含了三个操作:读取i值、i + 1 、将+1结果赋值给i;4—同三一样在单线程环境
2022-05-04 15:07:40 114
原创 【备战秋招】30道Spring IOC经典面试题
后面的 7、8 、9 属于初始化阶段,在 Java Bean 对象生成后,可能需要对这个对象进行相关初始化工作才予以使用;最后面的 10、11 属于销毁阶段,当 Spring 应用上下文关闭或者主动销毁某个 Bean 时,可能需要对这个对象进行相关销毁工作,最后等待 JVM 进行回收。[](()11. BeanDefinition 是什么?BeanDefinition 是 Spring Bean 的“前身”,其内部包含了初始化一个 Bean..
2022-05-04 15:05:13 290
原创 【Spring教程】框架搭建和基本配置
commons-logging-1.1.1.jarlog4j-1.2.17.jarslf4j-log4j12-1.7.12.jar[](()三、JavaBeanpublic class Student {private int id;private String name;private int age;public Student(){}public Student(int id, String name, int age) {this.id = id;this.n..
2022-05-04 15:02:45 880
原创 【Spring Cloud 3】限流
(6)执行 HystrixObservableCommand.construct()或HystrixCommand.run(), 如果执行失败或者超时,跳到第8步;否者,跳到第9步;(7)统计熔断器监控指标;(8)走Fallback降级方法;(9)返回请求响应。从流程图上可知道,第5步线程池、队列、信号量已满时,还会执行第7步逻辑,更新熔断器统计信息,而第6步无论成功与否,都会更新熔断器统计信息。2、执行命令的几种方法Hystrix提供了4种执行命令的方法,execute(
2022-05-04 15:00:58 292
原创 【Redis】一
因为C字符串不自己记录自身的长度信息,所以为了获取长度,那么必须每次都要遍历整个字符串才能获取,时间复杂度是O(N).而SDS自身有个属性len保存了自身的长度,所以只需要获取这个属性就行了,时间复杂度是 O(1).而且设置和更新SDS的长度是用SDS的API在执行时自动完成。所以确保了 获取长度STRLEN命令不会成为我们的瓶颈。[](()2. 杜绝缓冲区溢出C字符串不记录len 除了获取长度的复杂度高之外,还会容易造成缓冲区溢出。比如C字符串拼接 char *strcat(char *des
2022-05-04 14:57:02 70
原创 【Redis】Redis的复制
在客户端指定主服务器,redis> SLAVEOF masteripmasterport,SLAVEOF命令会停止与原有主服务器的同步,转而向新主服务器进行同步[](()复制到 运行原理当从Redis服务器启动时会向主Redis服务器发送SYNC命令,主Redis服务器接收到SYNC命令后开始进行RDB持久化,并将这期间接收到的写入操作命令都缓存起来,等RDB持久化完成后,将快照和缓存起来的命令一并发送给从 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》.
2022-05-04 14:54:33 168
原创 【Log日志】打印mybatis中sql日志并存放到指定文件中
trueERRORACCEPTDENY${pattern}${log.path}/exception.log.%d{yyyy-MM-dd}7${log.path}/mysql_log.log${log.path}/mysql_log.log.%d{yyyy-MM-dd}7${pattern}DEBUG<logger name=“com.xxx.mapper” level=“DEBUG” a 《一线大厂Java面试题解析+后端开发学习笔记+最
2022-05-04 14:53:01 2204
原创 【Linux】磁盘分区和挂载
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 20G 0 disk├─sda1 8:1 0 1023M 0 part /boot├─sda2 8:2 0 17G 0 part /└─sda3 8:3 0 2G 0 part [SWAP]sr0 11:0 1 729.9M 0 rom /run/media/root/20210907_143734
2022-05-04 14:49:50 1809
原创 登录系统中token和session的比较
5}[](()cookie原理第一次访问网站的时候,浏览器发出请求,服务器响应请求后,会将cookie放入到响应请求中,在浏览器第二次发请求的时候,会把cookie带过去,服务端会辨别用户身份,当然服务器也可以修改cookie内容[](()cookie存在哪cookie一般是被浏览器以txt的形式存储在电脑硬盘中,供该浏览器进行读、写操作。[](()cookie的属性[](()cookie的共享策略[](()cookie不能跨域[跨域概念](()[](()3.session[
2022-04-29 19:19:25 2089
原创 漫谈分布式序列化
[](()Java序列化简单认识Java 平台允许我们在内存中创建可复用的Java 对象,但一般情况下,只有当JVM 处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM 的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java 对象序列化就能够帮助我们实现该功能简单来说:序列化是把对象的状态信息转化为可存储或传输的形式过程,也就是把对象转化为字节序列的过程称为对象的序列化- 反
2022-04-29 19:17:08 357
原创 淘宝视频的跨模态检索
针对上述技术挑战,本文的算法模型设计结合图神经网络GraphSAGE[15]的双塔检索框架,该框架的优点:通过图网络构建缓解训练样本稀疏和均衡问题。样本1和样本2有点击Pairs标签,样本3和样本2内容表达一致但没有点击Pairs标签,在图网络中拉近样本1和样本3的特征距离来间接拉近样本2和样本3的特征距离。图网络中同模态和跨模态端到端的度量学习进一步保证不同模态的语义一致性和同模态语义的判别性。可以实现高效的大规模检索。该模型主要包括文本编码模型、视频多模态编码模型、图网络算法模
2022-04-29 19:14:45 427
原创 消息中间件有哪些
语义。语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息以及完成的动作与做出什么样的响应。时序。时序是对时间发生顺序的详细说明。五、为什么消息中间件不直接使用http协议呢?因为http请求报文头和响应报文头是比较复杂的,包含了cookie,数据的加密解密,状态码,响应码等附加的功能,但是对于一个消息而言,我们并不需要这么复杂,也没有这个必要性,它其实就是负责数据传递,存储,分发就行,一定要追求高性能,尽量简洁,快速。大部分情况下http都是短连接,在实际的交互过程..
2022-04-29 19:10:14 357
原创 毕业生迷茫,中年人焦虑,职场路如何越走越宽
毕业生迷茫,中年人焦虑,职场路如何越走越宽?美国知名营销顾问西蒙·斯 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 涅克因总结的“黄金圈”理论——What, How, Why,可以很好的指导我们走出 “今天又是迷茫的一天”,毕业生迷茫,中年人焦虑,职场路如何越走越宽?What是什么?|即你的兴趣是什么?你对什么有热情?|找到自己感兴趣的事情,深度认识自我。自己想做什么、想在哪个行业发展、想创业、想工作、还是想继续深造、想
2022-04-29 19:08:21 251
原创 每一个程序员,都渴望成为一名分布式系统架构师
而分布式呢,是把事情拆开,多个服务器分头做事,可以缩短时间。知道了什么是分布式系统之后,一个最简单的分布式系统应该是什么样的?假设我们做了一套系统,这套系统仅有两个功能:1. 注册、2. 登录如果我们想让这套系统变成分布式系统该怎么做?最简单的是,把注册功能和登录功能分别做成两套子服务,然后部署到两台服务器上,让他们互相协作,这就变成了一套最简单的分布式系统。你看到这里可能会非常震惊:这就是一套分布式系统了?我想学习的分布 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+.
2022-04-29 19:06:25 215
原创 架构设计:负载均衡层设计方案(2
./configure –prefix=/usr/nginx-1.8.0make && make install整个验证、编译、安装过程不应该报任何错误。如果您使用prefix设置了安装目标目录,那么可能您还需要在/etc/profix文件中设置环境变量:2.3、安装验证和启动下面介绍几个nginx常用的命令,如果您可以正常使用这些命令,那么说明nginx已经安装成功了。nginx:直接在命令行键入nginx,就可以启动nginx。nginx -t:检查配置文件是否正确
2022-04-29 19:04:36 184
原创 服务注册与发现的原理和实现
直连基于 etcd 的服务发现基于 kubernetes endpoints 的服务发现直连直连是最简单的方式,当我们的服务足够简单时,比如单机即可承载我们的业务,我们可以直接只用这种方式。在 rpc 的配置文件里直接指定 endpoints 即可,比如:Rpc:Endpoints:192.168.0.111:3456192.168.0.112:3456zrpc 调用端就会分配负载到这两个节点上,其中一个节点..
2022-04-29 19:00:28 195
原创 技术+面试题=大厂offer?肝了两天面试整理
Hashmap 什么时候进行扩容呢?List、Map、Set 三个接口,存取元素时,各有什么特点?Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用 = = 还是 equals()? 它们有何区别?两个对象值相同 (x.equals(y) = = true),但却可有不同的 hash code,这句话对不对?heap 和 stack 有什么区别。Java 集合类框架的基本接口有哪些?HashSet 和 TreeSet 有什么区别?HashSet..
2022-04-28 17:05:14 73
原创 手撕ArrayList底层,透彻分析源码
(2) 判断minCapacity要是大于elementData.length就执行扩容,否则,直接退出此方法,进行添加元素的操作。接着我们来看看grow方法的源码:private void grow(int minCapacity) {int oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1);if (newCapacity - minCapacity < 0)
2022-04-28 17:01:17 183
原创 我终于学会了黑客帝国里的矩阵雨
this.numCols = 0;this.numRows = 0;// handle reading from fileif (opts.filePath) {if (!fs.existsSync(opts.filePath)) {throw new Error(${opts.filePath} doesn't exist);}this.fileChars = fs.readFileSync(opts.filePath, utf-8).trim().split(``);this.fileP
2022-04-28 16:59:27 164
原创 我的美团offer凉凉了?开发工程师(Java岗
算法:实现一致性hash如何保证数据库并发时没有问题?如先查询,后更改,或者同一时间用户查询用户分期单记逾期,同时用户执行还款,到底用户逾期成功吗,换的钱是多少?redis的数据量,如何做的备份恢复?你们的股票行情数据怎么做正确性校验,加入db以及redis都出错了呢?mysql数据库的分库分表,有什么中间件?,主键策略是什么大规模的数据量的分库分表,动态数据源怎么做查询(一个业务需要查询多个数据源的信息,怎么做到找到对应的数据源)?epoll函数怎么理解?epoll函数在别的哪些地方有用到?.
2022-04-28 16:57:37 135
原创 悲观锁与乐观锁的实现(详情图解)
在了解悲观锁和乐观锁之前,我们先了解一下什么是锁,为什么要用到锁?技术来源于生活,锁不仅在程序中存在,在现实中我们也随处可见,例如我们上下班打卡的指纹锁,保险柜上的密码锁,以及我们我们登录的用户名和密码也是一种锁,生活中用到锁可以保护我们人身安全(指纹锁)、财产安全(保险柜密码锁)、信息安全(用户名密码锁),让我们更放心的去使用和生活,因为有锁,我们不用去担心个人的财产和信息泄露。而程序中的锁,则是用来保证我们数据安全的机制和手段,例如当我们有多个线程去访问修改共享变量的时候,我们可以给修...
2022-04-28 16:51:10 326
原创 怎么使用rke安装k8s集群?这么清楚了,你还看不懂吗
4.创建用户-所有节点创建用户useradd rkeuser给用户设置密码passwd rkeuser5.将用户添加到docker组usermod -aG docker rkeuser6.配置免密登录-master节点生成公钥-私钥对ssh-keygen -t rsa -C ‘dev@mldong.com’将master节点的公钥复制到所有节点(包括自身)-使得新建的rkeuser用户ssh-copy-id rkeuser@192.168.0.245ssh-copy-id rkeu
2022-04-28 16:48:59 588
原创 必知必会JVM三-面试必备,JVM堆内存详解
元空间JDK1.8之后,取消perm永久代,转而用元空间代替元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。并且可以动态扩容。那么使用元空间会有哪些问题呢?同学们可以思考下。1.2 为什么分代?因为不同对象的生命周期是不一样的。80%-98%的对象都是“朝生夕死”,生命周期很短,大部分新对象都在年轻代,可以很高效地进行回收,不用遍历所有对象。而老年代对象生命周期一般很长,每次可能只回收一小部分内存,回收效率很低
2022-04-28 16:46:58 96
原创 微信支付的实现
public void report(String domain, long elapsedTimeMillis, Exception ex) {}public DomainInfo getDomain(WXPayConfig config) {return new DomainInfo(“api.mch.weixin.qq.com”,true);}}}添加依赖org.springframework.bootspring-boot-starter-weborg.slf4jslf4
2022-04-28 16:44:44 499
原创 微服务架构实战:商城的用户登录与账户切换设计、订单查询设计
在移动商城的设计中,除商品和分类查询是完全开放权限的页面外,其他涉及个人隐私的个人信息、订单查询和购物车等都必须进行权限管理。有关用户权限管理的功能,在这里根据移动设备的特点,使用了本地存储的方式,提供了用户登录设计和账号切换设计。注意,为了节省篇幅,这里的用户信息只是一个演示数据,并没有跟实际用户服务进行绑定。用户登 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 录设计在用户登录设计中,为了保证用户身份的真实性,可以由用
2022-04-23 23:44:29 298
原创 微服务架构实战:Nginx的安装及负载均衡配置、开机启动
#日志目录base path=/tmp#跟踪服务器tracker server=10.10.10.22:22122tracker server=10.10.10.32:22122#URL中是否有group名称url have group name = true#storage path的个数store_path_count=2store_path0=/data/fdfs_storage/storage0store_pathl=/data/fdfs_storage/storage1使用如下命令编
2022-04-23 23:42:14 648
原创 归约、分组与分区,深入讲解JavaStream终结操作
.max((a, b) -> {if (a > b) {return 1;} else {return -1;}});复制代码没错,这就是max方法用法,这让我觉得我不是在使用函数式接口,当然你也可以使用Integer的方法进行简化:Optional max = List.of(1, 2, 3).stream().max(Integer::compare);复制代码哪怕如此,这个方法依旧让我感觉到很繁琐,我虽然可以理解在max方法里面传参数是为了让我们自己自定义排序规则,
2022-04-23 23:40:25 275
原创 开发者进阿里必看的30道经典数据库面试题【附详细解析】
(6)rowid是联系表与DBF文件的桥梁[](()索引特点索引的特点(1)索引一旦建立,** Oracle管理系统会对其进行自动维护**, 而且由Oracle管理系统决定何时使用索引(2)用户不用在查询语句中指定使用哪个索引(3)在定义primary key或unique约束后系统自动在相应的列上创建索引(4)用户也能按自己的需求,对指定单个字段或多个字段,添加索引需要注意的是:Oracle是自动帮我们管理索引的,并且如果我们指定了primary key或者uniqu.
2022-04-23 23:38:06 1016
原创 干了八年的阿里面试官,给大家分享我面试时最爱问的Java面试题
18.java 容器都有哪些?19.Collection 和 Collections 有什么区别?20.List、Set、Map 之间的区别是什么?21.HashMap 和 Hashtable 有什么区别?22.如何决定使用 HashMap 还是 TreeMap?23.说一下 HashMap 的实现原理?24.说一下 HashSet 的实现原理?25.ArrayList 和 LinkedList 的区别是什么?26.如何实现数组和 List 之间的转换?..
2022-04-23 23:34:13 125
原创 学会反射的基础、应用场景、优缺点后
Class clazz3 = instance.getClass();System.out.println(“Class.forName() == SmallPineapple.class:” + (clazz1 == clazz2));System.out.println(“Class.forName() == instance.getClass():” + (clazz1 == clazz3));System.out.println(“instance.getClass() == SmallPin
2022-04-23 23:32:38 271
原创 如何保证Redis与数据库的双写一致性?
举个栗子,一个缓存涉及的表的字段,在 1 分钟内就修改了 20 次,或者是 100 次,那么缓存更新 20 次、100 次;但是这个缓存在 1 分钟内只被读取了 1 次,有大量的冷数据。实际上,如果你只是删除缓存的话,那么在 1 分钟内,这个缓存不过就重新计算一次而已,开销大幅度降低。用到缓存才去算缓存。其实删除缓存,而不是更新缓存,就是一个 lazy 计算的思想,不要每次都重新做复杂的计算,不管它会不会用到,而是让它到需要被使用的时候再重新计算。像 mybatis,hibernate,都有懒加载思想。查
2022-04-23 23:30:42 141
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人