自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(225)
  • 收藏
  • 关注

原创 堆外内存之DirectByteBuffer

堆内内存堆内内存是JVM可以直接管控的,我们平时在Java中创建的对象都处于堆内内存中,遵循JVM的内存管理机制,JVM的垃圾回收机制统一管理。堆外内存把内存对象分配在JVM的堆以外的内存,不属于JVM管控范围,分配的是系统本地的内存,直接受操作系统管理,能够在一定程度上减少垃圾回收对应用程序造成的影响。在Java中经常使用java.nio.DirectByteBuffer管理堆外内存。DirectByteBuffer中的**unsafe.allocateMemory(size)**是个一个nati

2022-04-08 15:28:05 809

转载 如何看懂火焰图

perf命令perf(performance),linux系统原生的性能分析工具,返回CPU正在执行的函数名以及调用栈。通常,执行频率是99Hz,每秒99次,如果99次都返回同一个函数名,说明CPU这一秒种都在执行同一个函数,该函数可能存在性能问题。火焰图火焰图(Flame Graph)是基于perf结果产生的SVG图片,用来展示CPU的调用栈。Y轴表示调用栈,每层是一个函数,顶层是正在执行的函数,下层是它的父函数。X轴表示抽样数,一个函数在X轴占的宽度越宽,表示被抽到的次数越多,即

2022-04-07 15:24:23 2431

原创 tomcat中catalina命名的原因

apache美国一个大学的实验室编写了初版,基于HTTP通信协议的服务器端和客户端程序,后来被很多研究者不断地添加功能,不断的对出现的bug打补丁。后来8个开发者成立一个小组,重写整个程序,命名为Apache(和 A Patchy谐音)tomcat开发者希望用一种能自己照顾自己的动物代表。作为服务器的容器支持基于Java语言编写的程序在服务器上运行,这样的程序被称为Servlet,因为它是运行在“Server”上的“Applet”。通常开发者会让tomcat与其他对Web服务器一起协同工.

2022-03-31 20:52:33 947 1

原创 java8 新特性

lambdaparameter -> expression body可选的类型声明:你不用去声明参数的类型。编译器可以从参数的值来推断它是什么类型。可选的参数周围的括号:你可以不用在括号内声明单个参数。但是对于很多参数的情况,括号是必需的。可选的大括号:如果表达式体里面只有一个语句,那么你不必用大括号括起来。可选的返回关键字:如果表达式体只有单个表达式用于值的返回,那么编译器会自动完成这一步。若要指示表达式来返回某个值,则需要使用大括号。...

2022-01-12 17:07:44 389

原创 《redis开发与运维》持久化

系列文章目录前言一、RDB触发机制优缺点二、AOFAOF追加阻塞持久化性能分析总结前言redis是纯内存操作,将所有数据存放在内存中,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。一、RDBRedis DataBase,在执行的时间间隔内将当前进程数据生成快照保存到硬盘,可以手动和自动触发。触发机制手...

2022-01-12 16:23:35 446

原创 《redis开发与运维》1-3章

目录介绍一、常用命令二、事务三、客户端介绍redis将所有数据存放在内存中(纯内存访问,100ns),还可以将内存的数据利用快照和日志的形式保存到硬盘上。官方给出的读写性能是10w/s,使用C语言实现的单线程架构,预防了多线程可能产生的竞争问题(避免线程切换和竞态产生的消耗)。使用I/O多路复用,非阻塞I/O。使用场景:缓存,提供键过期功能、内存溢出淘汰策略;排行榜,提供列表和有序集合;计数系统,O(1)的计数功能;社交网络;消息队列,提供简单的发布订阅和阻塞队列功能。不

2022-01-12 15:25:25 778

原创 Collector.toMap value不能null

Collector.toMap()底层用到了Map.merge方法Map.merge方法不允许value为null推断:Collectors.toMap可以使用ConcurrentHashMap为最终收集结构,而ConcurrentHashMap不允许Value为Null避免产生二义性和CAS的ABA问题,所以Map.merge为了兼容ConcurrentHashMap等多线程环境下使用的数据结构不允许value为null。ConcurrentHashMap key和value不能null.

2022-01-06 11:23:48 1399

转载 Random、ThreadLocalRandom、UUID

Random & ThreadLocalRandom生成随机数,ThreadLocalRandom相比Random减少了多线程的资源竞争。Random类使用CAS,在多线程下多个线程竞争内部唯一的原子性种子变量而导致大量线程自旋重试。Random在多线程下多个线程可能都拿同一个老的种子去计算新的种子,这会导致多个线程产生的新种子是一样的,由于随机数算法是固定的,所以会导致多个线程产生相同的随机值。ThreadLocal的出现就是为了解决多线程访问一个变量时候需要进行同步的问题,让

2021-07-12 17:40:33 144

原创 RSA加密算法及java使用

RSA算法原理RSA算法随机两个质数p,q。n = p * q,n的值就是模(modulu),n的二进制位数就是秘钥长度,一般是1024/2048。指数e(exponent)在(1,(p-1)(q-1))之间,随机一个整数,且与(p-1)(q-1)互质,一般是65537。计算e对于(p-1)(q-1)的模反元素d,即整数d使得(e * d) mod (p-1)(q-1) = 1公钥就是(n, e),私钥就是(n, d)。JAVA实现// 获得公私钥对,(modulus, exponent

2021-06-17 18:24:28 472

原创 double free/use after free/memory leak

一、Double Free双重释放,程序对同一个指针指向的内存重复释放free()了两次。利用原理Linux下堆分配器ptmalloc2主要由两个结构管理堆内存,一种是堆块头部形成的隐式链表(chunk结构内的隐式指向),另一种是管理空闲堆块的显式链表(Glibc中的bins数据结构)。free函数在释放堆块时,会通过隐式链表判断相邻前、后堆块是否为空闲堆块;如果堆块为空闲就会进行合并,然后利用Unlink机制将该空闲堆块从Unsorted bin中取下。unlink就是把一个双向链表中的空

2020-12-06 22:22:31 853

原创 C分配内存malloc/realloc/calloc

malloc()函数原型:linux下:void *malloc(size_t size);,windows:void *malloc(unsigned int num_bytes);size单位是字节,表示申请的空间大小。返回void *,分配成功则返回未确定类型的指针(可强制类型转换),指向该内存首地址;分配失败则返回NULL。C语言中动态分配内存malloc(),在linux中的实现是,malloc()函数调用库函数sbrk(),sbrk()的实质是调用brk()函数。brk()是

2020-12-06 21:17:16 200

转载 内存分布和内存管理

堆内存管理机制glibc是Linux系统的c运行库,最底层的api,几乎其他任何运行库都会依赖于glibc。一般是预先编译好,以二进制代码形式存在linux系统中。不同平台的堆内存管理机制不同,glibc使用的是ptmalloc2的实现原理。即glibc中的内存管理函数调用使用的是ptmalloc2的实现原理。平台堆内存分配机制glibcptmalloc2GoogletcmallocSolaris(UNIX衍生)libumemfree BSD(类

2020-12-04 18:52:57 288

转载 负载均衡算法

一、负载均衡算法轮询法将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。随机法通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。源地址哈希法源地址哈希的思想是根据客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结

2020-09-24 20:40:57 114

原创 面试-安全相关知识点

https中的中间人攻击SSL协议位于TCP/IP协议与各种应用协议之间,是一种国际标准的加密及身份认证通信协议,为TCP提供一个可靠的端到端的安全服务,为两个通讯个体之间提供保密性和完整性。SSL层所处位置如下:SSL协议使用通信双方的客户证书以及CA根证书。允许客户/服务器应用以一种不能被偷听的方式通信,在通信双方建立起了一条安全的、可信任的通信通道。SSL协议既用到了非对称加密技术又用到了对称加密技术。对称加密技术虽然比公钥加密技术的速度快,可是非对称加密技术提供的更好的身份认证技术。SS

2020-09-21 23:22:42 151

原创 签约谈什么

晋升制度,调薪制度签约主体,和当地的政策有关加班情况,平均加班多少

2020-09-21 20:51:33 111

原创 数组中只出现一次的数

一个只出现一次的数,其他出现两次全部的数异或,最后的数就是要找的数class Solution { public int singleNumber(int[] nums) { int res = nums[0]; for(int i=1;i<nums.length; i++){ res ^= nums[i]; } return res; }}两个只出现一次的数,其他出现两次假设

2020-09-18 22:08:38 89

原创 《剑指offer》—— 37 数字在升序数组中出现的次数

题目统计一个数字在升序数组中出现的次数思路二分法找目标数字的最右边界。代码public class Solution { public int GetNumberOfK(int [] nums , int target) { return divide(nums, target) - divide(nums, target-1); } //返回目标值右边一个的下标 public int divide(int[] nums, int target){

2020-09-17 21:25:24 74

原创 剑指offer+leetcode需要复习的题

剑指offer4根据前序中序序列重建二叉树(分治,递归)重建二叉树17判断是否是树的子结构(递归)判断是否是树的子结构19顺时针打印矩阵(边界)顺时针打印矩阵21是否是栈的弹出序列先把栈添加成,序列的第一个元素在栈顶的状态,然后弹出,匹配就弹出,不匹配就继续压栈。最后看空不空。是否是栈的弹出序列22从上往下打印二叉树(队列)2从上往下打印二叉树23判断数组是否是二叉搜索树的后序遍历序列(与4类似)找到左右子树分界线,左边的小于根节点,右

2020-09-17 12:23:56 96

原创 每天一个小知识

今天也是被自己菜哭的一天while(j<popped.length && stack.peek() == popped[j] && !stack.isEmpty() ){ stack.pop(); j++;}while里的顺序,必须要先判断j和stack的条件,才能执行stack.peek() == poped[j],否则会报EmptyStackException。while(j<popped.length && !s

2020-09-15 21:42:59 123

原创 秋招面试

搜狐一面 9.4go和java比较,优点。go库还不完善,怎么办。撕代码:判断平衡二叉树JVM里面的运行时数据区?详细讲虚拟机栈,里面放什么?栈里面的动态链接是干什么的?是个指针,指向运行时常量池操作数栈是干什么的?元空间是干什么的?方法区是抽象含义,元空间是1.8之后,hotspot对方法区的实现。synchronized是怎么实现的?偏向锁、轻量级锁、重量级锁具体怎么实现。volatile怎么实现的?做了哪些限制来实现功能的?除了内存屏障

2020-09-15 13:40:26 269

转载 2020届秋招面试题总结——JAVA基础篇

【转载】2020届秋招面试题总结——JAVA基础篇2020届秋招面试题总结——JAVA基础篇1、JAVA中的几种数据类型是什么,各自占用多少字节。Java语言提供了八种基本数据类型。六种数据类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。byte:1字节,表示范围是-128~127之间。short:2字节,表示范围是-32768~32767之间。int:4字节,表示范围是负的2的31次方到正的2的31次方减1。long:8字节,表示范围为负的2的63次方到正的2的63次方减1

2020-09-14 17:51:38 192

转载 2020届秋招面试题总结——网络篇

【转载】2020届秋招面试题总结——网络篇2020届秋招面试题总结——网络篇1、http1.0和http1.1的区别。主要是如下的8点:可拓展性。缓存。带宽优化,带来了分块传输。长连接,HTTP1.1支持长连接(默认开启Connect: keep-alive)和请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。消息传递。Host头域。错误提示。内容协商。2、TCP三次握手和四次挥手的流程,为什么断开连接要四次,如果握手只有两次,

2020-09-14 10:54:14 242 1

转载 web容器、服务器、中间件

Tomcat 是一个小型的轻量级应用服务器,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;一般认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML 页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和..

2020-09-14 10:30:05 226

原创 Redis基础--数据类型

简介Redis (Remote Dictionary Server远程字典服务)是一个开源的,内存中的key-value数据结构存储系统,使用C语言编写。它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。支持网络,基于内存亦可持久化,提供多种语言API

2020-09-13 20:55:51 99

原创 Spring boot/Spring/SpringMVC

Spring 是一个“引擎”;Spring MVC 是基于Spring的一个 MVC 框架;Spring MVC提供了一种轻度耦合的方式来开发web应用。它是Spring的一个模块,是一个web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。解决的问题领域是网站应用程序或者服务开发——URL路由、Session、模板引擎、静态Web资源等等。Spring Boot 是基于Spring4的条件注册的一套快速开发整合包。S

2020-09-13 19:38:27 103

转载 微服务

【转载】微服务(Microservice)是什么?为什么会出现微服务?什么是微服务从思路和理念上来讲,微服务就是要倡导大家尽量将功能进行拆分,将服务粒度做小,使之可以独立承担对外服务的职责,沿着这个思路开发和交付的软件服务实体就叫作“微服务”。为什么出现微服务实际上,并非原来“大一统”(Monolith)的服务化实践不能满足要求,也不是不好,只是,它有自己存在的合理场景。对于 Monolith 服务来说,如果团队不大,软件复杂度不高,那么,使用 Monolith 的形式进行服务化治理是比较合适的,

2020-09-12 23:02:23 56

原创 死锁的预防、避免、检测、恢复

一 概念一组进程中每个进程都等待此组进程中其他进程所占有的,因而永远无法得到的资源,这种现象称为进程死锁。产生的条件资源独占:一个资源在同一时刻只能被分配给一个进程。不可剥夺:资源申请者不能强行的从资源占有者手中夺取资源。保持申请:进程在占有部分资源后还可以申请新的资源。循环等待:存在一个进程等待队列。上述条件同时满足时,死锁才会发生。根本原因是系统提供的资源个数小于并发进程所需的该类资源。可分为竞争资源产生的死锁、进程通信产生的死锁、其他原因等。二 死锁的处理不让死锁发生:死锁

2020-09-12 22:40:34 376

转载 Mysql中的表锁、行锁

Innodb行锁InnoDB行锁是通过索引上的索引项来实现的,这一点MySQL与Oracle不同,后者是通过在数据中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味者:只有通过索引条件检索数据,InnoDB才会使用行级锁,否则,InnoDB将使用表锁。间隙锁当用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Ne

2020-09-07 21:47:05 98

转载 String的trim()和substring()

trim() public String trim() { int len = value.length; int st = 0; char[] val = value; /* avoid getfield opcode */ while ((st < len) && (val[st] <= ' ')) { st++; } while ((st &lt

2020-09-07 20:18:52 756

转载 分布式session的一致性

存在的一致性问题客户端发送一个请求,经过负载均衡后该请求会被分配到服务器中的其中一个,由于不同服务器含有不同的web服务器(例如Tomcat),不同的web服务器中并不能发现之前web服务器保存的session信息,就会再次生成一个JSESSIONID,之前的状态就会丢失。解决方案...

2020-09-07 12:20:25 179

转载 OOM内存溢出的原因和解决方法

一 堆溢出java.lang.OutOfMemoryError: ......java heap space.....原因:要么代码有问题,要么访问量太多并且每个访问的时间太长或者数据太多,导致数据释放不掉,因为垃圾回收器是要找到那些是垃圾才能回收,这里它不会认为这些东西是垃圾,自然不会去回收。在这个溢出之前,可能系统会提前先报错关键字为 java.lang.OutOfMemoryError:GC over head limit exceeded。这种情况是当系统处于高频的GC状态,而且回收的效果依然

2020-09-07 10:55:40 1979 1

转载 TCP半连接队列和全连接队列

(图片来源http://www.cnxct.com/something-about-phpfpm-s-backlog/)syns queue(半连接队列);accept queue(全连接队列)三次握手中,在第一步server收到client的syn后,把相关信息放到半连接队列中,同时回复syn+ack给client(第二步);比如syn floods 攻击就是针对半连接队列的,攻击方不停地建连接,但是建连接的时候只做第一步,第二步中攻击方收到server的syn+ack后故意扔掉什么也不做,导致s.

2020-09-06 22:52:14 142

原创 数据库连接池

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个。优点释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。资源重用,避免了频繁的创建、释放连接引起的大量性能开销,能明显提高对数据库操作的性能。对于业务请求而言,直接利用创建好的连接,避免了数据库连接初始化和释放的时间开销,缩短了系统响应时间。工作机制数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数

2020-09-06 21:19:38 144

转载 Java的自动拆箱和装箱

【转载】详解Java的自动装箱与拆箱(Autoboxing and unboxing)什么是拆箱装箱拆箱就是自动将包装器类型转换为基本数据类型。(Integer——> int)装箱就是自动将基本数据类型转换为包装器类型。(int ——> Integer)这个过程是自动执行的。public class Main { public static void main(String[] args) { //自动装箱,系统自动执行:Integer emp= Integer.v

2020-09-06 16:30:25 104

原创 分布式缓存入门

什么数据适合缓存经过复杂计算得出的数据。频繁访问的热点数据。为了减轻数据库的访问次数和压力。分布式缓存分布式缓存是为了解决数据库服务器和Web服务器之间的瓶颈,如果一个网站流量很大,每次数据库查询耗费的时间将不容乐观。对于更新速度不是很快的站点,可以采用静态化来避免过多的数据查询,可使用Freemaker或Velocity来实现页面静态化。对于更新数据以秒级的站点,静态化不太理想,可通过分布式缓存系统来解决,如Redis、MemCache、SSDB等(都是K-V存储)。用户群体广泛就必然存

2020-09-05 10:44:31 259

原创 缓存穿透、缓存击穿、缓存雪崩

什么数据适合缓存缓存穿透缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求。这时的用户很可能是攻击者,攻击会导致数据库压力过大。假如客户端每秒发送5000个请求,其中4000个为黑客的恶意攻击,即在数据库中也查不到。举个例子,用户id为正数,黑客构造的用户id为负数,如果黑客每秒一直发送这4000个请求,缓存就不起作用,数据库也很快被打死。解决方案:1.接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;2.从缓存取不到的数据,在数据库中也没有取到,

2020-09-04 21:40:36 96

原创 Docker入门

Docker由镜像、容器、仓库组成镜像文件与ZIP压缩包类似,将一系列文件按照一定的格式制作成单一的文件,像照镜子一样。可以在很短的时间还原出一个完整的系统来(iso,gho都是镜像)。例如镜像网站就是将一个完全相同的站点放到几个服务器,分别有自己的URL,在这些服务器上互为镜像网站。它和主站并没有太大差别,或者可算是为主站作的后备措施。Docker容器可以简单的季节为提供了系统硬件环境,是真正跑项目程序、消耗机器资源、提供服务的东西。例如,我们可以暂时把容器看作一个 Linux 的电脑,..

2020-09-04 16:54:34 88

原创 邮储软开面试

4.24先进候考间,验身份信息(身份证学生证),调设备光线面试:6个面试官,2个候选人问题:spring AOP的实现是使用了java的什么机制(Spring AOP的实现使用的是Java语言本身的特性,即Java Proxy代理类、拦截器技术实现)JDK动态代理和CGLIB动态代理...

2020-09-04 16:54:04 2431

原创 华为笔试

题目一明日之星,投票输入连续的姓名(逗号隔开,是一条输入)统计名字出现最多的,如果有一样多的就按名字排序题目二匹配字符串、待匹配字符串XXX[addr=0x…,mask=0x…,val=0x…]匹配规则:‘[’前面的完全一样,其他匹配规则,然后输出addr后面的地址,mask后面的掩码,val后面的值import java.util.Scanner;import java....

2020-09-04 16:53:21 699

原创 蚂蚁金服面经

4.134.14项目Spring javabean实现类型Spring AOPJava类加载双亲委派微博加关注场景(一百万关注)借贷场景(重复借贷,避免)left join/inner join一百万条数据读入到数据库数据库乐观锁悲观锁(数据库层面怎么操作)...

2020-09-04 16:52:48 206

空空如也

空空如也

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

TA关注的人

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