- 博客(216)
- 收藏
- 关注
原创 Visual Studio插件及快捷键
文章目录设置enter补全代码使用滚动条预览整个文件插件CodeMaidViasforaHide Main MenuCode AlignmenOutput enhancerCode MetricesOpen In ExplorerToggle CommentGo To DefinitionVisual AssistCodeBeautifierIntellicode(代码补全)Add new file(快速添加文件)Open command line功能快捷键引用设置enter补全代码具体路径如下:工具
2020-06-05 08:15:41
1342
原创 深入Java底层之HashMap
HashMap的基本操作map.put("Chinese", 1);map.put("Math", 2);map.put("Englist", 3);map.put("Chemistry", 4);map.put("Biology", 5);for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue());
2020-05-27 08:23:41
428
原创 虚拟机字节码执行引擎
运行时栈帧结构栈帧stack frame是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法调用从开始执行至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量。在Java程序编译为Cla...
2020-04-17 02:29:30
366
原创 JVM类加载机制
JVM把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这既是虚拟机的类加载机制。与那些在编译时需要进行连接工作的语言(如C,C++)不同,Java语言里,类型的加载、连接和初始化都是在程序的运行期间完成的,Java里天生可以动态扩展的语言特性就是依赖运行期间动态加载和动态链接这个特点实现的。类加载的时机类从被加载到虚拟...
2020-04-16 01:05:58
234
原创 JVM Class类文件结构
Class类文件结构任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或者接口并不一定都得定义在文件里,譬如类或接口也可以通过类加载器直接生成。Class文件是一组以8位字节为基础单位的二进制流,整个数据项目严格紧凑的排列在Class文件之中,中间没有添加任何分隔符,这使得Class文件存储的内容几乎都是程序运行必要的数据,没有空隙存在。当遇到需要占用8位字节以上的空间的...
2020-04-15 23:25:56
267
原创 Java Synchronized方法和方法块的理解
synchronized 关键字,它包括两种用法:synchronized 方法synchronized 块。synchronized 方法通过在方法声明中加入 synchronized关键字来声明 synchronized 方法。如:public synchronized void accessVal(int newVal);synchronized 方法控制对类成员变量的访问...
2020-04-15 09:34:08
495
原创 源码角度分析Java ArrayList为什么是线程不安全的
面试中一个经常被问到的问题就是:ArrayList是否是线程安全的?答案当然很简单,无论是背来的还是自己看过源码,我们都知道它是线程不安全的。那么它为什么是线程不安全的呢?它线程不安全的具体体现又是怎样的呢?我们从源码的角度来看下。public class ArrayList<E> extends AbstractList<E> implements ...
2020-04-15 07:59:49
303
原创 JVM性能监控与故障处理工具
文章目录jps:虚拟机进程状况工具jstat: 虚拟机统计信息监视工具jinfo:java配置信息工具jmap:java内存映射工具jhap:虚拟机堆转储快照分析工具jstack:Java堆栈跟踪工具HSDIS:JIT生成代码反汇编JDK可视化工具:JConsoleJDK可视化工具2:VisualVM名称主要作用jpsJVM Process Status Tool,心事指定...
2020-04-15 01:57:54
235
原创 JVM垃圾收集器
文章目录判断对象是否存活引用计数法可达性分析再谈引用垃圾收集算法标记清除算法复制算法标记整理/标记压缩算法分代收集算法垃圾收集器内存分配与回收策略参考判断对象是否存活垃圾收集器在回收堆内存的时候-,需要先判断哪些对象还存活,哪些对象已经“死去(不能再被任何途经使用的对象)”引用计数法给对象添加一个引用计数器,每当有一个地方引用它时,计数器的值就+1。当引用失效时,计数器值就-1.当计数器的...
2020-04-14 21:47:27
220
原创 Java 并发JUC
java.util.concurrentjava.util.concurrent.atomicjava.util.concurrent.locks
2020-04-13 08:17:55
233
转载 详解Java反射机制
Class类JVM为每个加载的class及interface创建了对应的Class实例来保存class及interface的所有信息;获取一个class对应的Class实例后,就可以获取该class的所有信息;通过Class实例获取class信息的方法称为反射(Reflection);JVM总是动态加载class,可以在运行期根据条件来控制加载class。/*如何获取一个class的C...
2020-04-13 05:22:12
238
1
原创 Java内存模型JMM
JMM只是一种概念,定义了多线程下如何访问内存。程序应当保证以下特性可见性原子性有序性class Mynum{ public int i = 1;}public class Test { public static void main(String[] args) throws InterruptedException { Mynum myn...
2020-04-12 21:52:58
178
原创 JVM字节码详解
Java字节码是Java虚拟机所使用的指令集。在解释执行过程中,每当为Java方法分配栈桢时,Java虚拟机往往需要开辟一块额外的空间作为操作数栈,来存放计算的操作数以及返回结果。具体来说便是:执行每一条指令之前,Java虚拟机要求该指令的操作数已被压入操作数栈中。在执行指令时,Java虚拟机会将该指令所需的操作数弹出,并且将指令的结果重新压入栈中。下面我们来看个例子:public clas...
2020-04-12 09:12:34
665
1
原创 Java操作栈
实例public class OperationStack { public static void main(String[] args) { int i = 1; i = i++; int j = i++; int k = i + ++i* i++; System.out.println("i=" + i + ...
2020-04-11 09:42:38
198
原创 Java局部变量和成员变量
实例分析public class Test { static int s; int i; int j; { int i = 1; i++; j++; s++; } public void func(int j){ i++; j++; s+...
2020-04-11 07:33:24
197
原创 Java方法的参数传递机制
先来看个例子,分析一下输出结果。package com.jian8.basic;import java.util.Arrays;public class test { public static void main(String[] args){ int i = 1; String str = "hello"; Integer nu...
2020-04-11 05:22:37
252
原创 浅析JVM
JVM架构图1位JVM的架构图。下面的各个章节将以此为基础分别叙述。图1: JVM架构图重点是运行时数据区(Runtime Date Area),RDA包括:方法区:存放类的描述信息,也就是说放模板的信息Java栈本地方法栈堆程序计数器Class Loader负责加载class文件,class文件开头有特定的文件标示(不只是看文件扩展名)。将class文件字节码加载到内存...
2020-04-10 01:50:32
402
原创 斐波那契数列求解的几种方法
斐波那契数列的定义是f(n + 1) = f(n) + f(n - 1),生成第 n 项的做法有以下3种。1. 递归法:1.1 原理递归法求解的原理是把 f(n)问题的计算拆分成 f(n-1)和 f(n-2) 两个子问题的计算,并递归,以 f(0)和 f(1)为终止条件。缺点: 大量重复的递归计算,例如 f(n) 和 f(n - 1)两者向下递归需要 各自计算 f(n - 2)的值。通过下...
2020-03-30 03:34:47
3908
原创 python装饰器
装饰器的演变首先我们来看个例子,在没有装饰器时要在不修改函数代码前提下扩展一个函数功能可以采用如下方式:#1.定义一个函数,在不修改函数代码的前提下,对函数的功能进行拓展。比如权限验证。def f1(): print("这里f1函数的功能展示") #2.定义一个高级函数(闭包)实现对f1()函数进行权限验证。 def fn(f1): def fc(): ...
2020-03-29 04:30:49
246
翻译 Nginx如何处理请求
文章目录一、基于命名的server二、基于命名和IP的混合虚拟server三、一个简单的PHP站点配置译自Nginx官方文档:https://nginx.org/en/docs/http/request_processing.html一、基于命名的servernginx首先会决定要处理哪一个server的请求。先来看一个配置的例子,下面的配置中有三个虚拟的服务器且监听端口都是80。serv...
2020-03-24 18:39:49
793
原创 安装和配置 Nginx
文章目录一、安装Nginx1: 添加 yum 源2. 安装3. 配置 Nginx 服务4. 打开防火墙端口5. 查看和修改nginx文件二、配置Nginx1. Nginx常用功能2. 使用Nginx的必备工具2.1 GCC & G++编译器2. 2 PCRE库2.3 zlib2.4 OpenSSL开发库2.5 磁盘目录小结3. Linux内核优化3. Nginx配置3.1 运行中的Ngin...
2020-03-24 08:25:46
257
转载 python itertools --- 为高效循环而创建迭代器的函数
itertools 模块实现一系列 iterator ,这些迭代器受到APL,Haskell和SML的启发。为了适用于Python,它们都被重新写过。本模块标准化了一个快速、高效利用内存的核心工具集,这些工具本身或组合都很有用。它们一起形成了“迭代器代数”,这使得在纯Python中有可能创建简洁又高效的专用工具。例如,SML有一个制表工具: tabulate(f),它可产生一个序列 f(0),...
2020-03-23 19:08:42
529
原创 深入理解Python生成器generator和迭代器Iterator
我们有时候会利用列表解析式生成一个列表,如下所示的代码功能是生成一个10以内的奇数列表print([i for i in range(10) if i % 2 == 1])这里i for i in range(10)生成的就是一个生成器generator,我们可以将其打印出来,如下代码示:print(i for i in range(10))# 结果<generator obje...
2020-03-23 06:11:07
448
原创 Python fun(*args,**kwargs)中的*args,**kwargs参数含义及用法
文章目录1. Python函数中的两种参数2. 理解函数调用中的`*`2.1 `*` 做了什么3. 理解函数调用中的`**`4. 理解函数调用中的`*args`和`**kwargs`参考1. Python函数中的两种参数我们知道,在Python中有两种参数位置参数(positional argument): 位置参数只能由参数位置决定关键词参数(keyword argument): 关键...
2020-03-21 08:16:30
7549
原创 Python实现十大经典排序算法
算法分类分类排序算法大致可以分为两类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b...
2020-03-20 10:28:23
875
原创 提高Python效率的编程技巧
## 1. 交换值x, y = 1, 2print(x, y)x, y = y, xprint(x, y)## 2. 字符串列表合并为一个字符串sentence_list = ["my", "name", "is", "George"]sentence_string = " ".join(sentence_list)print(sentence_string)## 3. 将字...
2020-03-20 07:55:07
158
原创 Elasticsearch入门教程
文章目录什么是Elasticsearchnode & clusterindexDocumentType安装Elasticsearch拉取image命令行方式启动修改配置安装elasticsearch-head插件安装中文分词器插件ikElasticsearch能做什么查看新建和删除 Index中文分词设置参考什么是Elasticsearchnode & clusterElas...
2020-03-13 07:41:44
349
原创 Docker入门教程
文章目录什么是DockerDocker 的用途Debian安装DockerImage容器文件如何制作Docker容器编写 Dockerfile 文件创建 image 文件生成容器CMD 命令RUN vs CMD发布 image 文件其他有用的命令( 1 ) `docker container start`( 2 )`docker container stop`( 3 ) `docker conta...
2020-03-12 23:32:15
330
原创 操作系统-死锁
文章目录1. 死锁的概念1.1 哲学家就餐问题1.2 死锁定义2. 死锁的起因2.1 死锁的一些结论3. 死锁的预防策略3.1 死锁的必要条件3.2 解决死锁策略3.2.1 预先静态分配法3.2.2 有序资源分配法3.3 Windows和Linux采取的措施1. 死锁的概念1.1 哲学家就餐问题问题描述:五个哲学家围坐在圆桌边,有5支筷子。他们做的事就是:思考-休息-吃饭吃饭时使用两支筷子...
2020-03-12 04:23:28
824
原创 Django
安装环境Pipenv 创建和管理虚拟环境首先通过命令pip install pipenv 安装 Pipenv。安装 Djangodjango 的官方文档对 如何安装 django 给出了详细且明确的指导,不过我们目前用不上这些,只需使用 pipenv 命令就可以解决问题。进入项目根目录,运行:pipenv install django==2.2.3建立 Django 工程万事已经具...
2020-03-09 13:17:17
208
原创 Python I/O操作详解
在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。1. 文件读read():1、读取整个文件,返回的是一个字符串,字符串包括文件中的所有内容。2、若想要将每一行数据分离,即需要对每一行...
2020-03-09 08:53:37
1020
原创 owasp top 10 的漏洞原理和测试方法
1. Top10 漏洞概述译自:https://owasp.org/www-project-top-ten/1.1 InjectionInjection flaws, such as SQL, NoSQL, OS, and LDAP injection, occur when untrusted data is sent to an interpreter as part of a co...
2020-03-08 08:28:28
3680
原创 深入理解Javascript闭包(Closure)
1. 变量作用域要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就是两种:全局变量局部变量Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 var n = 999; function f1(){ alert(n); } f1(); // 999另一方面,在函数外部自然无法读取函数内的局部变量。 ...
2020-03-07 11:31:04
186
原创 操作系统-进程管理
1. 进程概念1.1 进程基本概念1.2 进程状态1.3 进程控制块2. 进程控制3. 线程4. 临界区和锁5. 同步和PV操作6. Windows同步机制7. Linux同步机制8. 进程通信...
2020-03-07 11:02:06
537
原创 数据库系统-事物
1. 什么是事物事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。换句话说:一个Session中所进行所有的操作,要么同时成功,要么同时失败。2. 事物的4个基本特征ACID事务具有4个基本特征,分别是:原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Duration)2.1 原...
2020-03-06 20:31:20
586
原创 操作系统-存储管理
1. 存储管理功能1.1 地址映射定义:把程序中的虚拟地址/逻辑地址转换成内存真实的地址/物理地址的过程地址映射的实现方式这里提前声明:VA: 逻辑地址 Virtual AddressBA: 装入地址 Base AddressMA: 物理地址 Memory Address/Phisical Address固定地址映射静态地址映射程序装入时由操作系统完成逻辑地址到物理地址的映...
2020-03-06 01:18:02
839
转载 Javascript单线程如何实现异步操作
转载自阮一峰老师: JavaScript 运行机制详解:再谈Event Loop http://www.ruanyifeng.com/blog/2014/10/event-loop.html1. 为什么JavaScript是单线程?JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。JavaScr...
2020-03-05 22:28:19
860
原创 并发和并行的区别
现代os都将线程作为最小调度单位,进程作为资源分配的最小单位。并发Concurrency,是并发的意思。并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序(或线程)之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。微观角度:所有的并发处理都有排队等候,唤醒,执行等这样的步骤,在微观上他们都是序列被处理的,如果是同一时刻到达的请求(或线程)也会根据优先级的不同,而...
2020-03-05 21:18:35
5851
转载 服务端高并发分布式架构演进之路
来源: https://segmentfault.com/a/11900000186261631. 概述本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。特别说明:本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题,并非是淘宝真正的技术演进路径2....
2020-03-05 07:37:38
250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人