后台
文章平均质量分 79
六月·飞雪
这个作者很懒,什么都没留下…
展开
-
连接一个不存在的 IP 地址,会发生什么
因为目标地址不存在 IP 地址,客户端的内核在发 arp 请求的时候,广播询问这个目标 IP 地址是谁的,由于网络中不存在该目标 IP 地址,所以没有设备应答客户端的 arp 请求。第二题不难,难在的是第一题,如果你没有把两台电脑之间是怎么通信的搞清楚,那么你是无从下手回答的,所以建立好体系化的网络知识,面对这类的场景题目,就能做到举一反三了。这时候数据链路层的 arp 请求,会广播询问 IP 地址(路由器 IP 地址)是谁的,路由器发现是自己的 IP 地址,于是就会将自己的 MAC 地址告诉客户端。原创 2023-08-26 22:04:07 · 131 阅读 · 0 评论 -
HTTPS细节
* 单向加密:** 不可逆,只要输入的内容一样,输出的密文一定是一样的,有任何修改, 产生的密文都是不同的** 对称加密:** 加密和解密使用同一把密钥,加密解密速度特别快非对称加密: 使用公钥和私钥进行加密和解密,公钥加密私钥解,私钥加密公钥解。加密解密的过程非常慢所谓公钥,就是可以公开给别人的所谓私钥,就是不可以公开给别人,是自己私有保留的。注:以上内容,纯粹是加密的知识,和。原创 2023-08-26 22:01:00 · 122 阅读 · 0 评论 -
如何测试代码的性能
如果你通过我们一系列的工具,定位到了热点代码,要测试它的性能数据,评估改善情况,就可以交给JMH。如果你的JSON有很多自定义的配置,使用全局的变量更能凸显它的优势。当然,由于ObjectMapper有很多的特性需要配置,你可能会为不同的应用场景分配一个单独使用的ObjectMapper。一般的工具类,都是单例的,同时是线程安全的。ObjectMapper也不例外,它也是线程安全的,你可以并发的执行它,不会产生任何问题。我的cpu有10核,直接就分配了10个线程的并发,cpu在测试期间跑的满满的。原创 2023-08-26 21:56:42 · 145 阅读 · 0 评论 -
2023华为机试真题
0,3]和[1,3]的公共区间为[1,3],[0,3]和[3,5]的公共区间为[3,3],[0,3]和[3,6]的公共区间为[3,3], [1,3]和[3,5]的共区间为[3,3],[1,3]和[3,6]的共区间为[3,3], [3,5]和[3,6]的公共区间为[3,5], 公共区间列表为[[1,3], [3,3], [3,5]],他们合并后的区间为[1,5]。任意两个给定区间的交集,称为公共区间(如:[1,2], [2,3]的公共区间为[2,2], [3,5],[3,6]的公共区间为[3,5])。原创 2023-06-25 20:49:37 · 11301 阅读 · 0 评论 -
批处理框架 Spring Batch
本篇博客是记录使用spring batch做数据迁移时时遇到的一个关键问题:数据迁移量大时如何保证内存。当我们在使用spring batch时,我们必须配置三个东西: reader,processor,和writer。其中,reader用于从数据库中读数据,当数据量较小时,reader的逻辑不会对内存带来太多压力,但是当我们要去读的数据量非常大的时候,我们就不得不考虑内存等方面的问题,因为若数据量非常大,内存,执行时间等等都会受到影响。原创 2023-04-26 16:14:04 · 314 阅读 · 1 评论 -
6个顶级SpringCloud微服务开源项目,企业开发必备
Cloud-Platform是国内首个基于Spring Cloud微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关API 管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。原创 2023-04-25 16:09:21 · 3325 阅读 · 0 评论 -
号称下一代监控系统,来看看它有多强
可以说 SD 机制是非常丰富的,但目前由于开发资源有限,已经不再开发新的 SD 机制,只对基于文件的 SD 机制进行维护。正如上面所说,Prometheus 是使用 Pull 的方式来获取指标数据的,要让 Prometheus 从目标处获得数据,首先必须在目标上安装指标收集的程序,并暴露出 HTTP 接口供 Prometheus 查询,这个指标收集程序被称为 Exporter,不同的指标需要不同的 Exporter 来收集,目前已经有大量的 Exporter 可供使用,几乎囊括了我们常用的各种系统和软件。原创 2023-04-25 16:04:07 · 301 阅读 · 0 评论 -
SpringBoot版开源的CMS系统
系统100%开源模块化开发模式,铭飞所开发的模块都发布到了maven中央库。可以通过pom.xml文件的方式拉取源代码。原创 2023-04-25 16:02:29 · 450 阅读 · 0 评论 -
Redis 16 大应用场景,竟然这么多
brpop:brpop key1 timeout 移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。blpop:blpop key1 timeout 移除并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。例如:热点数据缓存(例如报表、明星出轨),对象缓存、全页缓存、可以提升热点数据的访问数据。赛选商品,苹果的、ios的、屏幕在6.0-6.24之间的,屏幕材质是LCD屏幕。list,双向链表,直接作为timeline就好了。原创 2023-04-25 15:54:20 · 128 阅读 · 0 评论 -
IDEA的5大调试技巧
在项目开发的时候我发现很多小伙伴能非常熟练的使用IDEA编写代码,但是对于IDEA调试的技巧掌握的不是很好,只会F7、F8、F9等这些基本调试功能。而像一些复杂的调试场景就无从下手,如:在for条件断点条件断点调试退回上一步回到了method1刚开始调用的时候,变量i变成了99,没毛病吧,老铁们,是不是很6 :)原创 2023-04-25 15:53:09 · 3162 阅读 · 0 评论 -
阿里巴巴为什么不建议直接使用 Async 注解
自定义线程池,可对系统中线程池更加细粒度的控制,方便调整线程池大小配置,线程执行异常控制和处理。在设置系统自定义线程池代替默认线程池时,虽可通过多种模式设置,但替换默认线程池最终产生的线程池有且只能设置一个(不能设置多个类继承AsyncConfigurer)自定义线程池有如下模式:重新实现接口AsyncConfigurer继承AsyncConfigurerSupport配置由自定义的TaskExecutor替代内置的任务执行器。原创 2023-04-25 15:50:36 · 94 阅读 · 0 评论 -
SpringBoot+Kafka+ELK 完成海量日志收集
然后我们访问192.168.11.31:8001/index和192.168.11.31:8001/err,再查看kafka的logs文件,可以看到已经生成了app-log-collector-0和error-log-collector-0文件,说明filebeat已经帮我们把数据收集好放到了kafka上。kafka安装步骤:首先kafka安装需要依赖与zookeeper,所以小伙伴们先准备好zookeeper环境(三个节点即可),然后我们来一起构建kafka broker。接口,可以看到项目中生成了。原创 2023-04-25 15:48:18 · 1683 阅读 · 0 评论 -
Redis 生产架构选型解决方案
推荐使用更新的引擎版本以支持更多的特性,模块系统新增多个API。支持SSL/TLS加密。支持新的Redis协议:RESP3。服务端支持多模式的客户端缓存。支持多线程IO。副本中支持无盘复制(diskless replication)。Redis-benchmark新增了Redis集群模式。支持重写Systemd。支持Disque模块。云数据库Redis 5.0版本大幅度优化内核,运行更加稳定,同时新增Stream、账号管理、审计日志等多种特性,满足您更多场景下的使用需求。原创 2023-04-25 15:47:01 · 95 阅读 · 0 评论 -
Spring实现AOP的三种方式
①自定义被切入类/** 自定义类* */System.out.println("方法执行前前前前前前前前前前");System.out.println("方法执行后后后后后后后后后后");原创 2023-04-25 15:44:15 · 313 阅读 · 0 评论 -
Web登录很简单?开玩笑
我们在下载文件的时候经常会看到有的下载站点也提供下载文件的“数字摘要“,供下载者验证下载后的文件是否完整,或者说是否和服务器上的文件”一模一样“。其实,数字摘要就是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的内容信息其摘要必定一致。因此,“数字摘要“叫”数字指纹“可能会更贴切一些。“数字摘要“是HTTPS能确保数据完整性和防篡改的根本原因。原创 2023-04-25 15:43:52 · 1227 阅读 · 0 评论 -
关于解决并发问题,99%的程序员都会忽略的一个重要方案!
在 Java 语言中,final 修饰的属性一旦被赋值,就不可以再修改,但是如果属性的类型是普通对象,那么这个普通对象的属性是可以被修改的。但是一个问题的解决必然会带来的新的问题,那就是这样势必在每次使用的时候都会创建新的对象,那岂不是无端的降低了系统的性能了浪费了系统的资源?在并发编程的世界里,共享变量的线程安全问题永远是一个无法避免且不得不面对的问题,如果只有读的情况,那么永远也不会出现线程安全的问题,因为多线程读永远是线程安全的,但是多线程读写一定会存在线程安全的问题。为什么会是同步的执行呢?原创 2023-04-26 16:14:44 · 205 阅读 · 0 评论 -
16个 Redis 常见使用场景
brpop:brpop key1 timeout 移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。blpop:blpop key1 timeout 移除并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。例如:热点数据缓存(例如报表、明星出轨),对象缓存、全页缓存、可以提升热点数据的访问数据。赛选商品,苹果的、ios的、屏幕在6.0-6.24之间的,屏幕材质是LCD屏幕。list,双向链表,直接作为timeline就好了。原创 2023-04-23 15:03:33 · 989 阅读 · 0 评论 -
一个注解搞定 SpringBoot 接口防刷
说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考。原创 2023-04-23 14:40:02 · 99 阅读 · 0 评论 -
分布式定时任务框架选型
共同点:E-Job和X-job都有广泛的用户基础和完整的技术文档,都能满足定时任务的基本功能需求。不同点:X-Job 侧重的业务实现的简单和管理的方便,学习成本简单,失败策略和路由策略丰富。推荐使用在“用户基数相对少,服务器数量在一定范围内”的情景下使用。E-Job 关注的是数据,增加了弹性扩容和数据分片的思路,以便于更大限度的利用分布式服务器的资源。但是学习成本相对高些,推荐在“数据量庞大,且部署服务器数量较多”时使用。原创 2023-04-23 14:39:19 · 151 阅读 · 0 评论 -
Java必备工具库合集
工作很多年后,才发现有很多工具类库,一块看一下有哪些工具类库你也用过。原创 2023-04-23 14:37:27 · 432 阅读 · 0 评论 -
程序员必知的7种软件架构模式
对于有许多组件(客户端)发送请求到另外一些提供服务的组件(服务器)的系统,我们可以使用客户端 - 服务器模式来建模这个系统的一部分:在线应用程序,例如电子邮件、共享文档或银行服务。每个服务都是独立部署和可扩展的,拥有自己的 API 边界。不同的服务可以用不同的编程语言编写,管理它们自己的数据库,由不同的团队开发。第一个概念是,由于性能原因,每个管道都是非定向的和点对点的,接受来自一个源的输入并经常直接输出到另外一个源。许多类型转换在实践中重复出现,因此将其创建成独立的可复用的部分,这是比较理想的。原创 2023-04-21 17:03:40 · 1151 阅读 · 0 评论 -
高并发存储番外篇:Redis套路
可以看到,相比于C语言来说,也就多了几个字段,分别用来标识空闲空间和当前数据长度,但简直是神来之笔:可以O(1)复杂度获取字符串长度;有。原创 2023-04-21 17:01:17 · 112 阅读 · 0 评论 -
SpringBoot实现动态增删启停定时任务
添加实现了CommandLineRunner接口的SysJobRunner类,当spring boot项目启动完成后,加载数据库里状态为正常的定时任务。注解和@Scheduled注解实现定时任务,也可以通过SchedulingConfigurer接口来实现定时任务。添加Runnable接口实现类,被定时任务线程池调用,用来执行指定bean里面的方法。添加定时任务注册类,用来增加、删除定时任务。修改定时任务,先移除原来的任务,再启动新任务。添加执行定时任务的线程池配置类。定时任务数据库表设计。原创 2023-04-21 16:58:53 · 1430 阅读 · 1 评论 -
if(a==1 && a==2 && a==3),为true,你敢信
这是一个JS社区抛出来的问题。第一眼看到这个问题的时候,感觉这似乎是一个无稽之谈,一个变量怎么可能会同时满足俩个条件呢!不过后来深入思考一下,发现这类问题有点意思...如果你也觉得不可能的话,一起随着文章看下去。你也会觉得有点意思~原创 2023-04-27 14:30:17 · 155 阅读 · 0 评论 -
微服务之间的最佳调用方式
- 前言 -在微服务架构中,需要调用很多服务才能完成一项功能。服务之间如何互相调用就变成微服务架构中的一个关键问题。服务调用有两种方式,一种是RPC方式,另一种是事件驱动(Event-driven)方式,也就是发消息方式。消息方式是松耦合方式,比紧耦合的RPC方式要优越,但RPC方式如果用在适合的场景也有它的一席之地。我们总在谈耦合,那么耦合到底意味着什么呢?- 耦合的种类 -时间耦合:客户端和服务端必须同原创 2023-04-27 14:29:57 · 412 阅读 · 0 评论 -
这些事务会不会回滚
下面这个问题源于前几日在Spring技术交流群里,一个群友提出的关于事务回滚的疑问。在讨论过程中,我尝试去复现的问题场景,结果发现了另外一个可能让大家会迷惑的情况。当时在群里说了结果和原因,但微信群范围有限,所以单独写篇文章,拿出来给大家看看,顺便考考大家,对这块是否了解。原创 2023-04-27 14:30:11 · 80 阅读 · 0 评论 -
Java 的 hashCode 值怎么生成的?和对象的内存地址有关系?
先看一个最简单的打印符号后面的是什么?是 hashcode 还是对象的内存地址?还是其他的什么值?其实那对象的 hashcode 到底是怎么生成的呢?真的就是内存地址吗?本文内容基于 JAVA 8 HotSpot。原创 2023-04-20 00:10:23 · 340 阅读 · 0 评论 -
这样设计订单系统,简直太厉害了
对于企业订单系统的搭建,并不是要做的大而全、也不是要小而精。而需要结合市场、公司、业务的实际情况来最终制定系统设计方案和产品迭代计划。最终,和公司整体发展相互协调,相辅相成。原创 2023-04-19 23:50:04 · 601 阅读 · 2 评论 -
还在写大量 if 来判断?试试用一个规则执行器来替代它
规则执行器的优点和缺点优点:比较简单,每个规则可以独立,将规则,数据,执行器拆分出来,调用方比较规整;我在 Rule 模板类中定义 convert 方法做参数的转换这样可以能够,为特定 rule 需要的场景数据提供拓展。缺点:上下 rule 有数据依赖性,如果直接修改公共传输对象 dto 这样设计不是很合理,建议提前构建数据。原创 2023-04-19 23:48:51 · 99 阅读 · 0 评论 -
RabbitMQ 七种队列模式应用场景案例分析
简单模式(Hello World)如何设计 QQ、微信、微博、Github 等第三方账号登陆?(附表设计)做最简单的事情,一个生产者对应一个消费者,RabbitMQ相当于一个消息代理,负责将A的消息转发给B将发送的电子邮件放到消息队列,然后邮件服务在队列中获取邮件并发送给收件人工作队列模式(Work queues)微博千万级规模高性能高并发的网络架构设计在多个消费者之间分配任务(竞争的消费者模式),一个生产者对应多个消费者,一般适用于执行资源密集型任务,单个消费者处理不过来,需要多个消费者进行处理。原创 2023-04-19 23:48:17 · 485 阅读 · 0 评论 -
SpringBoot中的线程池
前两天做项目的时候,想提高一下插入表的性能优化,因为是两张表,先插旧的表,紧接着插新的表,一万多条数据就有点慢了后面就想到了线程池ThreadPoolExecutor,而用的是Spring Boot项目,可以用Spring提供的对ThreadPoolExecutor封装的线程池ThreadPoolTaskExecutor,直接使用注解启用。原创 2023-04-19 23:47:29 · 2104 阅读 · 0 评论 -
登陆接口如何写
我们可以看到近些年来,几乎所有的应用都会让用户绑定手机,一个是国家的实名制政策要求,第二个是手机基本上和身份证一样,基本上可以代表一个人的身份标识了。所以很多安全操作都是基于手机验证来进行的,登录也可以。那这时候又有同学说了,那我可以直接限制非正常用户的登录操作,当它密码错误达到一定次数时,直接拒绝用户的登录,隔一段时间再恢复。只要网站是暴露在公网的,那么很大概率上会被人盯上,尝试爆破这种简单且有效的方式:通过各种方式获得了网站的用户名之后,通过编写程序来遍历所有可能的密码,直至找到正确的密码为止。原创 2023-04-19 23:47:04 · 470 阅读 · 0 评论 -
一文看懂Java锁机制
lock: 将一个变量标识为被一个线程独占状态unclock: 将一个变量从独占状态释放出来,释放后的变量才可以被其他线程锁定read: 将一个变量的值从主内存传输到工作内存中,以便随后的load操作load: 把read操作从主内存中得到的变量值放入工作内存的变量的副本中use: 把工作内存中的一个变量的值传给执行引擎,每当虚拟机遇到一个使用到变量的指令时都会使用该指令assign: 把一个从执行引擎接收到的值赋给工作内存中的变量,每当虚拟机遇到一个给变量赋值的指令时,都要使用该操作。原创 2023-04-19 23:46:29 · 177 阅读 · 0 评论 -
TikTok二面:“聊聊二维码扫码登录的原理”
我们从登陆的本质触发,探索二维码扫码登录是如何做到的告诉系统我是谁向系统证明我谁在这个过程中,我们先简单讲了两个前提知识,一个是二维码原理,一个是基于 token 的认证机制。然后我们以二维码状态为轴,分析了这背后的逻辑: 通过 token 认证机制与二维码状态变化来实现扫码登录.需要指出的是,前面的讲的登录流程,它适用于同一个系统的 PC 端,WEB 端,移动端。原创 2023-04-13 00:17:21 · 540 阅读 · 0 评论 -
Redis 大数据量(百亿级)Key存储需求及解决方案
另外对于hashmap中的key我们也做了相关优化,截取cookie或者deviceid的后六位作为key,这样也可以保证内存对齐,理论上会有冲突的可能性,但在同一个桶内后缀相同的概率极低(试想id几乎是随机的字符串,随意10个由较长字符组成的id后缀相同的概率*桶样本数=发生冲突的期望值<<0.05,也就是说出现一个冲突样本则是极小概率事件,而且这个概率可以通过调整后缀保留长度控制期望值)。最近我在思考实时数仓问题的时候,想到了巨量的redis的存储的问题,然后翻阅到这篇文章,与各位分享。原创 2023-04-12 23:30:13 · 1039 阅读 · 0 评论 -
MyBatis 的执行流程
*** 设置参数*/@OverrideSystem.out.println("设置参数->自定义typeHandler生效了");/*** 根据列名获取结果*/@OverrideSystem.out.println("根据columnName获取结果->自定义typeHandler生效了");/*** 根据列的下标来获取结果*/@OverrideSystem.out.println("根据columnIndex获取结果->自定义typeHandler生效了");/**原创 2023-04-12 23:29:42 · 449 阅读 · 0 评论 -
API 面试四连杀:接口如何设计?安全如何保证?签名如何实现?防重如何实现?
*** 禁止重复提交*//** 过期时间,单位毫秒 **/原创 2023-04-12 23:14:16 · 125 阅读 · 0 评论 -
架构解密从分布式到微服务:微服务架构到底是什么
微服务架构(Microservice Architecture) 是近两年来最流行的架构术语之一,大名鼎鼎的Martin Flower曾这样描述它:“微服务”只不过是满大街充斥的软件架构中的一个新名词而已。尽管我们非常鄙视这样的名词,但其描述的软件风格越来越吸引我们的注意。在过去几年里,我们发现越来越多的项目开始使用这种风格,以至于我们的同事在构建企业级应用时,理所当然地认为这是一种默认开发形式。然而,很不幸,微服务风格是什么,应该怎么开发,关于这样的理论描述却很难找到。原创 2023-04-12 23:10:13 · 216 阅读 · 0 评论 -
ElasticSearch 调优笔记
ES官方调优指南第一部分:调优索引速度第二部分:调优搜索速度第三部分:通用的一些建议英文原文:ES发布时带有的默认值,可为es的开箱即用带来很好的体验。全文搜索、高亮、聚合、索引文档 等功能无需用户修改即可使用,当你更清楚的知道你想如何使用es后,你可以作很多的优化以提高你的用例的性能,下面的内容告诉你 你应该/不应该 修改哪些配置。原创 2022-12-30 11:15:36 · 2476 阅读 · 0 评论 -
阿里云Redis开发规范
非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时要注意防止bigkey过期时间自动删除问题(例如一个200万的zset设置1小时过期,会触发del操作,造成阻塞,而且该操作不会不出现在慢查询中(latency可查)),查找方法和删除方法。默认策略是volatile-lru,即超过最大内存后,在过期键中使用lru算法进行key的剔除,保证不过期数据不被删除,但是可能会出现OOM问题。设置合理的密码,如有必要可以使用SSL加密访问(阿里云Redis支持)原创 2022-12-30 11:14:38 · 1014 阅读 · 0 评论