垃圾回收相关概念1. System.gc() 的理解
在默认情况下,通过System.gc()者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。
然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(不能确保立即生效)
JVM实现者可以通过System.gc() 调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,**无须手动触发,否则就太过于麻烦了。**在一些特殊情况下,如我们正在编写一个性能基准,我们可以在运行之间调用System.gc()
代码示例:手动执行 GC 操作
12345678910111213141516171819public class Test { public static void main(String[] args){ new Test(); /* * 与 Runtime.getRuntime().gc() 作用一样 * 提醒j ...
StringTable(字符串常量池)1. String的基本特性
String:字符串,使用一对 “” 引起来表示
12String s1 = "atguigu" ; // 字面量的定义方式String s2 = new String("hello"); // new 对象的方式
String被声明为final的,不可被继承
String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小
String在jdk8及以前内部定义了final char value[]用于存储字符串数据。JDK9时改为byte[]
2. 为什么 JDK9 改变了 String 的结构
官方文档:http://openjdk.java.net/jeps/254
为什么改为 byte[] 存储?
String类的当前实现将字符存储在char数组中,每个字符使用两个字节(16位)。
从许多不同的应用程序收集的数据表明,字符串是堆使用的主要组成部分,而且大多数字 ...
单行函数1. 函数的理解1. 什么是函数函数在计算机语言的使用中贯穿始终,函数的作用是什么呢?它可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性 。在 SQL 中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地提高用户对数据库的管理效率。
从函数定义的角度出发,我们可以将函数分成内置函数 和自定义函数 。在 SQL 语言中,同样也包括了内置函数和自定义函数。内置函数是系统内置的通用函数,而自定义函数是我们根据自己的需要编写的,本章及下一章讲解的是 SQL 的内置函数。
2. 不同DBMS函数的差异我们在使用 SQL 语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即DBMS。DBMS 之间的差异性很大,远大于同一个语言不同版本之间的差异。实际上,只有很少的函数是被 DBMS 同时支持的。比如,大多数 DBMS 使用(||)或者(+)来做拼接符,而在MySQL 中的字符串拼接函数为concat()。大部分 DBMS 会有自己特定的函数,这就意味着采用 SQL 函数的代码可移植性是很差的,因此在 ...
基本的SELECT语句1. SQL概述1. SQL背景知识
1946年,世界上第一台电脑诞生,如今,借由这台电脑发展起来的互联网已经自成江湖。在这几十年里,无数的技术、产业在这片江湖里沉浮,有的方兴未艾,有的已经几幕兴衰。但在这片浩荡的波动里,有一门技术从未消失,甚至“老当益壮”,那就是SQL。
45 年前,也就是 1974 年,IBM研究员发布了一篇揭开数据库技术的论文《SEQUEL:一门结构化的英语查询语言》,直到今天这门结构化的查询语言并没有太大的变化,相比于其他语言,SQL 的半衰期可以说是非常长 了。
不论是前端工程师,还是后端算法工程师,都一定会和数据打交道,都需要了解如何又快又准确地提取自己想要的数据。更别提数据分析师了,他们的工作就是和数据打交道,整理不同的报告,以便指导业务决策。
SQL(Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言,与数据直接打交道,由 IBM 上世纪70年代开发出来。后由美国国家标准局(ANSI)开始着手制定SQL标准,先后有SQL-86 , SQL-89 , SQL-92 , SQL- ...
MySQL数据类型精讲1. MySQL中的数据类型
类型
类型举例
整数类型
TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
浮点类型
FLOAT、DOUBLE
定点数类型
DECIMAL
位类型
BIT
日期时间类型
YEAR、TIME、DATE、DATETIME、TIMESTAMP
文本字符串类型
CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
枚举类型
ENUM
集合类型
SET
二进制字符串类型
BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
JSON类型
JSON对象、JSON数组
空间数据类型
单值类型:GEOMETRY、POINT、LINESTRING、POLYGON;集合类型:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION
常见数据类型的属性,如下:
MySQL关键字
含义
NULL
数据列 ...
数据库概述1. 为什么要使用数据库
持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。
持久化的主要作用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。
2. 数据库与数据库管理系统1. 数据库的相关概念
DB:数据库(Database)
即存储数据的“仓库”,其本质是一个文件系统。它保存了一系列有组织的数据。
DBMS:数据库管理系统(Database Management System)
是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。
SQL:结构化查询语言(Structured Query Language)
专门用来与数据库通信的语言。
2. 数据库与数据库管理系统的关系数据库管理系统(DBMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为 ...
共享模型之内存上一章讲解的 Monitor 主要关注的是访问共享变量时,保证临界区代码的原子性
这一章我们进一步深入学习共享变量在多线程间的【可见性】问题与多条指令执行时的【有序性】问题
1. Java 内存模型JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。
JMM 体现在以下几个方面
原子性 - 保证指令不会受到线程上下文切换的影响
可见性 - 保证指令不会受 cpu 缓存的影响
有序性 - 保证指令不会受 cpu 指令并行优化的影响
2. 可见性1. 退不出的循环先来看一个现象,main 线程对 run 变量的修改对于 t 线程不可见,导致了 t 线程无法停止:
1234567891011static boolean run = true;public static void main(String[] args) throws InterruptedException { Thread t = new Thread(()->{ wh ...
进程与线程1. 进程与线程1. 概念1. 进程
程序由指令和数据组成,但是这些指令要运行,数据要读写,就必须将指令加载到cpu,数据加载至内存。在指令运行过程中还需要用到磁盘,网络等设备,进程就是用来加载指令管理内存管理IO的
当一个指令被运行,从磁盘加载这个程序的代码到内存,这时候就开启了一个进程
进程就可以视为程序的一个实例,大部分程序都可以运行多个实例进程(例如记事本,浏览器等),部分只可以运行一个实例进程(例如360安全卫士)
2. 线程
一个进程之内可以分为一到多个线程。
一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行
Java 中,线程作为最小调度单位,进程作为资源分配的最小单位。 在 windows 中进程是不活动的,只是作 为线程的容器(这里感觉要学了计算机组成原理之后会更有感觉吧!)
3. 对比
进程基本上相互独立的,而线程存在于进程内,是进程的一个子集
进程拥有共享的资源,如内存空间等,供其内部的线程共享
进程间通信较为复杂
同一台计算机的进程通信称为 IPC(Inter-process communication)
不同计算机之 ...
Linux后篇1. Shell 编程1. 概念Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序
作用:
Linux 运维工程师在进行服务器集群管理时,需要编写 Shell 程序来进行服务器管理。
对于 JavaEE 和 Python 程序员来说,工作的需要,你的老大会要求你编写一些 Shell 脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
对于大数据程序员来说,需要编写 Shell 程序来管理集群
Shell 脚本的执行方式:
脚本格式要求
脚本以#!/bin/bash 开头
脚本需要有可执行权限
编写第一个 Shell 脚本
1vim hello.sh
12#!/bin/bashecho "hello,world"
脚本的常用执行方式
方式 1(输入脚本的绝对路径或相对路径)
说明:首先要赋予 helloworld.sh 脚本的+x 权限, 输入脚本相对路径或者使用绝对路径
1shell文件路径
方式 2 ...
Linux前篇1. Linux入门1. 概述
linux 是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多企业级的项目(c/c++/php/python/java/go)都会部署到 Linux/unix 系统上。
常见的操作系统(windows、IOS、Android、MacOS, Linux, Unix)
Linux 主要的发行版:Ubuntu(乌班图)、RedHat(红帽)、CentOS、Debain[蝶变]、Fedora、SuSE、OpenSUSE [示意图]
2. Linux由来
3. Linux 和 Unix 关系图
2. 目录结构1. 基本介绍
linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录
深刻理解 linux 树状文件目录是非常重要的
记住一句经典的话:在 Linux 世界里,一切皆文件
示意图
2. 具体目录结构
/: [常用]根目录。
/bin: [常用]是binary的缩写,这 ...

