- 博客(34)
- 收藏
- 关注
原创 问题:JVM运行会加载那些类,求问了解的前辈;具体看内容,谢谢
1.问题来源2.测试程序:// vm: -XX:+TraceClassLoadingpublic class HashCodeTest { public static void main(String[] argv) { while (true){ } }}3.控制台打印加载类没有截图完;大概是tr.jar下的;4.问题:这些类是什么时候触发加载的; 谁触发的(JVM源码,进程运行时,涉
2020-08-01 17:06:33
459
原创 Redis-pipeline使用(实际项目直接优化10倍?)
背景以及概念: 原始查询,我们主要通过调用redis客户端执行单get,set操作,每次查询都将新建连接,实际项目的耗时主要来源于网络耗时,当数据较少,单次查询/修改性能影响不明显,当命令达W级别,单命令操作耗时影响很大;redis提供了管道技术,正好可以弥补这个缺点, redis-pipeline 技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。特点: 有效的减少了RTT和redis连接数,同时也减少了IO调用次数(IO调用涉及到用户...
2020-06-22 09:43:29
1420
原创 Go线程模型&异步编程的能力
1.文章目录Go概述 Go语言线程模型 goroutine与channel初探实践 Go实现异步编程与JDK的对比2.Go概述传统的编程模型,JAVA,C++,Python实现并发编程时,多线程之间需要通过共享内存(JAVA堆上的共享变量)来通信;为了保证线程安全,多线程共享的数据结构需要使用锁来保护,多线程访问共享数据需要锁竞争,获得锁才可以获取共享数据; Go提供了低级并发支持锁,互斥锁,读写锁,条件变量等;Go推荐使用channel和goroutine独特的结构化并发方式。 JAV
2020-06-03 18:35:43
3336
1
原创 JAVA异步编程-JDK-CompletableFuture实践与原理
1.文章目录ComPletableFuture概述 CompletableFuture实践 CompletableFuture主要源码导读2.CompletableFuture概述CompleatableFuture是对Future的增强,我们知道Future的局限性,CompleatableFuture可以通过编程方式显式设置计算结果和状态,并且可以作为一个计算阶段,当他完成时还能触发另一个函数/行为; 当多个线程调用CompletableFuture的complete,cancel方式只
2020-06-02 21:16:23
637
原创 JAVA并发编程-AQS原理&RenntrantLock源码导读
1.文章目录AQS概述,类结构,源码导读; RenntractLock源码,实现细节导读;2.AQS概述&类结构 AbstractQueuedSynchronizer 抽象同步队列简称 AQS ,它是实现同步器的基础组件, 并发包中锁的底层就是使用 AQS 实现的;AQS 是一个FIFO的双向队列,其内部通过节点 head tail 首和队尾元素,队列元素的类型为Node 其中 Node 中的 thread 变量用来存放进入 AQS 队列里面的线程: Node 节点内部的...
2020-06-02 11:23:54
697
原创 JAVA异步编程-JDK中FutureTask实践与原理
1.文章目录Future接口概述 FutureTask概述 FutureTask显式线程,线程池实现; FutureTask类结构,源码导读; FutureTask局限性;2.JDK 中Futurepublic interface Future<V> { // 取消任务 boolean cancel(boolean mayInterruptIfRunning); // 任务是否取消 boolean isCancelled(); /
2020-06-01 21:45:06
584
原创 JAVA-异步编程-线程和线程池实现异步编程,线程池源码导读
1.文章内容如何使用线程,线程池实现异步编程; 线程池的原理2.使用线程实现异步编程 任务类public class Task { // taskA public static void doSomethingA() { try { // 模拟耗时 Thread.sleep(200); System.out.println("taskA done"); } cat..
2020-06-01 17:14:40
428
原创 JAVA并发包-AtomicInteger
1.简介JUC 包提供 了一系列的原子性操作类,这些类都是使用非阻塞算法 CAS 现的 ,相 比使用锁 现原 性操作这在性能上有很大提高。由于原子性操作类的原理都大致相同。CAS原理:在Java发展初期,java语言是不能够利用硬件提供的这些便利来提升系统的性能的。而随着java不断的发展,Java本地方法(JNI)的出现,使得java程序越过JVM直接调用本地方法提供了一种便捷的方式,因而java在并发的手段上也多了起来。而在Doug Lea提供的cucurenct包中,CAS理论是它实现整个
2020-05-30 09:06:37
298
原创 Dubbo源码解析-Dubbo-Register-RedisRegister
1.Redis注册中心 redis支持很多的数据结构类型,key_value模式,内存存储数据,因此速度很快,效率很高; dubbo利用JRedis来连接到Redis分布式哈希键-值数据库,JedisPool是一个线程安全的网络连接池。可以用JedisPool创建一些可靠Jedis实例,可以从池中获取Jedis实例,使用完后再把Jedis实例还回JedisPool。这种方式可以避免创建大量socket连接并且会实现高效的性能。2.RedisRegistry 继承F...
2020-05-27 16:26:43
730
原创 Dubb源码解析-Dubbo-Register-ZookeeperRegister
1.ZookeeperRegister模块简介 本文章针对Zookeeper注册中心,注册,订阅源码设计导读;至于Zookeeper的优势,特点我们不做太多讲解; 下图为zookeeper存放数据的原理,为树状;因此我们这个模块本质要做的就是:将Zookeeper的数据存放,删除:Dubbo集成CuratorFramework,客户端可以对Redis进行连接,删除,修改,新增节点,添加监听器等操作,来满足我们的业务需求; 数据...
2020-05-27 09:48:29
668
原创 Dubbo源码解析-Dubbo-Register-API
1.注册中心作用 从官网摘的图,我们可以简单了解其流程;服务提供者在注册中心进行注册(本质是存放一些关键数据:提供者IP,Port,serviceKey,method,version,group等等信息); 服务消费者进行订阅(消费者获取提供者的关键数据); 消费者与注册中心通过监听器对数据进行同步(如果服务提供者的信息修改,销毁,新增,监听器来同步); 服务消费者调用服务提供者(根据获取的信息,进行调用,简单理解为:给服务提供者Socket端口发送数据,等待响应); 调...
2020-05-26 21:53:37
1330
原创 Dubbo源码解析-SPI.Dubbo可扩展机制原理
1.背景,改进 SPI的全名为Service Provider Interface,面向对象的设计里面,模块之间推荐基于接口编程,而不是对实现类进行硬编码,这样做也是为了模块设计的可拔插原则。为了在模块装配的时候不在程序里指明是哪个实现,就需要一种服务发现的机制,jdk的spi就是为某个接口寻找服务实现 了解Dubbo/阅读过官网文档的同学,可以看到Dubbo内部存在着大量的扩展,如Protocol:DubboProtocol,InJvmProtocol; Cluster:Failov...
2020-05-25 21:46:27
355
原创 istio-proxy相关概念以及启动过程
Istio-proxy相关概念istio-proxy Istio代理是可在客户端和服务器端使用的微服务代理,并形成微服务网格。代理支持大量功能。客户端功能:发现和负载平衡。代理可以使用几个标准的服务发现和负载平衡API,以有效地将流量分配给服务。 凭证注入。代理可以通过连接隧道或特定于协议的机制(例如HTTP请求的JWT令牌)注入客户端身份。 连接管理。代理管理与服务的连...
2020-02-25 14:37:20
3959
原创 MySql常见知识梳理
MySql简介数据库系统(Database system)= 数据库管理系统(DBMS,Database Management System)+数据库(Database)数据库管理系统(DBMS)可分为两类:一类为基于共享文件系统的DBMS,另一类为基于客户机-服务器的DBMS。Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational...
2019-11-01 17:31:11
545
原创 Leetcode_31. 下一个排列
1.题目描述 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须原地修改,只允许使用额外常数空间。 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。 1,2,3 → 1,3,2 3,2,1 → 1,2,3 1,1,5 → 1,...
2019-10-09 13:09:54
133
原创 Spring Boot实现邮件定时发送(STMP协议)
1.pom.xml 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </d...
2019-09-28 11:13:29
890
原创 数据库设计规约以及SQL优化策略
一.设计规范建表约束 必须有字段id(主键id,一般设置为自增(步数为1),当并发性需求较高的时候,不建议自增,可以自定义实现机制), create_time(建表时间), update_time(更新时间,设置为自动更新)。 表名和字段名必须使用小写字母或数字,禁止数字开头,同时使用下划线分割不同的单词,Windows环境下Mysql忽略大小写,Linux下大小写是有区分的,因此为了统...
2019-08-05 10:57:35
277
原创 连接linux的SSH工具(finalxshell,xshell等)
1. 今天无意看见了一个SSH工具,因为经常在linux上奔波,觉得挺好的,界面美观大方,功能强大,力赞。附带张截图 没什么好说的,喜欢的下载就行了,功能很多,自己可以摸索,有问题可以讨论。 Windows下载链接:http://www.hostbuf.com/downloads/finalshell_install.exe2.最常用,轻巧的xshellhttp...
2019-06-17 12:41:04
8898
2
原创 Linux配置FastDfs(Docker)以及测试
1.需求知识与环境了解Docker的基础命令和基础原理. Nginx,Fastdfs的基本结构与运行原理. Centos7.x,Docker安装成功。 防火墙:开启80,8080,22122,23000端口.2.本文目的讲解如何用Docker快速配置FastDfs(分布式文件管理系统),因此关于Docker与Nginx,Fastdfs的知识不再谈论.3.阿里云使用Docker配置...
2019-05-07 20:48:37
1281
4
原创 TreeSet与TreeMap实现自定义比较器
1.常见集合 键值:Map集合等; 单值存储:数组,List,Set,Queue集合等; 我们知道部分的集合实现的原理不用,比如TreeMap底层采用红黑树,实现了排序的功能,其默认排序一般为从小到大排序数字,根据字典序排序字符等,但默认排序方式因为缺陷往往不能满足开发的需求,因此必须自己学会如何实现自定义比较器; TreeSet与TreeMap可以代表大部分集...
2019-04-26 14:58:37
2457
原创 汉字的hashcode实现
1.问题来源 最近想看看JDK源码,在看Object.hashCode()方法时,突然遗忘了java对汉字的hash处理,于是想总结下这个简单的问题。2.代码分析· 附上一个汉字转ASSCII码的代码public class ChineseToAss { public static void main(String[] arg) { Str...
2019-04-09 22:15:12
2597
原创 SpringBoot与thymeleaf版本问题冲突
1.报错如下An attempt was made to call the method org.thymeleaf.spring5.SpringTemplateEngine.setRenderHiddenMarkersBeforeCheckboxes(Z)V but it does not exist. Its class, org.thymeleaf.spring5.SpringTempl...
2019-04-04 10:01:42
5586
15
原创 JVM之基本知识
jvm是java Virtual Machine的简称,意为java虚拟机。虚拟机:通过软件模拟的具有完整硬件系统功能的,运行在一个完全隔离环境中的完整计算机系。jvm使用软件模拟java字节码的指令集。jvm的内存区域:1.线程独占区和线程共享区:我们知道每一个程序一般都是多个线程同时运行的,为了线程更加安全的进行,每个线程都有自己的私密数据,不能供别的线程使用,有些数据要提供给...
2018-12-11 19:57:30
176
原创 JVM之虚拟机栈
一.基本概念 虚拟机栈描述的是java方法执行的动态内存模型:每个方法从执行都会创建一个栈帧,用来存储局部变量表,操作数栈,动态链接,方法出口等信息。每一个方法从执行到结束,都对应一个栈帧的在虚拟机栈中的入栈和出栈。特点:线程私有。Class Text{ public static void sleep(){ goBed(); Boole...
2018-12-11 19:56:36
994
原创 字符串表达式的计算(c++版)
一.字符串表达式的解析 z字符串表达式在栈结构的应用中是一个非常典型的列子,其算法设计思维充分的利用了栈的特性. 类如: "1+8*9+(4+5)*7" 完成字符串表达式的计算主要分为2个步骤; 1. 将中缀转化为后缀 按照(*/+-)的优先级;分别创建2个栈用来贮存数字和符号,从第一个元素遍历,遇到数字进入数字栈,遇到符号进入符号...
2018-10-19 19:51:20
15040
8
原创 关于Git和Git的常用命令
一.Git(分布式管理版本控制系统) Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 [1] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 是用于 Linux内核开发的版本控制工具。与常用的版本控制工具 CVS, Subv...
2018-10-07 10:17:28
170
原创 JDBC连接Mysql的解析
一.JDBC的简介 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库(mysql,oracle等等)提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。 ...
2018-10-06 21:21:18
980
原创 提问的智慧(懒人的提问方法)
一.提问的智慧 原文How To Ask Questions the Smart Way-- 王刚 <yafrank at 126 dot com > 版本《提问的智慧》 --时间:2013年10月26日 文章链接:链接:https://pan.baidu.com/s/10QicKwhJ7W67U0vh1rRL6w 提取码:trlp二.文本解析 一...
2018-10-06 10:40:16
1868
翻译 用C/C+编写“voidmain()”或“main()”可以吗?
定义void main(){/*---*/} 不是,也从来不是C+,甚至不是C。见ISO C+标准3.6.1[2]或ISO C标准5.1.2.2.1。符合的实现接受int main(){/*----*/} 和int main(int argc,char argv[]}{/*----*/} 符合规范的实现可能提供更多的main()版本,但它们都...
2018-08-12 21:17:42
1603
原创 快速排序法
一.快速排序法 快速排序法建立在冒泡排序之上,对其进行了优化处理。同冒泡排序法,快速排序也是交换元素的位置。冒泡排序法每次将一个元素冒泡在数列的一端,因此效率过慢,其时间复杂度O(n^2)。快速排序法原理为:采取了递归了思想,选取一个基点元素,每一轮排序将小于/大于基点数值的数放在基点位置左边,将大于/小于基点数值的数放在基点元素右边。每一轮后,基点的位置将不会改变。利用分...
2018-08-07 09:45:54
829
原创 64位操作系统下,关于int和long占用字节数同为4问题
一.c语言数据占用字节32位:char 1 short 2 int 4 long 4 long long 864位:char 1 short 2 int 4 long 8 long long 8二.可能原因 编译器的数据模型Datetype LP64 ILP64 LLP64 ILP32 LP32char 8 ...
2018-08-05 17:02:23
12488
原创 Windows环境下Nessus工具的安装
1.安装注册(1)点击https://www.tenable.com/products/nessus/select-your-operating-system 以windows操作系统为例)(2)然后依照图片内容选择 1.获取激活码 2.根据自己需求选择 3 .注册界面 记住密码用户名 最后要登陆 4.官网会向你的邮箱发送激活码5.安...
2018-08-03 16:59:20
6735
空空如也
JVM进程运行起来,会加载那些类?求问有经验的前辈:具体请看nei'r
2020-08-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人