Servlet线程模型与异步请求

Servlet线程模型与异步请求本篇文章主要意在整理Servlet的线程模型,帮助大家更好的理解请求在广泛使用的web容器下(基于Servlet的Tomcat服务器)的运行原理 Servlet是Java的服务端框架,可以利用Servlet来编写一个动态服务器(动态主要是区别于单纯的html构建的静态页面),主要基于Http协议 通过Servlet提供的API,我们可以轻松的处理网络请求和与其他服务建立连接(相比于基于Socket编程),并且基于Java使得它具有跨平台性、灵活性 简单的说Servlet就是一个封装了操作网络请求的API,它将Http网络请求简化为更容易处理的对象 从某种意义上讲,当我们不适用任何web框架(例如Spring mvc和Struts2)时,我们编写的每一个页面(jsp或是继承于HttpServlet的类)也都可以说是一个Servlet
Servlet线程模型与异步请求2020-03-23鱼鱼

Springboot源码原理:从启动方法看配置加载

Springboot源码原理:从启动方法看配置加载首先看一个springboot项目的配置,我们可以定义一个application.yml,对于不同的环境有时也通过profile配置项指定不同的配置文件(譬如application-dev.yml),也可以通过命令行覆写具体的VM options配置项(举个栗子,启动时执行 java -jar xxx.jar --server.port=8080),此文讲解这些配制的读取原理 整体配置项的优先级从高到低为: 命令行配置; 系统属性(System.getProperties()) 系统环境变量 jar包外的主配置文件(带有) jar包内的主配置文件 jar包外的次要配置文件(由spring.profile指定的)
Springboot源码原理:从启动方法看配置加载2021-03-09鱼鱼

Java的socket通信

Java的socket通信网络编程中,会使用socket通信 TCP/IP协议,即Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议,他使用TCP/IP四层模型(实际开发中只涉及到四层模型,软件范畴涉及不到OSI七层参考模型): TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯 具有高度的可靠性 三次握手,即通信时,客户端和服务端共计要传输三次包,三次握手建立连接: 1.主机(客户端)发送 SYN=1(建立连接标识)和seq=x(序号),客户端进入SYN_SEND状态,等待服务端确认
Java的socket通信2019-03-27鱼鱼

MySQL杂记

MySQL杂记Explain 可以分析一个SELECT语句的性能,只要加在查询语句之前即可,会输出关于查询语句的分析,分析这个例子: id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符. select_type: SELECT 查询的类型. table: 所查询的表 partitions: 匹配的分区 type: join 类型 possible_keys: 此次查询中可能选用的索引 key: 此次查询中确切使用到的索引. key_len: 索引长度占字节数 ref: 哪个字段或常数与 key 一起被使用 rows: 显示此查询一共扫描了多少行. 这个是一个估计值.
MySQL杂记2019-02-25鱼鱼

阿里巴巴Java开发手册 华山版 v1.5

阿里巴巴Java开发手册 华山版 v1.5《Java 开发手册》是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,公开到业界后,众多社区开发者踊跃参与,共同打磨完善,系统化地整理成册 现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量 比如:数据库的表结构和索引设计缺陷可能带来软件上的架构缺陷或性能风险;工程结构混乱导致后续维护艰难;没有鉴权的漏洞代码易被黑客攻击等等 所以本手册以 Java 开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、MySQL 数据库、工程结构、设计规约七个维度,再根据内容特征,细分成若干二级子目录
阿里巴巴Java开发手册 华山版 v1.52020-02-24鱼鱼

[Quick Start]RedisTemplate的bean手动配置

[Quick Start]RedisTemplate的bean手动配置 有时我们可能需要手动配置Redis的连接,例如动态修改或是从特殊的参数中获取,而不是使用SpringBoot的自有配置,此篇文章意在快速指引redis的手动配置 基于Spring项目和Jedis的底层,使用RedisTemplate; 通过Maven引入相关依赖,可以的话spring-data-redis选择2.0.0以上版本,较低版本需要的依赖: 如果使用了Spring-boot并且要使用较高的版本(例如在2.1.0后才有的某些API-putIfAbsent带有超时时间的版本),我们直接修改starter的版本是不够的,二者版本并不对称,我们需要去掉其中的redis依赖并单独引入 建议保持良好的依赖管理习惯,显式的移除依赖,而不是任其覆盖,如:
[Quick Start]RedisTemplate的bean手动配置 2020-02-24鱼鱼

浅谈代理-动态代理

浅谈代理-动态代理我们可以很轻松的实现一个简单的代理 实现静态代理是个很简单的事情,最基础的代理只需要定义一个接口(虽然不是必要,但这显然才是标准的设计)、一个被代理类和一个代理类,例如: 定义一个接口: 一个实现类: 和一个代理类: 实际使用时,我们是去调用HelloWorldProxy的方法,其将作为HelloWorld的代理实现 此种方式直接实现的代理太过于死板,因为每一种代理行为都要制定一个代理类,我们熟知的很多基于代理的实现(譬如AOP、事务)显然不可能用静态代理的方式针对每一处类切点都覆写一个代理类,这种时候就需要动态代理 我们所熟知的相当多的框架均基于动态代理开发,JDK本身基于反射(java.lang.reflect)提供了动态代理,我们只需定义代理的行为,而对于代理类的范围并不是固定值
浅谈代理-动态代理2020-10-13鱼鱼

造轮子2 灵活运用反射

造轮子2 灵活运用反射//TODO
造轮子2 灵活运用反射2019-05-25鱼鱼

分布式系统中的一致性算法和问题解决

分布式系统中的一致性算法和问题解决在撰写脑裂问题相关的博客时发现脑裂问题的产生原因在不同算法下的分布式系统各不相同,需要先大致了解一致性算法并针对性的解决 市面上有很多开源的分布式系统,他们的数据一致性算法不尽相同,例如k-v系统的祖师爷——zookeeper采用的是ZAB的算法,而最近流行的Consul是raft算法,不同数据中心server沟通的方式则是gossip协议 不同的协议和方式对选举和数据同步有不同的处理机制,利用这篇文章来对比常见的分布式一致性算法 一个系统可能会使用多个不同的一致性算法,以便于在不同的业务环节上有着各自更贴切的处理 ps:有种观点是一致性算法不是很准确,因为replica也能保证数据某种程度上具有一致性,有人称之为共识算法
分布式系统中的一致性算法和问题解决2021-03-13鱼鱼

Spring的事务

Spring的事务Spring事务将一系列操作绑定为具有原子性的操作,此篇文章讲基于Spring提供的声明式事务 MySQL的事务我们已经明白,Spring的事务是委派了ORM框架来解决相应的问题,在jdbc中,体现的就是在Mybatis框架中,体现的就是SqlSession的建立到提交 声明式事务:在方法或是实现类上加上以下注解: 其中一些常用参数: propagation:配置事务传播行为;(后面详细解读) isolation:事务隔离级别; timeout:超时时间; roolbackFor:导致事务回滚的异常类设置; readOnly:boolean,是否只读 有七种事务传播行为,用来决策当发生事务嵌套时的解决方案
Spring的事务2019-07-18鱼鱼

Elasticsearch 入门

Elasticsearch 入门(注:本篇文章基于Elasticsearch7.7.0版本,由于版本的差异性造成的内容不一致我会尽量在文中标出,但是) Elasticsearch是基于Lucene扩展的全文搜索引擎,当我们有对大数据量的处理和搜索时,全文搜索引擎是最佳的选择,同时他提供了高扩展性、高可用性、RestFul风格的API和友好的分布式部署配置,在此我们不予详述 我们日常使用的数据库索引是数据库一种编排数据(逻辑上)从而加快查询的手段,我们暂且将这种索引方式称为正排索引,他通过对待搜索字符寻址从而找到对应的数据 但是这种索引方式对于模糊匹配会出现"断档"现象(模糊符号后的片段无法走索引查找),并且对于海量数据无论在存储上还是在查找上都略显吃力,于是在Elasticsearch中引入了倒排索引来加快查询速度
Elasticsearch 入门2020-03-06鱼鱼

基于Consul的服务注册与发现

基于Consul的服务注册与发现注:文章基于Consul1.6.0版本,部分版本可能会有误差 本文中项目集成部分采用Java语言 consul官网,服务注册/发现是微服务架构中不可或缺的重要组件,起初服务都是单节点的甚至是单体服务,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问(HttpClient/RestTemplate),直到后面出现了多个节点的分布式架构,起初的解决手段是在服务端负载均衡,同时在网关层收束接口,使不同的请求转发到对应不同端口上,这也是前后分离防止前端跨域的手段之一: 图中的B服务也可以是多节点,注册在nginx上面的 要命的是,nginx并不具有服务健康检查的功能,服务调用方在调用一个服务之前是无法知悉服务是否可用的,不考虑这一点分布式的架构高可用的目标就成了一个摆设,解决手段也很简单:对超时或是状态码异常的请求进行重试尝试,请求会被分发到其他可用节点,或者采用服务注册与发现机制察觉健康的服务
基于Consul的服务注册与发现2020-01-10鱼鱼
网站地图
1
首页 博客 {{screen}} 第 {{page}} 页
博客索引
{{blog.createDate}} ◔ {{blog.timeline}} 小头像 {{blog.author}} {{tag}}
{{blog.likeCount}}{{blog.commentCount}}
分类下暂时没有文章哦!
主题分类
{{taggroup.label}} 

{{tag.value}}