14.JVM之StringTable
玉骨西风,恨最恨、闲却新凉时节。
——周密《玉京秋》
JVM之StringTable1. String的基本特性
String:字符串,使用一对 ”” 引起来表示。
~~~javaString s1 = “justweb” ; // 字面量的定义方式String s2 = new String(“jianwei”); 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614 ...
14.MySql高级之锁问题
休对故人思故国,且将新火试新茶。诗酒趁年华。
——苏轼《望江南》
## MySql高级之锁问题
1. 锁概述
锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢)。
在数据库中,除传统的计算资源(如 CPU、RAM、I/O 等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。
2. 锁分类
从对数据操作的粒度分 :
表锁:操作时,会锁定整个表。
行锁:操作时,会锁定当前操作行。
从对数据操作的类型分:
读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。
写锁(排它锁):当前操作没有完成之前,它会阻断其他写锁和读锁。
3. Mysql 锁相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。下表中罗列出了各存储引擎对锁的支持情况:
存储引擎
表级锁
行级锁
页面锁
MyISAM
支持
不支持
不支持
InnoDB
支 ...
16.JVM之垃圾回收相关算法
胡未灭,鬓先秋,泪空流。此生谁料,心在天山,身老沧洲。
——陆游《诉衷情》
垃圾回收相关算法
在==堆里存放着几乎所有的Java对象实例==,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。
那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。
判断对象存活一般有两种方式:引用计数算法和可达性分析算法。
1. 标记阶段—引用计数算法
引用计数算法(Reference Counting)比较简单,对每个对象保存一个整型的引用计数器属性。用于记录对象被引用的情况。
对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1;当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,即表示对象A不可能再被使用,可进行回收。
优点:实现简单,垃圾对象便于辨识;判定效率高,回收没有延迟性。
缺点:
它需要单独的字段存储计数器,这样的做法增加了存储空间 ...
17.JVM之垃圾回收相关概念
千里水天一色,看孤鸿明灭。
——朱郭儒《好事近》
垃圾回收相关概念1. System.gc() 的理解
在默认情况下,通过system.gc()者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。
public static void gc() {
Runtime.getRuntime().gc();
}
然而System.gc() )调用附带一个免责声明,无法保证对垃圾收集器的调用。(不能确保立即生效)
==JVM实现者可以通过system.gc() 调用来决定JVM的GC行为。==而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况下,如我们正在编写一个性能基准,我们可以在运行之间调用System.gc() 。
代码演示是否出发GC操作:
1234567891011121314151617/** * System.gc() */public class SystemGCTes ...
2.javascript常用对象
[toc]
前端–JavaScript常用对象1. JSON对象
JSON 文件的文件类型是 ".json"
JSON 文本的 MIME 类型是 "application/json"
1.1 JSON简介
JSON(JavaScript Object Notation, JS 对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON 是存储和传输数据的格式。
JSON 经常在数据从服务器发送到网页时使用。
JSON 独立于语言 *****
JSON 是“自描述的”且易于理解。
* JSON 的语法是来自 JavaScript 对象符号的语法,但 JSON 格式是纯文本。读取和生成 JSON 数据的代码可以在任何编程语言编写的。
1.2 JSON语法
{key:value,key: ...
21.Java基础之Lambda表达式
江头未是风波恶,别有人间行路难!
——辛弃疾《鹧鸪天》
JDK8新特性—Lambda表达式1. 函数式编程思想概述
在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么,而不是以什么形式做。
1.1 冗余的Runnable代码
1.2 TreeSet的定制排序
1.3 为什么使用Lambda表达式呢?
Lambda 是一个 匿名函数,我们可以把 Lambda 表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
2. Lambda表达式语法☆
Lambda 表达式:在Java 8 语言中引入的一种新的语法元素和操作符。这个操作符为 “->” , 该操作符被称为 Lambda 操作符 或 箭头操作符。它将 Lambda 分为两个部分:
左侧:指定了 Lambda 表达式需要的参数列表。无参数则留空,多个参数则用逗号分隔 ...
24.Java基础之网络编程
剪不断,理还乱,是离愁。别是一般滋味在心头。
——李煜《相见欢》
Java基础之网络编程1. 网络编程概述
Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。
Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库, 程序员面对的是一个统一的网络编程环境。
网络基础
计算机网络:
把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。
==网络编程的目的:==
直接或间接地通过网络协议与其它计算机实现数据交换,进行通讯。
==网络编程中有两个主要的问题:==
如何准确地定位网络上一台或多台主机;定位主机上的特定的应用
找到主机后如何可靠高效地进行数据。
2. 网络通信要素概述
如何实现网络中的主机互相通信
通信双方地址
IP地址
端口号
一定的规则(即:网络通信协议。有 ...
25.赫夫曼编码
赫夫曼编码1. 简介
赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法
赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。
赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在 20%~90%之间
赫夫曼码是可变字长编码(VLC)的一种。Huffman 于 1952 年提出一种编码方法,称之为最佳编码。
2. 原理通信领域中信息的处理方式–定长编码
通信领域中信息的处理方式–变长编码
赫夫曼编码
3. 赫夫曼编码实现步骤3.1 准备工作
构造节点类
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748/** * 节点类 * @author DuanChaojie * @date 2020年3月21日 上午10:54:30 * @version 1.0 */class Node implements Comparable<Node>{ Byte data;//存放数据 ...
3.Java中数据的读写--IO
庭院深深深几许,杨柳堆烟,帘幕无重数。
——欧阳修《蝶恋花》
数据的读写–IOIO概述
当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为 输入input 和 输出output ,即流向内存是输入流,流出内存的输出流。
Java中I/O操作主要是指使用 java.io 包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。
那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。
IO分类
根据数据的流向分为:输入流和输出流。
输入流 :把数据从 其他设备 上读取到 内存 中的流。
输出流 :把数据从 内存 中写出到 其他设备 上的流。
格局数据的类型分为:字节流和字符流。
字节流 :以字节为单位,读写数据的流。
字符流 :以字符为单位,读写数据的流。
顶级父类们
输入流
输出流
字节流
字节输入流 InputStream
字节输出流 OutputStream
字符流
字符输入流 Reader
字符输出流 Wri ...
3.Vue指令
[toc]
前端框架—Vue指令
指令 (Directives) 是带有 v- 前缀的特殊特性。指令特性的预期值是:单个 JavaScript 表达式。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。 例如我们在入门案例中的v-on,代表绑定事件。
1. 插值表达式
说明:
该表达式支持JS语法,可以调用js内置函数(必须有返回值)
表达式必须有返回结果。例如 1 + 1,没有结果的表达式不允许使用,如:var a = 1 + 1;
可以直接获取Vue实例中定义的数据或函数
123456789101112<!--花括号-->{{表达式}}<!--HTML实例--><div id="app">{{name}}</div><script> var app = new Vue({ el:"#app", data:{ ...