自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 问答 (1)
  • 收藏
  • 关注

原创 Netty源码分析-服务启动

EventLoopGroup bossGroup = new NioEventLoopGroup(); //配置 EventLoopGroup 线程组 EventLoopGroup workerGroup = new NioEventLoopGroup(); //配置 EventLoopGroup 线程组 try { ServerBootstrap b = new ServerBootstrap(); b.gr...

2021-08-07 23:18:17 135

原创 Netty内存相关

一.合理管理堆外内存堆外内存利弊:弊:堆外内存不收JVM管理,需要手动释放,稍有不慎,会引起内存泄漏利:1.进行网络I/O或文件读写时,堆内内存需要转换为堆外内存,如直接使用堆外内存,减少内存拷贝2.可实现进程间,多JVM实例间数据共享分配堆外内存的方式:1.JAVA NIO的api:ByteBuffer buf = ByteBuffer.allocate(10*1024*1024); //10M通过 ByteBuffer 分配的堆外内存不需要手动回收,它可以被 JVM 自动回.

2021-07-17 23:56:43 486 1

原创 Netty编解码相关

1.TCP最基本的拆包/粘包问题为什么有拆包/粘包?网络通信过程中,每次可发送的数据包大小是受限制的,如MTU:传输单元大小,链路层一次最大传输数据大小,一般为1500byteMSS:最大分段大小,TCP最大报文段长度,是传输层一次发送最大数据大小滑动窗口:数据接收方设置的窗口大小TCP报文如何保证数据包按次序到达并不丢失?所有数据帧都是有编号的,TCP对多个报文段回复一次ACK如果一次传输的网络数据大小超过传输单元大小,数据会拆分为多个数据包发送如果每.

2021-07-12 00:17:52 304 1

原创 关于二进制的一些总结

1.正负数的二进制表示方法:正数:默认为int类型(4字节32位)5:00000000 00000000 00000000 00000101负数:以正值的补码形式表示 原码:一个整数,按照绝对值大小转换成的二进制数 反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码 补码:反码加1称为补码-

2021-07-10 23:36:41 185

原创 Netty基础入门

1.netty的高性能表现在哪些方面?对平常的项目开发的启发?Reactor线程模型2.netty中有哪些重要的组件,他们之间的联系?3.netty的内存池,对象池是怎么设计的?4.针对netty你有哪些印象深刻的系统调优案例?netty对Java NIO进行了高级封装(拆包、粘包,数据编解码,TCP断线重连),简化了网络应用的开发过程为什么要学习netty:1.I/O模型,线程模型,事件处理机制2.易用的API接口3.数据协议,序列化的支持I/O请...

2021-07-10 18:52:02 162

原创 八股文之-kafka

kafka能屏蔽各种平台以及协议之间的特性,实现应用程序中间的协同1.异步处理2.流量削峰3.弱一致性事务模型中,实现最大能力通知的方式实现最终一致性异步发送:并不是每次把消息直接发送到broker上,而是把消息放入一个队列,由后台线程不断从队列中取消息发送,成功会触发callback积累一定量的消息批量发送:满足任一条件就会发送batch.size :批量提交的字节大小默认16KBlinger.ms:两次发送间隔时间。groupconsumer group是可扩展的具有容错机制的

2021-06-17 20:16:54 781 1

原创 八股文之-Redis

Redis默认有16个库(0-15),可在redis.conf中修改databases 16默认使用第一个db0, 集群里只能使用第一个dbRedis的存储叫做key-value存储,字典结构,key最大长度限制是512MRedis的数据类型?String Hash Set List Zset Hyperloglog Geo Steeams1.String存储类型:INT(整数) float(单精度浮点数) String(字符串)Redis的最外层是通过hashtabl...

2021-06-15 21:28:35 300

原创 MySQL innodb引擎四大事务隔离级别

网络上总结事务隔离级别的文章五花八门,大体上都是理论性的结论,今天我们不BB,直接show code。看看到底怎么理解。mysql 默认的隔离级别是:REPEATABLE-READ一.REPEATABLE-READ打开两个会话,分别开启一个事务:以下所有跨会话的操作都按编号顺序执行。我们在会话1中更新一条数据,然后在会话2中查询,结果显示并未查到更改后的结果,再在会话1...

2019-12-19 20:23:31 828

原创 linux安装mysql

linux 安装mysql一.进入官网(https://dev.mysql.com/downloads/mysql/) 找到适配自己系统的mysql版本1.查看自己云服务器系统版本2.执行arch 查看自己系统的体系结构3.筛选出满足自己系统版本和体系结构的文件我们看到有mysql ...

2019-12-11 13:26:04 418

原创 JAVA多态基础

1.类定义:class A {public String show(D obj) {return ("A -D");}public String show(A obj) {return ("A -A");}}class B extends A {public String show(B obj) {return ("B -B");}public String sh...

2019-10-25 10:12:28 273

原创 线上问题排查

一个周末接到业务方频繁反馈订单节点流水丢失!该系统是接收各个业务方上报的订单节点流水,我做的是所有上报请求塞到一个MQ中,另外起线程池定时去消费这个MQ,一次消费10条消息做后续业务逻辑。。一:客服反映的问题:    流水丢失现象严重,远超之前丢失率二:分析日志,总结现象:    unipay 上报的包含1101节点的流水全部丢失,如果该节点流水在一次性取到的10条消息中间位置,那...

2018-12-10 22:45:38 272

原创 值得一提的Mysql查询性能提升方案

最近经历了一个查询新能提升很明显的sql语句优化针对我们的一张订单表做查询:而之前使用的sql语句为:可以看到新的sql语句性能有极明显的提升。我们先看一下该表的索引情况:Fdeal_id,Fbdeal_id,Fbuyer_id是一个联合主键,Fbdeal_id和Fbuyer_id又分别是个非唯一索引:建表语句: 接下来看一下新sql的执行计划:老s...

2018-11-29 20:16:09 313

原创 线上问题排查

之前一直时不时收到公司报警邮件:提示一个应用部署的机器CPU负载告警和线程池队列超过阈值。今天又收到了,决定好好排查处理一下。一:让运维同事帮忙保留现场dump线程和内存二:重启应用 以免影响调用方体验业务分析: 各业务方会上报订单的不同节点:下单,支付,审核,出库等,这些上报请求过来的时候我们是先塞到MQ队列里。 然后专门的模块从MQ中取出数据然后放到线程池...

2018-11-22 19:54:14 297

原创 关于阻塞与非阻塞 同步与异步的区别

一般来说IO分为两个阶段,第一阶段是等待数据阶段,第二阶段是内核空间的数据拷贝到用户空间,假设一个线程(或是进程)P准备执行一个IO操作的话它会经历以下过程:第一阶段:P发出一个IO请求,这时候会有两种情况:1:立刻返回: 非阻塞2:一直等待,P调用sleep/wait休眠或是挂起,让出CPU给别的线程/进程  阻塞第二阶段:这时内核的数据终于准备好了,那么现在用户进程想要...

2018-11-05 17:56:38 203

原创 几个常见MAP的区别

HashMap:(extends AbstractMap implements Map)数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不保证元素迭代顺序是按照插入时的顺序,key的hash值是先计算key的hashcode值,然后再进行计算,每次容量扩容会重新计算所以key的hash值,会消耗资源,要求key必须重写equ...

2018-08-04 17:15:14 2722

原创 Thread中interrupted()方法和isInterrupted()方法区别总结

interrupted()源码isInterrupted()源码interrupted()是静态方法:内部实现是调用的当前线程的isInterrupted(),并且会重置当前线程的中断状态isInterrupted()是实例方法,是调用该方法的对象所表示的那个线程的isInterrupted(),不会重置当前线程的中断状态...

2018-06-29 10:14:35 91005 33

原创 线程安全和锁优化总结

线程安全和锁优化总结线程安全各种操作共享的数据分为5类1.不可变不可变对象一定是线程安全的若共享数据是基本类型,只要是final修饰的就可保证是不可变的把对象中带有状态的变量都声明为final2.绝对线程安全大多数线程安全的类都不是绝对线程安全3.相对线程安全对一些特定顺序的连续调用,可以需要在调用端使用额外的同步手段保证调用正确性:如Vector HashTable4....

2018-05-29 23:41:48 251

原创 java内存模型与线程

java内存模型与线程1.衡量一个服务性能好坏,没秒事务处理数(TPS)是最重要的指标之一2.由于计算机的存储设备与处理器的运算速度之间有几个数量级差距,所以加入高速缓存 来作为内存与处理器之间的缓冲 高速缓存解决了处理器与内存的速度矛盾,也带来了 缓存一致性的问题 多个处理器都有自己的高速缓存,却共享一个主内存3.java内存模型: 1.主内存,工作内存:主内存主要对应java堆中...

2018-05-29 00:38:27 209

原创 java运行期优化

java运行期优化 1.虚拟机发现某个方法或代码块运行的特别频繁,会把它认为是“热点代码”,为了提升执行效率,把热点代码编译成平台相关的机器码 JIT编译器 2.即时编译器: 1.解释器和编译器 需要迅速启动和执行的时候,解释器先发挥作用。时间久了,为了执行效率,编译器发挥作用 HotSpot虚拟机2个即时编译器 Client Compiler和Server Compiler(C1...

2018-05-28 01:06:59 477

原创 java编译器优化

java编译器优化1.把java文件转变成呢过class文件的过程2.javac编译器的过程: 1.解析与填充符号表过程 2.插入式注解处理器的注解处理过程 3.分析与字节码生成过程 解析与填充符号表: 1.词法,语法分析:词法分析是将源代码的字符流转变为标记(Token)集合,标记是编译过程的最小元素:int, a, =, b, +, 1 语法分析:根据Token序列来构造抽象语...

2018-05-28 00:08:04 840

原创 虚拟机字节码执行引擎

虚拟机字节码执行引擎1.执行引擎在执行JAVA代码的时候可能有解释执行(通过解释器执行)和编译执行(通过及时编译器产生本地代码执行)两种选择2.运行时栈帧结构: 栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,是虚拟机栈的栈元素, 存储了局部变量表,操作数栈,动态链接和方法返回地址(指向了一条字节码指令的地址) 1.局部变量表:用于存放方法参数和方法内部定义的局部变量,...

2018-05-27 20:08:08 150

原创 虚拟机类加载机制

虚拟机类加载机制1.把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。java的类型加载和连接过程都是在程序运行期间完成的,java天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接实现的。2.类的生命周期:加载,验证,准备,解析,初始化,使用,卸载。 (验证,准备,解析称为连接)虚拟机规定有...

2018-05-27 16:39:05 138

原创 Class文件总结

类文件结构虚拟机提供商发布了许多可以运行在各种不同平台上的虚拟机,都可以载入和执行同一种平台无关的字节码,从而实现“一次编写,到处运行”。除JAVA外也有一大批在java虚拟机智商运行的语言:Clojure,Groovy,JRuby等虚拟机不关心Class来源于什么语言,只要复合Class文件应有的结构就能在java虚拟机中运行Class文件是一组以8位字节为基础单位的二进制流,当遇到需要占用8位...

2018-05-26 23:49:43 165

原创 虚拟机性能监控理论和操作

虚拟机性能监控与分析处理工具JDK命令行工具:jdk \bin 路径下,大多是jdk\lib\tools.jar类开的一层包装1.jps:列出正在运行的虚拟机进程,显示虚拟机执行主类函数所在类的名称,以及虚拟机进程的唯一ID如果同时启动了多个虚拟机,根基进程名称不好区分,可以通过jps显示主类的功能区分(jps -l)2.jstat:监视各种运行状态信息,没有图形界面时,时运行期定位虚...

2018-05-25 00:18:56 1013

原创 垃圾收集器总结

垃圾收集器1.判断对象已死 1.JVM不用引用计数算法,原因:无法解决对象间相互循环引用的问题 2.根搜索算法: 通过一系列名为“GC Roots”的对象做起点向下搜索,走过的路劲称为引用链 当一个对象到GC Roots没有引用链,则判定对象不可用 GC Roots:1.虚拟机栈(栈帧中本地变量表)引用的对象2.方法表中类静态属性引用的对象3.方法区...

2018-05-22 13:17:06 266 1

原创 JVM内存模型总结

jvm运行时数据区域总结:1.程序计数器:当前线程所执行的字节码的行号指示器(线程私有) 如果线程正在执行的是native方法,该计数器值为空。 该区域是唯一没有outOfMemoryError的区域。2.java虚拟机栈:描述方法执行的内存模型(线程私有) 方法执行时创建栈帧(栈帧存储着局部变量表:包括方法的入参,方法的局部变量;操作栈;动态链接;方法出口:即方法的返回地址) 方法从调用到...

2018-05-15 13:31:56 186

原创 try{},finally{}代码块执行顺序记录

2018-01-19 14:47:21 342

原创 volatile关键字小结

“观察加入volatile关键字和没有加入volatile关键字时所生成的汇编代码发现,加入volatile关键字时,会多出一个lock前缀指令”  lock前缀指令实际上相当于一个内存屏障(也成内存栅栏),内存屏障会提供3个功能:  1)它确保指令重排序时不会把其后面的指令排到内存屏障之前的位置,也不会把前面的指令排到内存屏障的后面;即在执行到内存屏障这句指令时,在它前面的操作已经全部完

2017-11-14 11:13:50 273

原创 关于二进制的一些总结

1.正负数的二进制表示方法:正数:默认为int类型(4字节32位)5:00000000 00000000 00000000 00000101负数:以正值的补码形式表示         原码:一个整数,按照绝对值大小转换成的二进制数         反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码         补码:反码加1称为补码-

2017-09-28 16:52:19 1615

转载 java多线程总结

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka        写在前面的话:此文只能说是Java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢?如果你觉得此文很简单,那推荐你看看Java并发包的的线程池(Java并发编程与技术内幕:线程池深入理解),或者看这个专栏:Java并发编

2017-06-07 10:53:44 289 1

原创 Mybatis整合Spring的配置文件样例

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beans

2017-05-27 23:25:53 226

翻译 《大型网站技术架构:核心原理与案例分析》拜读总结,第十三章——大型网站故障案例分析

1.写日志引发的故障现象:服务器发布不久出现多台服务器报警,硬盘可用空间过低,log文件迅速增加原因:开发人员将log级别设置为debug解决:程序自己的日志输出配置和第三方组件的日志输出分别配置;日志输出级别至少为warn;关闭一些输出过多error日志的第三方开源软件2.并发访问数据库引发故障现象:应用发布后,数据库load居高不下原因:频繁访问的首页,调用了s

2017-05-26 22:20:34 576

翻译 《大型网站技术架构:核心原理与案例分析》拜读总结,第十二章——秒杀系统架构设计案例分析

秒杀系统不能使用正常网站业务流程,也不能和正常网站交易公用服务器,必须部署专门的秒杀系统、技术挑战:1.对现有网站业务造成冲击:时间段,并发访问量大,如果和原有应用部署在一起,稍有不慎可导致整个网站瘫痪独立部署,2.高并发下的应用,数据库负载若按照一般的应用架构访问服务器,连接数据库,会造成极大的负载压力秒杀页面静态化,商品描述,商品参数,成交记录和评价全部写入一个静态

2017-05-26 21:48:24 360

翻译 《大型网站技术架构:核心原理与案例分析》拜读总结,第十一章——海量分布式存储系统Doris的高可用

保证高可用的手段:冗余:服务器热备,数据多份存储,灵活的失效转移系统整体分为3部分:1.应用程序服务器:存储系统的客户,对系统发起数据操作请求。2.数据存储服务器:存储数据,响应应用服务器的数据操作请求3.管理中心服务器:由2台机器组成的主-主热备的小规模集群,负责集群管理,对数据存储集群进行健康心跳检测,集群扩容,故障恢复管理,集群地址配置信息。不同故障的高可用解决方

2017-05-26 21:35:55 647

翻译 《大型网站技术架构:核心原理与案例分析》拜读总结,第十章——随需应变:维基百科高性能架构设计分析

目前:维基百科建立在LAMP上,因为是非盈利的网站,尽量使用免费软件和廉价服务器。GeoDNS:基于开源域名服务器软件BIND的增强版本LVS:基于Linux的开源负载均衡服务器Squid:基于Linux的开源反向代理服务器Lighttpd:开源的应用服务器,比Apache服务器更轻量,更快速PHP:web开发语言Memcached:无中心,高性能的开源分布式缓存系

2017-05-26 21:13:34 381

翻译 《大型网站技术架构:核心原理与案例分析》拜读总结,第九章——淘宝网架构演化案例分析

一开始用LAMP:使用开源,免费,简单的技术。(节约成本,工程师上手快,学习成本低)2004年放弃LAMP,转而使用JAVA作为开发平台,使用Oracle数据库,使用MVC框架(Webx)和ORM(Ibatis)框架,weblogic服务器。(业务发展迅速,宝贵的开发资源用在新业务开发上,而不是解决这些可用付费产品搞定的基础技术问题上)放弃EJB,引入Spring,用免费的

2017-05-26 20:59:23 316

翻译 《大型网站技术架构:核心原理与案例分析》拜读总结,第八章——固若金汤:网站的安全架构

道高一尺,魔高一丈的网站应用攻击与防御XSS和SQL注入构成网络应用攻击的最主要的手段,(70%)。此外,常用的WEB应用还包括CSRF,Session劫持等手段。XSS攻击:跨站点脚本攻击,指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。包含两种:1.反射型:攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的。2.持

2017-05-26 20:07:48 452

翻译 《大型网站技术架构:核心原理与案例分析》拜读总结,第七章——随需应变:网站的可扩展架构

网站的扩展性架构:对现有系统影响最小的情况下,系统功能可持续扩展和提升的能力。扩展性:对现有系统影响最小的情况下,系统功能可持续扩展和提升的能力。表下周乃系统基础设施稳定不需要经常改变,应用之间较少依赖,耦合。对需求变更可以敏捷响应,增加新功能时,不需要对现有系统结构进行修改。伸缩性:系统通过增加,减少服务器,提高,降低系统整体事物吞吐能力。一:构建可扩展的网站架构:核心思想是模块

2017-05-26 17:29:01 452

翻译 《大型网站技术架构:核心原理与案例分析》拜读总结,第六章——永无止境:网站的伸缩性架构

伸缩性:不需要改变网站的软硬件设计,仅通过改变不熟的服务器数量,就可以扩大或缩小网站的服务处理能力网站架构的伸缩性:一:不同功能进行物理分离实现伸缩每次分离都有更多服务器加入,使用新增服务器处理特定的功能纵向分离(分层),横向分离(业务分隔)二:单一功能通过集群规模实现伸缩使用服务器集群,相同的服务部署在多台服务器上构成集群,整体对外提供服务应用

2017-05-26 15:56:07 436

翻译 《大型网站技术架构:核心原理与案例分析》拜读总结,第五章——万无一失:网站的高可用架构

一:高可用的网站架构:主要目的:保证服务器硬件故障时,服务依然可用,数据已然能够被保存,访问。主要手段:数据和服务的冗余备份及失效转移,一旦某些服务器宕机,将服务切换到其他可用服务器上,若磁盘损坏,则从备份磁盘读取。分层模型:应用层,服务层,数据层 分别部署在不同的服务器集群上。应用层:为应对高并发访问请求,通过负载均衡设备将一组服务器组成一个集群。服务层:也通过集群的方式

2017-05-26 13:14:34 401

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除