![](https://img-blog.csdnimg.cn/20190506224028833.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java Web知识总结
Java Web成长之路,包括Java基础(集合类、多线程、I/O、JVM、JMM、JMX)、Web开发框架(SpringMVC、Spring、Mybatis)、网络(HTTP)、容器(Tomcat)、数据库(Mysql、Redis)、分布式(消息、缓存等)
程序员Aike
Just Keep Coding
-- https://github.com/codeaike/
展开
-
ZooKeeper-分布式小文件存储系统--构建精致的应用
初始需求元数据的存储(小数据)分布式、高可用读多写少、高性能读有序访问设计单机层面节点数据结构的选取树结构,每个节点是一个ZNode数据保存在内存中优点:高效读写为什么ZK不擅长存储大的数据?单机高效写磁盘高效写磁盘的两种方式:顺序写磁盘预分配磁盘空间ZK每次写磁盘,先申请固定大小的磁盘空间,之后再写磁盘,大大提升写入性能。顺序写数据每次写入操作,...原创 2019-12-16 20:37:29 · 754 阅读 · 0 评论 -
Java Web知识总结汇总
Java Web基础篇Java Web基础篇之Java多线程Java Web基础篇之Java集合类Java Web基础篇之Java I/OJava Web基础篇之Java基础Java Web基础篇之漫谈Java锁Java Web基础篇之浅谈JVMJava Web基础篇之浅谈JMMJava Web基础篇之网络基础Java Web框架篇Java Web框架篇之SpringMVC...原创 2019-06-11 23:20:10 · 5369 阅读 · 0 评论 -
Java Web架构篇之分布式框架(微服务&SpringCloud&Dubbo)简介
SOA与微服务架构参考:SOA架构和微服务架构的区别微服务架构 vs. SOA架构SOA 服务架构之简介及理解领域驱动架构微服务系统的设计自然离不开DDD(Domain-Driven Design,领域驱动设计),它由Eric Evans提出,是一种全新的系统设计和建模方法。DDD事实上是针对面向对象分析和设计的一个扩展和延伸,对技术架构进行了分层规划,同时对每个类进行了策略和类型...原创 2019-06-17 17:09:14 · 2403 阅读 · 0 评论 -
Java Web架构篇之API网关
什么是API网关API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访...原创 2019-06-17 10:14:08 · 21655 阅读 · 0 评论 -
Java Web架构篇之浅谈大型网站分布式架构
大型网站技术架构概述图片摘自:大型网站技术架构:摘要与读书笔记更多:《大型网站技术架构》——第一章 大型网站架构演化架构模式分层:横向切分 – 应用层、服务层、数据层分割:纵向切分 – 业务切分分布式: 将不同模块部署在不同的服务器上,通过远程调用协同工作。但是分布式也带来一些问题,分布式存储、分布式事务、分布式锁等集群:集群部署提高吞吐量、可用性,涉及负载均衡、HA等技术...原创 2019-06-16 23:12:24 · 1332 阅读 · 0 评论 -
Java Web容器篇之Tomcat & Nginx
Java Web系列文章汇总贴: Java Web知识总结汇总TomcatTomcat的顶层架构Tomcat的两个核心组件:Connector & Container。多个Connector和一个Container就形成了Service,而Service包括整个Tomcat的生命周期由Server控制。Connector负责接受请求,Container负责处理这些请求,Ser...原创 2019-06-15 18:18:27 · 1846 阅读 · 0 评论 -
Java Web分布式篇之常见问题(ID/幂等性/Session/锁)探讨及解决方案
Java Web系列文章汇总贴: Java Web知识总结汇总分布式ID常见的分布式ID的设计方案:1、数据库自增长序列或字段(缺点:可能有单点故障或性能问题)2、UUID(缺点:无法保证递增,传输量大,存储空间大,查询效率低)3、UUID->INT64,添加时间戳,保证有序4、Redis生成,可以用Redis的原子操作 INCR和INCRBY来实现5、Twitter的sn...原创 2019-06-15 16:28:26 · 781 阅读 · 0 评论 -
Java Web分布式篇之分布式事务
Java Web系列文章汇总贴: Java Web知识总结汇总分布式事务基本理论基本概念通常把一个数据库内部的事务处理,如对多个表的操作,作为本地事务看待。数据库的事务处理对象是本地事务,而分布式事务处理的对象是全局事务。 所谓全局事务,是指分布式事务处理环境中,多个数据库可能需要共同完成一个工作,这个工作即是一个全局事务,例如,一个事务中可能更新几个不同的数据库(可以是不同的应用对应的数...原创 2019-06-15 13:02:40 · 1014 阅读 · 0 评论 -
Java Web分布式篇之ZooKeeper
Java Web系列文章汇总贴: Java Web知识总结汇总分布式系统的经典理论CAPC (Consistency 一致性):对某个指定的客户端来说,读操作能返回最新的写操作。对于数据分布在不同节点上的数据来说,如果在某个节点更新了数据,那么在其他节点如果都能读取到这个最新的数据,那么就称为强一致,如果有某个节点没有读取到,那就是分布式不一致。A (Availability 可用性...原创 2019-06-14 16:06:39 · 1178 阅读 · 0 评论 -
Java Web数据库篇之Redis特性
Redis持久化机制数据持久化方式Redis支持两种数据持久化方式:RDB方式和AOF方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上,后者则是在每次执行写命令之后将命令记录下来。两种持久化方式可以单独使用,但是通常会将两者结合使用。RDB方式RDB方式的持久化是通过快照的方式完成的。当符合某种规则时,会将内存中的数据全量生成一份副本存储到硬盘上,这个过程称作”快照”,Redis...原创 2019-06-11 22:52:25 · 3065 阅读 · 0 评论 -
Java Web数据库篇之MySQL特性
MySQL ExplainEXPLAIN 命令的输出内容大致如下:mysql> explain select * from user_info where id = 2\G*************************** 1. row *************************** id: 1 select_type: SIMPLE ...原创 2019-06-10 20:28:15 · 1655 阅读 · 0 评论 -
Java Web数据库篇之MySQL索引
MySQL索引索引概述优缺点优势:可以快速检索,减少I/O次数,加快检索速度;根据索引分组和排序,可以加快分组和排序;劣势:索引本身也是表,因此会占用存储空间,一般来说,索引表占用的空间的数据表的1.5倍;索引表的维护和创建需要时间成本,这个成本随着数据量增大而增大;构建索引会降低数据表的修改操作(删除,添加,修改)的效率,因为在修改数据表的同时还需要修改索引表;索引分类常见的索引类型...原创 2019-06-10 17:19:06 · 1185 阅读 · 0 评论 -
Java Web数据库篇之MySQL概述
MySQL概述MySQL简介1、MySQL是当前最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(Relational DataBase Management System,关系数据库管理系统)软件。2、关系数据库的优势在于,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。3、MySQL采用的SQL是访问数据库的最常...原创 2019-06-10 14:57:11 · 1429 阅读 · 0 评论 -
Java Web框架篇之MyBatis
Mybatis简介是什么?Mybatis是一款优秀的持久层框架,支持定制化SQL、存储过程以及高级映射。Mybatis消除了几乎所有的JDBC代码、手工设置参数以及获取结果集。Mybatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Ordinary Java Objects,普通的Java对象)映射成数据库中的记录。为什么?ORM(Obje...原创 2019-06-05 18:04:16 · 634 阅读 · 0 评论 -
Java Web框架篇之Spring
为什么要有Spring(IoC)Web发展的几个阶段(1)初级阶段:使用Model1(JSP+JavaBean)/Model2(Jsp+Servlet+JavaBean)/三层模型(表示层(JSP/Servlet)+业务逻辑层+持久化层)进行开发;(2)中级阶段:使用EJB进行分布式应用开发,忍受重量级框架带来的种种麻烦;(3)高级阶段:使用Spring春天带给我们的美好,但是还要忍受很...原创 2019-06-04 17:41:31 · 69167 阅读 · 2 评论 -
Java Web框架篇之SpringMVC
为什么要有SpringMVCWebMVC架构及缺陷MVC各部分实现技术model:应用的业务逻辑(如:数据库的操作),通过JavaBean实现(hibernate、mybatis、ibatis)view:视图层,用于与用户的交互,主要由jsp页面产生。(jsp、FreeMarker、tails、taglib、EL、Velocity )controller:处理过程控制,一般是一个...原创 2019-06-03 20:23:19 · 1404 阅读 · 0 评论 -
Java Web基础篇之网络基础
三次握手与四次挥手为什么建立连接协议是三次握手,而关闭连接却是四次握手这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可...原创 2019-06-03 17:31:34 · 1000 阅读 · 0 评论 -
Java Web基础篇之浅谈JMM
内存区域-共享内存主内存 —— 即main memory。在java中,实例域、静态域和数组元素是线程之间共享的数据,它们存储在主内存中。本地内存 —— 即local memory。 局部变量,方法定义参数 和 异常处理器参数是不会在线程之间共享的,它们存储在线程的本地内存中。指令重排序编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。...原创 2019-06-03 16:12:07 · 270 阅读 · 0 评论 -
Java Web基础篇之浅谈JVM
JVM概述JVM与JDK、JREJDK(Java Develop Kit):Java开发工具包,包括JRE,Java工具和Java基础类库JRE(Java Runtime Environment):Java运行环境,包括JVM标准实现和Java核心类库JVM(Java Virtual Machine):整个java实现跨平台的最核心的部分,能够运行以Java语言写的程序。JVM-J...原创 2019-06-03 11:54:13 · 705 阅读 · 0 评论 -
Java Web数据库篇之Redis概述
redis线程模型(图摘自石杉码农-视频课程)redis性能高的原因1)纯内存操作2)核心是基于非阻塞的IO多路复用机制3)单线程反而避免了多线程的频繁上下文切换问题redis支持的数据类型及底层实现数据类型:string,set,sorted set,hash,底层实现:待补充redis过期策略(过期后redis怎么处理)定期删除(定期删除一些过期的key)+惰性删除(...原创 2019-06-05 08:30:53 · 364 阅读 · 0 评论 -
Java Web分布式篇之Elasticsearch原理简介
ES分布式架构原理架构图(图文摘自石杉码农-免费视频课程)原理基本介绍es中存储数据的基本单位是索引,比如说你现在要在es中存储一些订单数据,你就应该在es中创建一个索引,order_idx,所有的订单数据就都写到这个索引里面去,一个索引差不多就是相当于是mysql里的一张表。index -> type -> mapping -> document -> fie...原创 2019-05-25 22:32:17 · 1169 阅读 · 6 评论 -
Java Web基础篇之Java基础
1、Java多线程 & 集合类 & I/OJava Web基础篇之Java多线程Java Web基础篇之Java集合类Java Web基础篇之Java I/O说明:以上三篇文章中部分内容整理没有详尽,深入理解请仔细阅读其中的参考文章。2、序列化与反序列化2.1、定义序列化:把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。传递或者保存对象时,保证对象的...原创 2019-05-09 17:55:48 · 659 阅读 · 0 评论 -
Java Web基础篇之漫谈Java锁
Java锁及实现原理1、Java中的锁分类乐观锁 & 悲观锁悲观锁认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为修改。因此对于同一个数据的并发操作,悲观锁采取加锁的形式。悲观的认为,不加锁的并发操作一定会出问题。乐观锁则认为对于同一个数据的并发操作,是不会发生修改的。在更新数据的时候,会采用尝试更新,不断重新的方式更新数据。乐观的认为,不加锁的并发操作是...原创 2019-05-10 16:21:27 · 514 阅读 · 0 评论 -
Java Web数据库篇之漫谈MySQL锁
1、锁分类1.1、悲观锁释义就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。如何应用需要使用数据库的锁机制,如行锁中的共享锁(S锁)、互斥锁(X锁),还有意向锁(IS锁、IX锁)select * from ...原创 2019-05-11 17:32:23 · 1048 阅读 · 0 评论 -
Java Web分布式篇之关于MQ的一些思考
MQ作用解耦异步削峰MQ缺点系统可用性降低(MQ的故障)系统复杂性变高(服务与MQ的通讯问题)一致性问题(返回用户成功,后面消息没有全部处理成功)MQ对比相同点:高可用,消息不丢。ActiveMQ:单机吞吐量 每秒万级,偶尔丢消息,社区不活跃。RabbitMQ:吞吐量万级,管理界面很好,低时延,社区活跃,基于erLang开发,不易维护。适合中小型公司。Rocke...原创 2019-05-24 11:49:39 · 341 阅读 · 0 评论 -
Java Web基础篇之Java多线程
1、多线程与进程1.1、是什么?线程有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元,进程与线程区别如下:一个进程至少有一个线程.。1.2、扩展:进程与线程区别,线程的划分尺度小于进程,使得多线程程序的并发性高。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。线程在执行过程中与进程还是有区别的。每...原创 2019-05-08 13:18:06 · 5489 阅读 · 0 评论 -
Java Web基础篇之Java集合类
1、集合总体框架摘自:Java 集合系列01之 总体框架2、ArrayList与LinkedList区别大致区别:ArrayList是实现了基于动态数组的数据结构(初始容量为0,第一次添加元素时初始为10,扩容时采用Arrays.copyOf(),空间不足时扩容为之前容量的1.5倍),LinkedList是基于双向链表结构(不考虑扩容等问题,直接添加元素即可)。对于随机访问的ge...原创 2019-05-08 16:20:49 · 901 阅读 · 0 评论 -
Java Web基础篇之Java I/O
1、I/O基础参考:Java I/O基础之I/O模型分类&I/O多路复用技术几种I/O编程实践2、多路复用I/Oselect、poll:在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述...原创 2019-05-08 17:46:00 · 471 阅读 · 0 评论 -
Java Web问题杂谈
如何构建springboot服务:1、使用idea spring构建项目2、构建不同的profile test pre prd等3、使用mybatis代码生成器4、本地构建代码后 上传jar包到maven私服的配置5、引用本地的jar包 xxx system6、junit测试代码编写 引用少、粒度小、明确的输出(assert判断)7、@Slf4j、logback日志框架8、把依赖的...原创 2019-09-24 17:06:45 · 330 阅读 · 0 评论 -
文件上传或消息推送方案探讨
场景一大批文件需要上传到文件服务器,目前已经有文件表T_FILE里面存储了文件路径等信息。实现方案一文件表T_FILE新增一字段UPLOADSTATUS标识回单是否已经成功上传。每天0点定时任务,上传前一天新收到的文件和之前上传失败的文件到影像系统中。对上传失败的文件,进行重试操作,每次重试间隔加一个周期(如10min)。优点:不需要额外的表支持缺点:耦合文件表T_FILE严重;任务一...原创 2019-09-24 17:32:31 · 378 阅读 · 0 评论