15.JVM之垃圾回收概述
庭院深深深几许,杨柳堆烟,帘幕无重数。
——欧阳修《蝶恋花》
## 垃圾回收概述
这次我们主要关注的是黄色部分,内存的分配与回收。
1. 什么是垃圾?
在提到什么是垃圾之前,我们先看下面一张图:
从下图我们可以很明确的知道,Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。
垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。
关于垃圾收集有三个经典问题:
哪些内存需要回收?
什么时候回收?
如何回收?
垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这当然也是面试的热点。
1.1 什么是垃圾?
==垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。==
如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应 ...
15.MySql高级之常用SQL技巧☆
惜别伤离方寸乱,忘了临行,酒盏深和浅。
——李清照《蝶恋花》
## MySql高级之常用SQL技巧☆
1. SQL执行顺序
编写顺序
12345678910111213141516select distinct <select list>from <left_table> <join_type>join <right_table> ON <join_condition>where <where_condition>group by <group_by_list>having <having_condition>order by <order_by_condition>limit <limit_params>
执行顺序
123456789from <left_table>on <join_condition><join_type> join <right_table>where <where ...
15.查找算法之顺序查找
1. 顺序查找
在 java 中,我们常用的查找算法四种:
顺序(线性)查找
二分查找/折半查找
插值查找
斐波那契查找
有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值。
1.1 代码实现12345678910111213141516171819202122232425262728293031public class SeqSearch { public static void main(String[] args) { int[] arr = {1,9,11,-1,9,34,89}; List<Integer> searchResult = seqSearch(arr,1); if(searchResult.size()==0) { System.out.println("没有找到对应的索引!"); }else { Sys ...
1.Java的历史和演变
都将万事,付与千钟。任酒花白,眼花乱,烛花红。
——苏轼《行香子》
## Java基础之Junit单元测试
我们首先了解一下测试分类:
黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
白盒测试:需要写代码的。关注程序具体的执行流程。
Junit使用:白盒测试人员,以及我们开发人员的使用。
使用步骤
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
1. 定义一个测试类
建议:
测试类名:被测试的类名Test CalculatorTest
包名:xxx.xxx.test cn.justweb.test
2. 定义测试方法-可以独立运行
建议:
方法名:test测试的方法名 testAdd()
返回值:void
参数列表:空参
3. 给方法加@Test4. 导入junit依赖 ...
16.Java基础之Junit单元测试 (copy)
都将万事,付与千钟。任酒花白,眼花乱,烛花红。
——苏轼《行香子》
## Java基础之Junit单元测试
我们首先了解一下测试分类:
黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
白盒测试:需要写代码的。关注程序具体的执行流程。
Junit使用:白盒测试人员,以及我们开发人员的使用。
使用步骤
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
1. 定义一个测试类
建议:
测试类名:被测试的类名Test CalculatorTest
包名:xxx.xxx.test cn.justweb.test
2. 定义测试方法-可以独立运行
建议:
方法名:test测试的方法名 testAdd()
返回值:void
参数列表:空参
3. 给方法加@Test4. 导入junit依赖 ...
16.MySql高级之日志
生怕离怀别苦,多少事、欲说还休。新来瘦,非干病酒,不是悲秋。
——李清照《凤凰台上忆吹箫》
## MySql高级之日志
在任何一种数据库中,都会有各种各样的日志,记录着数据库工作的方方面面,以帮助数据库管理员追踪数据库曾经发生过的各种事件。MySQL 也不例外,在 MySQL 中,有 4 种不同的日志,分别是错误日志、二进制日志(BINLOG 日志)、查询日志和慢查询日志,这些日志记录着数据库在不同方面的踪迹。
1. 错误日志错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。
该日志是默认开启的 , 默认存放目录为 mysql 的数据目录(var/lib/mysql), 默认的日志文件名为 hostname.err(hostname是主机名)。
12-- 查看日志位置指令 : show variables like 'log_error%';
查看日志内容 :
1tail -f /var/lib/my ...
16.查找算法之二分查找
1. 二分查找
请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示”没有这个数”
1.1 实现思路
1.2 代码实现1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465public class BinarySearch { public static void main(String[] args) { int[] arr = {1,1,2,3,4,5,6,7,8,9}; List<Integer> list = binarySearch(arr, 0, arr.length-1,1); System.out.println(list.toString()); } /** * * @para ...
17.MySql高级之常用工具
少年不识愁滋味,爱上层楼。爱上层楼,为赋新词强说愁。
——辛弃疾《丑奴儿》
MySql高级之常用工具1. mysql
该mysql不是指mysql服务,而是指mysql的客户端工具。
12-- 语法 :mysql [options] [database]
1.1 连接选项
-u, --user=name 指定用户名
-p, --password[=name] 指定密码
-h, --host=name 指定服务器IP或域名
-P, --port=# 指定连接端口
123#示例 :mysql -h 127.0.0.1 -P 3306 -u root -p mysql -h127.0.0.1 -P3306 -uroot -p2143
1.2 执行选项1-e, --execute=name 执行SQL语句并退出
此选项可以在Mysql客户端执行SQL语句,而不用连接到MySQL数据库再执行,对于一些批处理脚本,这种方式尤其方便。
1mysql -uroot -p2143 db01 -e "s ...
17.学习递归思想这一篇就够了
君臣一梦,今古空名。但远山长,云山乱,晓山青。
——苏轼《行香子》
递归
递归:指在当前方法内调用自己的这种现象,每次调用时传入不同的变量。
1. 计算 1+2+3+….+n的和12345678910111213@Testpublic void test2() { int n = 100; int sum = sum( n ); System.out.println( "sum = " + sum );}public int sum(int n) { if (n == 1) { return 1; } return sum( n - 1 ) + n;}
2. 递归阶乘1234567891011121314@Testpublic void test3() { int n = 10; int value = getValue( n ); System.out.println( "value = " + ...
17.查找算法之插值查找
1. 差值查找算法1.1 插值查找原理介绍
插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。
将折半查找中的求 mid 索引的公式 , low 表示左边索引 left, high 表示右边索引 right.key 就是前面我们讲的 findVal
对应前面的代码公式:int mid = left + (right – left) * (findVal – arr[left]) / (arr[right] – arr[left])
1.2 举例说明插值查找算法
1.3 代码实现1234567891011121314151617181920212223242526272829303132333435363738394041public class InsertValueSearch { public static void main(String[] args) { //得到测试数组 int[] arr = new int[100]; for (int i = 0; i < arr.length; i++) { ...