avatar
文章
125
标签
10
分类
24

首页
时间轴
标签
分类
我的生活小站
首页
时间轴
标签
分类

我的生活小站

5. 与 HTTP 协作的 Web 服务器
置顶|发表于2023-11-20|计算机网络
一台 Web 服务器可搭建多个独立域名的Web网站,也可作为通信路径上的中转服务器提升传输效率 用单台虚拟主机实现多个域名HTTP/1.1 规范允许一台 HTTP 服务器搭建多个Web站点。比如,提 供 Web 托管服务(Web Hosting Service)的供应商,可以用一台服务器为多位客户服务,也可以以每位客户持有的域名运行各自不同的网站。这是因为利用了虚拟主机(Virtual Host,又称虚拟服务器)的功能 在互联网上,域名通过DNS服务映射到IP地址(域名解析)之后访问目标网站。可见,当请求发送到服务器时,已经是以 IP 地址形式访问了。 所以,如果一台服务器内托管了 www.tricorder.jp 和 www.hackr.jp 这 两个域名,当收到请求时就需要弄清楚究竟要访问哪个域名。 在相同的 IP 地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。 通信数据转发程序 :代理、网关、隧道HTTP 通信时,除客户端和服务器以外,还有一些用于通信数据转发的应用程序 ...
5. 布隆过滤器
置顶|发表于2023-11-20|中间件
我们先思考一个问题,如果想要判断一个元素是否存在,你通常会怎么做?一般的做法都是将其保存起来然后通过比较确认,一共会有如下几种情况: 如果使用线性表或者数组存储,则查找的时间复杂度为 O(n)。 如果使用树存储,则查找的时间复杂度为 O(logn)。 如果使用哈希表存储,则查找的时间复杂度为 O(log(n/m)),m 为哈希分桶数。 对于上述三种情况,肯定倾向于哈希表,因为其时间复杂度最低(在极端情况下时间复杂度可以为 O(1) )。 但是哈希表也有缺陷,例如存储容量占比高,考虑到负载因子的存在,通常存储空间都不会被用完。当然无论是哈希表、树、线性表,一旦元素的数量极多时,查询的速度会变得很慢,而且占用的空间也会大到无法想象。那么有办法解决没有呢?答案是有,布隆过滤器就是解决该问题的利器。 设计思想布隆过滤器是一个由 一个长度为 M 比特的位数组(bit array)与 K 个哈希函数(hash function) 组成的数据结构。布隆过滤器主要用于用于检索一个元素是否在一个集合中。位数组中的元素初始值都是 0 ,所有哈希函数可以把输入的数据均匀低散列。图例如下 ...
6. 请求处理一览
置顶|发表于2023-11-20|JAVASpringMvc
FrameworkServlet实际上,FrameworkServlet 才是真正的入门。FrameworkServlet 会实现 #doGet(HttpServletRequest request, HttpServletResponse response) #doPost(HttpServletRequest request, HttpServletResponse response) #doPut(HttpServletRequest request, HttpServletResponse response) #doDelete(HttpServletRequest request, HttpServletResponse response) #doOptions(HttpServletRequest request, HttpServletResponse response) #doTrace(HttpServletRequest request, HttpServletResponse response) #service(HttpServletRequest re ...
6. 内存回收(收集器种类)
置顶|发表于2023-11-20|JAVAJVM内存回收
垃圾收集器概述垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法、火车算法)的具体实现,不同商家、不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚拟机中的垃圾收集器。 垃圾收集器组合JDK7/8后,HotSpot虚拟机所有收集器及组合(连线),如下图: 图中展示了7种不同分代的收集器: Serial(串行GC)收集器 ParNew(并行GC)收集器 Parallel Scavenge(并行回收GC)收集器(串行GC)收集器 Serial Old(串行GC)收集器 Parallel Old(并行GC)收集器 CMS(并发GC)收集器 G1 JDK1.7提供的一个新收集器 它们所处区域,则表明其是属于新生代收集器还是老年代收集器: 新生代收集器:Serial、ParNew、Parallel Scavenge; 老年代收集器:Serial Old、Parallel Old、CMS; 整堆收集器:G1; 两个收集器间有连线,表明它们可以搭配使用 其中Serial Old作为CMS出现”Concurrent Mo ...
6. CPU消耗分析
置顶|发表于2023-11-20|JAVAJVM性能调优
在 Linux 中, CPU 主要用于中断、内核及用户进程的任务处理,优先级为中断 > 内核 > 用户进程,在学习如何分析 CPU 消耗状况前,还有三个重要的概念要阐述。 ##概念 上下文切换每个 CPU (或多核心 CPU 中的每核 CPU )同一时间只能执行一个线程, Linux 采用的是抢占式调度,即为每个线程分配一定的执行时间。线程执行时间到达而切换到其它线程时,就会触发上下文切换。上下文切换过多会造成内核占据较多的 CPU 使用,使得应用的响应速度下降。 对于JAVA应用,典型的是进行文件IO操作、网络IO操作、锁等待或线程sleep时,当线程进入阻塞或等待,会触发上下文切换 运行队列每个 CPU 都维护了一个可运行的线程队列。 例如:4核CPU,JAVA应用启动了8个线程,且都是出于运行状态,那么在平均分配情况下,每个CPU中的运行队列就有2个线程 通常系统的load由CPU运行队列来决定,运行队列值越大则线程需要消耗越长的时间才能执行完 通常建议控制在每个 CPU 核上的运行队列为 1-3 个。 利用率CPU 利用率为 CPU 在用户进程、内核、 ...
6. ⼀级缓存
置顶|发表于2023-11-20|JAVAMybatis缓存机制
在进行数据库查询之前,MyBatis首先会检查以及缓存中是否有相应的记录,若有的话直接返回即可。一级缓存是数据库的最后一道防护,若一级缓存未命中,查询请求将落到数据库上。 一级缓存是在 BaseExecutor 被初始化的 123456789public abstract class BaseExecutor implements Executor { protected PerpetualCache localCache; // 省略其他字段 protected BaseExecutor(Configuration configuration, Transaction transaction) { this.localCache = new PerpetualCache("LocalCache"); // 省略其他字段初始化方法 }} 一级缓存的类型为 PerpetualCache,没有被其他缓存类装饰过。 一级缓存所存储从查询结果会在MyBatis执 ...
6
置顶|发表于2023-11-20|JAVAMybatisSQL执行流程
假设我们有这样一条 SQL 语句: 1SELECT * FROM author WHERE name = #{name} AND age = #{age} SQL 语句中包含两个#{}占位符,在运行时这两个占位符会被解析成两个ParameterMapping 对象。如下: 12345ParameterMapping{property='name', mode=IN, javaType=class java.lang.String, jdbcType=null, ...} ParameterMapping{property='age', mode=IN, javaType=class java.lang.Integer, jdbcType=null, ...} #{xxx}占位符解析完毕后,得到的 SQL 如下: 1SELECT * FROM Author WHERE name = ? AND age = ? 假设下面这个方法与上面的 S ...
6. 解析sql节点
置顶|发表于2023-11-20|JAVAMybatis映射文件的解析过程
sql节点用来定义一些可重用的 SQL 语句片段,比如表名,或表的列名等。在映射文件中,我们可以通过include节点引用sql节点定义的内容。 12345678910<sql id="table"> article</sql><select id="findOne" resultType="Article"> SELECT id, title FROM <include refid="table"/> WHERE id = #{id}</select><update id="update" parameterType="Article"> UPDATE <include refid="table"/> SET title = #{title} WHERE id = #{id}< ...
6. 解析plugins节点
置顶|发表于2023-11-20|JAVAMybatis配置文件的解析过程
插件是 MyBatis 提供的一个拓展机制,通过插件机制我们可在 SQL 执行过程中的某些点上做一些自定义操作。 实现一个插件需要比简单,首先需要让插件类实现 Interceptor接口。然后在插件类上添加@Intercepts 和@Signature 注解,用于指定想要拦截的目标 方法。MyBatis 允许拦截下面接口中的一些方法: Executor: update,query,flushStatements,commit,rollback,getTransaction,close,isClosed ParameterHandler: getParameterObject,setParameters ResultSetHandler: handleResultSets,handleOutputParameters StatementHandler: prepare,parameterize,batch,update,query 比较常见的插件有分页插件、分表插件等 实例: 12345<plugins> <plugin interceptor=&qu ...
6. HTTP 首部
置顶|发表于2023-11-20|计算机网络
HTTP 协议的请求和响应报文中必定包含 HTTP 首部,只是我们平时 在使用 Web 的过程中感受不到它。 HTTP 报文首部HTTP 协议的请求和响应报文中必定包含HTTP首部。 首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。对于客户端用户来说,这些信息中的大部分内容都无须亲自查看。 HTTP 请求报文在请求中,HTTP 报文由方法、URI、HTTP 版本、HTTP 首部字段等 部分构成。 示例信息 HTTP 响应报文在响应中,HTTP 报文由 HTTP 版本、状态码(数字和原因短语)、 HTTP 首部字段 3 部分构成。 示例信息 在报文众多的字段当中,HTTP首部字段包含的信息最为丰富。首部字段同时存在于请求和响应报文内,并涵盖 HTTP报文相关的内容信息。 HTTP 首部字段 HTTP 首部字段传递重要信息HTTP 首部字段是构成 HTTP报文的要素之一。在客户端与服务器之间以HTTP协议进行通信的过程中,无论是请求还是响应都会使用首部字段,它能起到传递额外重要信息的作用。 使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内 ...
1…789…13
avatar
Li Jing
这是一个老父亲答应给孩子建个网站,记录一下他的成长
文章
125
标签
10
分类
24
Follow Me
公告
This is my Blog
最新文章
1. 配置⽂件解析过程分析2023-11-20
2. 解析properties节点2023-11-20
3. 解析settings节点2023-11-20
4. 设置settings内容到 Configuration中2023-11-20
5. 解析typeAliases节点2023-11-20
分类
  • Git1
  • JAVA92
    • JVM22
      • JVM线程同步机制1
      • 代码执行机制2
      • 内存回收9
      • 性能调优7
      • 类执行机制3
标签
JVM Nginx SpringMvc 并发编程的艺术 树 常用操作 Redis Http Mybatis源码解析 博客
归档
  • 十一月 2023117
  • 六月 20236
  • 八月 20211
  • 一月 20211
网站资讯
文章数目 :
125
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2023 By Li Jing
框架 Hexo|主题 Butterfly