- 博客(18)
- 收藏
- 关注

原创 什么是Web 3.0?
web 3.0是非常火的一个概念了,就算你不知道他具体是什么,但是你也一定听说过这个名词。但是Web 3.0中又夹杂着很多其他的概念,比如币、DeFi、DeApps、NFT、元宇宙,等等更多其他的概念,所以很多人就更难理解了。这篇文章我们站在工程师的角度来谈一谈什么是web 3.0,为什么他广受争议,他到底发展到什么阶段了,作为普通研发者,我们能在这里面做些什么呢?
2024-11-14 20:26:59
2811
1

原创 Tomcat源码分析(从0到1)
在Java的类加载机制中,通常使用双亲委派模型,即先向父类加载器请求加载类,如果父类加载器找不到,再由当前类加载器加载。但在Tomcat中,由于需要加载Web应用中的类和Tomcat自身的类,自定义了类加载器,使得Tomcat能够优先加载Web应用程序相关的类,避免与JVM或其他库中的类冲突。Catalina解析server.xml:读取Tomcat的配置文件,实例化配置的各个组件,如Server、Service、Connector等。管理组件生命周期:Catalina通过调用相关组件的init()和。
2024-11-05 19:03:10
1188

原创 Mybatis源码分析(超级详细)
O就是对象,M就是映射,R就是关系型数据库。所以ORM( Object Relational Mapping) ,也就是对象与关系的映射,对象是程序里面的对象,关系是它与数据库里面的数据的关系,也就是说,ORM框架帮助我们解决的问题是程序对象和关系型数据库的相互映射的问题Hibernate是一个很流行的ORM框架,2001年的时候就出了第一个版本。使用步骤如下:创建一个Maven项目并添加相关的依赖即可,我们在此处直接通过 SpringDataJpa的依赖处理。
2024-11-05 19:02:03
3139
2

原创 100%吃透Spring 的三级缓存
在此之前,我们需要了解什么是spring的循环依赖,下面我引用一篇之前的文档然后带你从源码级别debug,一步一步带你探索Spring是如何通过三级缓存来解决循环依赖问题的首先先创建两个类,分别是类A和类B,然后定义好get和set方法和无参数构造下一步通过spring容器注入两个bean。
2024-11-05 19:01:10
1467
1
原创 什么是闰秒?
闰秒概念是 1972年提出的,之所以有这个概念,主要是因为由于潮汐等自然现象的影响,地球的自转速度并不是恒定的。所以,每隔一段时间世界标准时间「协调世界时(UTC)」会依据地球围绕太阳运动计算的「世界时(UT)」之间出现小的偏差。所以就需要对协调世界时进行调快或者拨慢1秒来消除这个偏差。闰秒分为正闰秒和负闰秒,正闰秒表示需要在UTC中插入1秒,负闰秒表示需要在UTC中减少1秒。
2024-11-12 21:50:00
2260
1
原创 阿里的库存秒杀是如何实现的?
阿里的mysqI呢,是加了个自研了一个补丁,这个补丁可以识别出热点行及热点SQL,再给这些SQL分组,然后一个组内的多个SQL就可以减少加锁次数、减少B+树的遍历、以及通过组提交减少事务提交次数。我看了很多资料,也找了很多人做交流,最终得到的结论是啥都有,主要总结几个主流的,在用的一些方案(主要是整体方案的介绍,具体细节就不展开说了,有的是太敏感不方便讲,有的是太复杂了先把主要的说了)你比如说,一些并发量没那么高,比如只有几千的,基本上是用mysql在抗的。但是不管咋说,复杂度和并发量一定是成正比的。
2024-11-12 21:40:25
880
原创 5 分钟内最多允许用户尝试登录3次,如果错误次数超过限制,需要对该用户进行锁定。如何实现?
如果在 5 分钟内的请求次数没有超过限制,脚本会将当前请求的时间戳添加到 Redis 的有序集合中,并返回 1,表示允许请求。:滑动窗口的逻辑依然和原来一样,使用Redis 有序集合(ZADD)记录每次登录尝试的时间戳,过期的记录会被自动清理。而第二个功能,我们只需要把被锁定的用户保存在Redis中即可,这样还能根据业务要求,设置一个合理的超时时间。:如果用户在 5 分钟内的请求次数超过限制,脚本会设置用户的锁定键,并返回 ◎,表示拒绝请求。第一个功能,其实是一个典型的滑动窗口问题。
2024-11-10 21:32:30
585
原创 大量的手机号被标记成骚扰电话,如何存储这些号吗?
手机号被标记成骚扰电话,这是一个典型的名单识别的场景,大量手机号,说明存储量大。所以,需要考虑的就是数据量大而带来的查询效率低下的问题。
2024-11-10 21:10:52
430
原创 教大家如何实现滑动窗口限流
固定窗口限流中,也是需要定义时间片段和时间窗口,只不过在计数上有一个区别,那就是当随着时间的推移,到了下一个时间窗口时,固定窗口限流的计数器的数量会被清零。重新开始计数。固定窗口限流的主要特点是窗口大小是固定的,不管请求是否均匀分布,每个窗口内的请求数量都是相同的。这可能导致某些时间段内请求过多,而在其他时间段内则很少,不同窗口之间可能出现流量的不平衡。
2024-11-08 13:31:26
1189
原创 java中为什么建议多用组合少用继承?
指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;因为在对象之间,各自的内部细节是不可见的,所以我们也说这种方式的代码复用是黑盒式代码复用。如果是必须的,则继承是必要的。继承,在写代码的时候就要指名具体继承哪个类,所以,在编译期就确定了关系。(从基类继承来的实现是无法在运行期动态改变的,因此降低了应用的灵活性。组合(Composition)体现的是整体与部分、拥有的关系,即has-a的关系。
2024-11-07 15:28:54
773
原创 如何去做一个黑名单过滤的网站
因为黑名单应该是比较少的,大多数的地址应该是不在黑名单中的。而布隆过滤器如果返回不存在,那么说明数据一定是不存在的,不存在误判的情况。在本地缓存和Redis 中,可以用布隆过滤器这种数据结构,然后数据库的索引本身是 hash 结构,同时他也支持模糊查询。以上是从数据结构角度说的,也就是说直接把黑名单放到内存中,可以用这样的方案来做,但是其实基本没人这么做,因为都放到内存,内存扛不住啊。要实现一个过滤黑名单网址的系统,我们需要考虑的因素有很多,比如黑名单的存储、匹配和查询的性能、系统扩展性等。
2024-11-07 12:07:17
355
原创 实现敏感词过滤的方法
前缀树(Trie,又称字典树或键树)是一种树形结构,它是一种用于快速检索字符串集合中字符串的高效数据结构。前缀树的每个节点代表一个字符串(或字符串的一部分),从根节点到某一节点的路径上经过的字符连接起来,就是该节点对应的字符串。根节点不包含字符,除根节点外的每个节点都只包含一个字符。从根节点到某一节点的路径上经过的字符连接起来,为该节点对应的字符串。每个节点的所有子节点包含的字符都不相同。
2024-11-06 11:09:36
1113
原创 Tomcat的IO模型
Tomcat支持多种IO模型,包括BIO、NIO、AIO、APR,我先介绍一下BIO,BIO是传统的IO模型,也称为阻塞IO,在BIO模型中,每个客户端连接都由一个独立的线程处理,当有新的连接到来时,Tomcat会创建一个新的线程来处理请求,当并发连接数较大时,会导致线程数急剧增加,占用大量的系统资源。然后最后就是APR,它是Apache软件基金会提供的一个库,在APR模型中,Tomcat利用本地操作系统的特性进行IO操作,包括网络和文件IO。
2024-11-05 19:00:39
177
原创 过滤器和拦截器的区别是什么
是 Servlet 技术的一部分,主要是在请求进入控制器(Controller)之前、或者响应返回给客户端之前,对请求和响应做一些处理。可以把它想成一个“过安检的过滤网”,所有请求都要先经过过滤器,可以在这里检查权限、编码格式、日志记录等,然后再把请求传给后续的处理程序。通常是框架(比如 Spring MVC)提供的功能,它的工作方式跟过滤器类似,也是对请求做一些预处理和后处理,但它的触发点是在方法调用的前后。比如进入一个控制器方法之前,拦截器会先拦一手,做一些操作,然后再让方法执行。
2024-11-05 18:58:59
225
原创 Tomcat和Web服务器之间有什么关系?
Tomcat 是一种专门为运行 Java Web 应用而设计的应用服务器,而 Web 服务器的范围更广,一般是用来处理静态资源的请求,比如 HTML、CSS、图片等。具体来说,Web 服务器(例如 Apache、Nginx)擅长处理静态资源的请求,但它们本身不支持直接运行 Java 程序。如果有 Java Web 应用的请求进来,Web 服务器会把这些请求转交给 Tomcat 处理。Tomcat 能解析和执行 Java 代码,生成动态内容,最终再把结果返回给 Web 服务器,Web 服务器再将这个结果发
2024-11-05 18:56:20
279
原创 tomcat处理请求的过程
tomcat通过连接器监听指定端口,然后接收来自客户端的HTTP请求,监听器接收到HTTP请求后,将请求转发给Tomcat,Tomcat首先会解析请求信息,包括请求方法、URL、请求头参数等。然后根据解析出来的URL找到对应的Servlet,并把请求转发给这个Servlet,然后Servlet会处理请求。Servlet处理完成之后会把结果转发给Tomcat,然后Tomcat将响应数据通过连接器发送给指定客户端,这样一次处理请求就算完成了!我框起来的这部分就是。
2024-11-05 18:55:24
220
原创 tomcat中类加载器
在默认情况下,Server类加载器和Shared类加载器是未定义的,需要通过在conf/catalina.properties中定义server.loader或者shared.loader属性的值才会得到这个复杂的结构。下面这张图,是我基于官网,还有看了源码之后,画的一张图,从tomcat6.0开始到现在一直都是这个样子。下的类和资源,这些类和资源仅对特定的 Web 应用可见,不会被其他应用共享。系统类加载器,是加载classpath路径下的类的类加载器。最底层的类加载器,负责加载jdk的核心类库。
2024-11-05 18:54:49
449
原创 tomcat启动流程
Tomcat 会看一下这个请求的路径,找到对应的 Servlet 或者 JSP 文件,然后把请求传过去。接下来,Tomcat 会启动一个叫“连接器”的东西,可以理解为它的“监听模块”。这个连接器一启动,相当于 Tomcat 就正式“上线”了,随时可以处理外部的请求。配置文件,这个文件里写着一些关键的信息,比如说要监听哪个端口,在哪个文件夹里有需要部署的 Web 应用。Tomcat 把这些配置都加载进来之后,就开始做基础的准备工作,像是初始化服务、容器和引擎,这样它就具备了接收请求和处理应用的基本能力。
2024-11-05 18:52:33
369
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人