- 博客(24)
- 资源 (1)
- 收藏
- 关注

原创 jvm类加载机制探讨
一、类加载流程jvm中类加载流程分为5个部分:加载loading,验证Verification,准备preparation,解析resolution,初始化initialization。1、加载阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.Class 对象, 作为方法区这个类的各种数据的入口。可从class文件、Zip报(jar\war等)、运行时计算生成(动态代理)、JSP转换成的对应class文件等。主要完成三件事:1)通过一个类的全限定名来获取定义此类的二进制字节流;2)
2020-07-13 16:22:27
1880

转载 关于内存溢出的原因分析及解决方案探讨
内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。 引起内存溢出的原因有很多种,常见的有以下几种: 1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据; 2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产生过多重复的对象实体; 4.使用的第三方软件中的BUG; 5.启动
2017-12-01 09:36:37
18351
转载 平台化服务探索(三)-隔离与交互策略模型
模型回顾之前我们提到租户(Tenant)时说它是数据隔离的单位,不同租户间的数据不能共享: 账号(Account)隶属于租户,即便是同一个自然人在不同租户间也会有各自的账号 应用(App)隶属于租户,权限体系既可以挂载到应用也可以到租户,但租户间权限不能互通 但这样的设定会导致无法实现需要租户间交互的场景,接下来我们就来讨论如何在满足租户数据隔离这个大原则下实现我们的需求。租户账号关联有应用A1隶属于租户T1,应用A2隶属于租户T2,现希望这两个应用实现单点登录。..
2022-01-26 15:13:06
2017
转载 平台化服务探索(二)-权限控制设计
基本概念常见的权限模型有: ACL(Access-control list):为简单的权限控制场景设计的模型,多见于文件系统的权限设置,详见:https://en.wikipedia.org/wiki/Access-control_list RBAC(Role-based access control):基于角色的访问控制模型,引入了角色解耦权限与用户的关系,实现职责分离。这是Web应用系统最主流的基础权限模型,详见:https://en.wikipedia.org/wiki/Rol..
2022-01-26 15:00:16
2080
转载 平台化服务探索(一)-用户认证模型设计
基本概念身份识别与访问管理(IAM,Identity and Access Management)包含了四个重要概念: 认证(identification):确认访问者的身份,可通过用户名+密码, 手机号+验证码等方式,常见于登录操作 授权(authorization): 为访问者委派权限并返回凭证,常见于Token形式 鉴权(authentication): 根据访问者凭证确定访问者身份,常见于基于请求Token找到对应的账号 权限控制(permission con
2022-01-26 14:28:13
2309
原创 JVM指令手册概述
栈和局部变量操作将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈iconst_2 将int类型常量2压入栈iconst_3 将int类型常量3压入栈iconst_4 将int类型常量4压入栈iconst_5 将int类型常量5压入栈lconst_0 将long类型常量0压入栈lconst_1 将long类型常量1压
2022-01-24 17:52:33
1819
转载 线上故障排查
前言线上定位问题时,主要靠监控和日志。一旦超出监控的范围,则排查思路很重要,按照流程化的思路来定位问题,能够让我们在定位问题时从容、淡定,快速的定位到线上的问题。线上问题定位思维导图一 服务器层面1.1 磁盘1.1.1 问题现象当磁盘容量不足的时候,应用时常会抛出如下的异常信息:java.io.IOException: 磁盘空间不足或是类似如下告警信息:1.1.2 排查思路1.1.2.1 利用 df 查询磁盘状态利用以下指令获取磁盘状态:df -h结果是:可知
2021-05-31 18:14:36
345
原创 Centos7上安装docker
1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。通过 uname -r 命令查看你当前的内核版本 $ uname -r2、使用 root 权限登录 Centos。确保 yum 包更新到最新。$ sudo yum update3、卸载旧版本(如果安装过旧版本的话)$ sudo yum remove docker docker-common docker-selinux docker-engine
2021-02-24 15:40:05
1798
原创 单点登录探讨
一、登录机制 上图是web应用的请求流程图,其中http请求是无状态协议,此时用户是能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求;要鉴别浏览器请求,必须清楚浏览器请求状态。既然http协议无状态,那就让服务器和浏览器共同维护一个状态吧!这就是会话机制。1、会话机制浏览器第一次请求服务器,服务器创建一个会话,并将会话的id作为响应的一部分发送给浏览器,浏览器存储会话id,并在后续第二次和第三次请求中带上会话i
2021-02-03 11:05:11
217
原创 MySQL如何定位慢SQL
1、查询是否开启了慢查询mysql> show variables like ‘%slow%’;±--------------------------±-------------------------------+| Variable_name | Value |±--------------------------±-------------------------------+| log_slow_admin_s
2021-01-15 17:38:04
2066
1
原创 MySQL中explain作用探讨
EXPLAIN命令是查看查询优化器如何决定执行查询的主要方法。要使用EXPLAIN,只需要在查询中的select关键字之前加上EXPLAIN这个标记,这个标记会使其返回关于在执行计划中的每一步的信息,而不是执行这个查询语句。如下:EXPLAIN信息各列分析:1、id列(1)id 相同执行顺序由上到下...
2020-07-10 17:43:53
1939
转载 Java对象不再使用的时候为什么要设置为null
前言许多Java开发者都曾听说过“不使用的对象应手动赋值为null“这句话,而且好多开发者一直信奉着这句话;问其原因,大都是回答“有利于GC更早回收内存,减少内存占用”,但再往深入问就回答不出来了。鉴于网上有太多关于此问题的误导,本文将通过实例,深入JVM剖析“对象不再使用时赋值为null”这一操作存在的意义,供君参考。本文尽量不使用专业术语,但仍需要你对JVM有一些概念。示例代码我们来看...
2020-03-20 11:27:53
2558
原创 springboot整合swagger配置账号密码
增加maven依赖:org.springframework.bootspring-boot-starter-security配置文件添加:security.basic.path=/swagger-ui.htmlsecurity.basic.enabled=truesecurity.user.name=lovnxsecurity.user.password=123456...
2020-03-18 16:07:10
12204
6
原创 Hash 算法原理及应用探讨
1、什么是HashHash也称散列、哈希,对应的英文都是Hash。基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值。活动开发中经常使用的MD5和SHA都是历史悠久的Hash算法。echo md5(“这是一个测试文案”);// 输出结果:2124968af757ed51e71e6abeac04f98d...
2019-12-06 14:44:46
2359
1
原创 ThreadPoolExecutor 的八种拒绝策略
前言谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发。而不论你用FixedThreadPool还是CachedThreadPool其背后实现都是ThreadPoolExecutor。ThreadPoolExecutor是一个典型的缓存池化设计的产物,因为池子有大小,当池...
2019-09-16 16:17:31
2893
1
原创 MySQL的索引要使用B+树探讨
InnoDB的一棵B+树可以存放多少行数据?答案:约2千万为什么是这么多?因为这是可以算出来的,要搞清楚这个问题,先从InnoDB索引数据结构、数据组织方式说起。计算机在存储数据的时候,有最小存储单元,这就好比现金的流通最小单位是一毛。在计算机中,磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/EXT4)的最小单元是块,一个块的大小是4k,而对于...
2019-09-11 11:06:42
1940
转载 java中的锁探讨
〇、synchronized与LockJava中有两种加锁的方式:一种是用synchronized关键字,另一种是用Lock接口的实现类。形象地说,synchronized关键字是自动档,可以满足一切日常驾驶需求。但是如果你想要玩漂移或者各种骚操作,就需要手动档了——各种Lock的实现类。所以如果你只是想要简单的加个锁,对性能也没什么特别的要求,用synchronized关键字就...
2019-09-10 09:53:36
1941
原创 linux基础常用命令
Linux是目前应用最广泛的服务器操作系统,基于Unix,开源免费,由于系统的稳定性和安全性,市场占有率很高,几乎成为程序代码运行的最佳系统环境。linux不仅可以长时间的运行我们编写的程序代码,还可以安装在各种计算机硬件设备中,如手机、路由器等,Android程序最底层就是运行在linux系统上的。一、linux的目录结构/ 下级目录结构bin (binaries)存放二进制可执行文件...
2019-08-01 13:46:01
1947
原创 navicate导出没有表名
最近用navicate查询需要的数据然后导出脚本,发现没有办法导出表名,原因是没有对查询进行保存,操作如下:1、用表名保存查询语句2、导出向导,选择导出SQL脚本...
2019-06-25 18:02:56
6033
原创 VMWare虚拟机centos7桥接联网入门
最近在有新入职同事问VMWare安装centos7后想用桥接方式连网连不上,网上的教程很多有误导或者不够细化。特此在此记录一下自己的给新入职同事的讲解过程。1、环境VM12、centos72、确认本地主机网络配置3、虚拟机设置4、虚拟机配置文件设置命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33备注:有些系...
2018-11-22 17:08:35
2302
转载 ThreadPoolExecutor机制 及使用探讨
ThreadPoolExecutor机制 一、概述1、ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务;2、Executors方法提供的线程服务,都是通过参数设置来实现不同的线程池机制。3、先来了解其线程池管理的机制,有助于正确使用,避免错误使用导致严重故障。
2017-12-21 09:47:26
1995
转载 Java多线程原理及使用探讨
摘要: Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但
2017-12-15 11:52:32
2030
转载 java生成PDF探索
一、前言 前几天,做ASN条码收货模块,需要实现打印下载收货报表,经一番查找,选定iText–用于生成PDF文档的一个Java类库。废话不多说,进入正题。 二、iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 iText的安装
2017-11-28 15:42:24
2404
转载 声明式事务管理和基于@Transactional注解的使用
事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一致性。spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
2017-10-26 17:40:32
2090
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人