- 博客(149)
- 收藏
- 关注
原创 Golang ——并发编程
goroutinegoroutine是Go语言中的轻量级线程实现,由Go运行时管理,其使用方式也特别简单,只需要加上go关键字就可以了。func StudyGoroutine() { go newTask() // 使用go关键字,新建一个协程 for { fmt.Println("this is test1 goroutine") time.Sleep(time.Second) // 延时1s }}func newTask() { for { fmt.Println("t
2020-12-19 18:15:26
301
1
原创 Golang ——文件操作
相关API1. 创建文件根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件对象是可读写的。func Create(name string) (file *File, err Error)2. 打开文件该方法打开一个名称为name的文件,但是是只读方式,内部实现其实调用了OpenFile。func Open(name string) (file *File, err Error)打开名称为name的文件,flag是打开的方式,只读、读写等,perm是权
2020-12-15 11:58:10
357
原创 Golang —— JSON的解析与生成
JSON (JavaScript Object Notation)是一种比XML更轻量级的数据交换格式,在易于人们阅读和编写的同时,也易于程序解析和生成。尽管JSON是JavaScript的一个子集,但JSON采用完全独立于编程语言的文本格式,且表现为键/值对集合的文本描述形式(类似一些编程语言中的字典结构),这使它成为较为理想的、跨平台、跨语言的数据交换语言。例如:{ "Company": "itcast", "Subjects": [ "Go", "C++", "Python",
2020-12-13 15:49:48
723
原创 Golang —— 正则表达式
正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具。虽然正则表达式比纯粹的文本匹配效率低,但是它却更灵活。按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出几乎任何你想要得到的字符组合。Go语言通过regexp标准包为正则表达式提供了官方支持,如果你已经使用过其他编程语言提供的正则相关功能,那么你应该对Go语言版本的不会太陌生,但是它们之间也有一些小的差异,因为Go实现的是RE2标准,除了\C。其实字符串处理我们可以使用strings包来进行搜索(Contains、Index)、替换
2020-12-11 11:07:08
2231
原创 Golang —— 字符串处理
字符串常用操作Contains操作功能:字符串s是否包含substr,返回bool值func Contains(s, substr string) bool例如: boo := strings.Contains("hellogo", "hello") fmt.Println("boo =" , boo)Join操作功能:字符串连接,把slice a 通过sep连接起来func Join(a []string, sep string) string例如: s := []string
2020-12-09 16:09:09
289
原创 Golang —— 错误处理方案
Golang漂亮的错误处理规范也是Go语言的最大亮点之一。error接口标准库把error定义为接口类型, 以便于自己定义错误类型type error interface{ Error() string}error的使用也比较简单 // error对象的两种创建方式 // 1.使用fmt.Errorf //var err1 error = fmt.Errorf("%s", "this is normal error") err1 := fmt.Errorf("%s", "this
2020-12-07 11:21:36
674
原创 VSCode配置Go环境
Go的安装推荐Go官网安装,也可以在Go中文网下载。可以一直默认,也可以根据自己放到想要的路径。VSCodede的安装推荐VSCode官网下载,下载地址。安装步骤也是一路next,路径选择根据个人。配置Go mod镜像网址搜索goproxy.cn。配置本地环境变量验证是否配置成功VSCode的配置下载Go插件然后点击右边的Install即可(我的是已经安装过的所以这样显示)创建一个项目(文件夹)然后打开他(左上角的File -> Open Folder
2020-11-08 10:20:19
34937
11
原创 JavaSE之String类
概念String类的实例表示一个字符串, String是一种不可变的字符串, 一旦对这个字符串做出改变的操作, 实质上是重新创建一个新的对象, 然后把引用指向这个新的对象.常见的构造String的方式//方式一String str = new String("Hello");//方式二String str = "Hello";问题1. 方式一在内存中创建了几个对象答: 有可能是一个对象, 有可能是两个对象:对于"Hello"这个字符串对象, 如果字符串常量池中存在, 那么就在堆中new
2020-07-08 15:59:48
157
原创 JavaSE之类和对象
static关键字1. static的特点static是修饰符, 用于修饰成员static修饰的成员被所有的对象共享static优于对象存在, 因为static修饰的成员已经随着类的加载存在了static修饰的成员多了一种调用方法: 类名.静态成员static修饰的成员是共享数据2. static修饰变量变量分为两种, 一种是被static修饰的静态变量(类变量),一种是没有被static修饰的实例变量.静态变量在内存中只有一个拷贝, JVM只为静态变量分配一次内存, 在类加载的
2020-07-07 23:51:01
222
原创 JavaSE之方法的使用
形参和实参对于基本类型和引用类型基本类型的变量保存原始数值,所以变量就是数据本身。java中的八种基本类型:byte, short, int, long, float, double, boolean, char引用类型的变量保存的是引用值,所谓引用就是对象所在空间的“首地址值”,变量通过这个引用值来操作对象。常用的引用类型:String, 数组, 类, 接口。值传递和引用传递值传递在方法的调用过程中, 实参把它的实际参数传递给形参, 此传递过程就是将实参的值拷贝一份传递到方法中, 这样
2020-07-03 16:30:11
310
1
原创 Linux —— 部署web项目到Linux上
写在前面在 Linux下安装软件包有三种方式:网络安装:使用 yum 命令,yum -y install [软件包的名称]安装已下载的 rpm 软件:rpm -ivh [文件名]rpm下还有一些常用的指令:查看已经通过rpm安装的软件包:rpm -qa | grep [软件名]卸载某个安装包:rpm -e [软件名]自行编译安装解压/压缩文件命令tar vxf [文件名](解压/压缩 tar/tar.gz 格式的文件)环境变量Linux下的环境变量在 /etc/profi
2020-06-28 11:37:51
290
原创 Linux —— 基本指令
使用Xftp上传文件1. 新建连接2. 上传文件目前主流的操作系统WindowsUnix —— Mac OSLinux —— Centos、Ubuntu等复习一下相对路径和绝对路径cd ./ 表示当前路径cd …/ 表示上一级路径cd opt 表示在当前路径下,查找opt文件夹,并切换进去cd /opt 表示在 / 根路径下,查找opt文件夹,并切换进去使用场景在IO中,如File、FileInputStream、obj.getClass().getClassLoad
2020-06-26 17:44:01
223
原创 错题本(4)
Day13运行时数据区包括:程序计数器、虚拟机栈、本地方法栈、堆、元空间/方法区以及元空间中的运行时常量池。方法区/元空间、堆、运行时常量池都是线程共享的。其他几个都是线程私有的。这道题有点憨了,这道题考查的是for循环的执行过程。for(语句A(一般为初始化语句); 语句B(一般为条件判断语句); 语句C)第一次循环,执行语句A;再执行语句B;判断B是否为true,为true就执行循环体,然后执行语句C,为false就直接跳出循环。第二次循环,判断语句B是否为true,如果是就执行循环
2020-06-25 20:41:47
276
原创 JVM —— 常用JVM监控工具
JDK命令行工具jps:虚拟机进程状态工具jps是使用频率最高的JDK命令行工具,它可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(main函数所在的类)名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID)。其他的JDK工具大多需要输入jps查询到的LVMID来确定要监控的是哪一个虚拟机进程。jps命令格式jps 【options】【hostid】举例使用jps:hostid可用于查询开启了RMI服务的远程虚拟机进程状态
2020-06-25 17:07:48
966
原创 JVM —— GC(垃圾回收)
垃圾回收简介GarbageCollection,java进程启动后会创建垃圾回收线程,来对内存中的无用对象进行回收。垃圾回收的时机1. System.gc()显式的调用System.gc():调用此方法建议JVM进行FGC(Full GC),虽然只是建议而非一定,但是一般都会触发FGC,从而增加FGC的频率。一般不使用此方法,让虚拟机自己去管理它内存。2.JVM垃圾回收机制决定创建对象时需要分配内存空间,如果空间不足,会触发GC其他回收机制java.lang.Object中有一个final
2020-06-25 16:24:28
490
1
原创 JVM —— 类加载
类的生命周期加载、验证、准备、解析、初始化、使用、卸载。其中验证、准备、解析三部分又称为连接。类加载的五个步骤加载、验证、准备、解析、初始化。(了解)加载:通过一个类的权限名来获取定义此类的二进制字节流。将这个二进制字节流的静态存储结构转换为方法区的运行时数据结构。在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。验证这一阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求, 并且不会危害虚拟机自身的安全准备
2020-06-24 17:12:03
106
原创 错题本(3)
Day8Day9A选项: 优先级高的线程进入就绪态不会终止当前线程的运行, 他只是在下一次时间片轮转的时候, 有较高的优先级会让系统调度优先它B选项: 抛出一个异常时, 程序停止, 线程也就被终止了C选项: sleep()只是会阻塞一个线程, 题目中要求的是终止线程, 也就是线程处于死亡状态, 并不是阻塞态D选项: 新建一个线程也不会终止当前线程, 他只会在就绪态等待时间片轮转.子类在执行构造方法的时候, 会默认调用父类的构造方法, 如果父类的构造方法是有参的构造方法, 那么就得
2020-06-19 17:40:20
336
原创 错题本(2)
Day5左移运算符 << : 最左侧丢弃, 最右侧补0右移运算符 >> : 最右侧丢弃, 最左侧补符号位无符号右移 >>> : 最右侧丢弃, 最左侧补0注意:左移一位相当于 *2, 左移 N 位, 相当于 *2 的 N 次方右移一位相当于 /2, 右移 N 位, 相当于 /2 的 N 次方这个题确实是属于脑瘫错误了方法 operate 在启动时产生一个栈帧, x 和 y 都处在这个栈帧中, 这个栈帧在方法启动时产生, 在方法结束时销毁(具体
2020-06-16 16:54:04
2382
原创 线程与进程
进程的特点:(1) 进程是程序的一次执行过程, 若程序执行两次或者多次, 那就需要多个进程.(2) 进程是正在运行的程序的抽象, 他代表运行的 CPU(3) 进程是系统进行资源分配的最小单位.(4) 操作系统为每个进程分配了独立的内存空间线程的特点(1) 线程有标识符 ID(2) 线程有状态和状态转换, 所以需要一些状态转换的操作(3) 有自己的栈和栈指针(4) 可以共享所在进程的地址空间和其他资源线程的优点(为什么要引入线程)(虽然进程有利于对资源的管理和保护, 但还是引..
2020-06-15 19:38:18
92
原创 HTTP和Servlet
Servlet实现简单登录页面(包含转发与重定向、Cookie和Session)login.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body>用户登录<form action="lo...
2020-06-15 17:33:39
144
原创 网络原理之编程
TCP Socket 常用 API代码实现基于TCP协议的客户端服务端的连接如下// 服务端代码import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Server { public static int
2020-06-08 11:23:13
116
原创 JVM —— 关于 == 的分析
关于 == 的分析在 Integer 中基本数据类型 “==” 比较都是比较字面量 @Test public void test1_1(){// 测试通过 int i1 = 10; int i2 = 10; Assert.assertTrue(i1 == i2); } @Test public void test1_2(){// 测试通过 int i1 = 128; int i2
2020-06-01 19:49:38
135
原创 JVM —— JMM 简述
JDK 1.8 内存模型程序计数器一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。Java虚拟机栈每个方法执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应一个栈帧在虚拟机栈中入栈和出栈的过程。之前我们一直讲的栈区域实际上就是此处的虚拟机栈,再详细一点,是虚拟机栈中的局部变量表部分。此区域一共会产生以下两种异常: 1. 如果线程请求的栈深度大于虚拟机所允许的深度(-Xss设置栈容量.
2020-06-01 18:32:06
167
原创 Java 中常用的 IO 流
什么是流:在 Java 中所有数据都是使用流来读写的. 流是对数据传输的总称和抽象. 即数据在两个设备间的传输称为流, 流的本质是数据传输, 根据数据传输的特性, 将流抽象为各种类.为什么需要缓冲流:当我们 read() 读取文件的时候, 每读取一个字节都会访问一次硬盘, 效率非常低, 当文件过大的时候尤为显著, 因此需要使用 buffered 缓冲流, 当创建 buffered 对象的时候, 会创建一个缓冲区数组, 此时读文件的时候, 会先从硬盘读到缓冲区, 然后直接从缓冲区输出.注
2020-06-01 16:19:34
219
原创 File 类
理解文件什么是文件: 文件其实就是在 Windows 操作的时候, 经常创建使用的.txt, .exe, .mp3 等, 这些都可以称之为文件文件可以简单地理解为: 在外设硬盘上保存数据的一种方式文件可以由两部分构成: 属性(文件大小、文件名、文件类型等) + 内容File 文件操作类File 类的包名是 java.io, 其实现了 Serilizable, Comparable 两大接口以便于其对象的可序化和比较2.1 构造方法2.2 File 类常用方法 - 基本文件操作在 .
2020-06-01 11:41:26
122
原创 多线程案例
同时启动三个线程, 按顺序打印 ABC三个字符串.要求: 三个线程: 第一个只能打印 A, 第二个只能打印 B, 第三个只能打印 C, 同时执行, 要求打印结果: ABCpublic class SequencePrint { public static void main(String[] args) throws InterruptedException { print(); } private static void print() { ...
2020-05-29 12:44:14
138
原创 多线程 ---- 线程池
线程的每次启动和销毁都需要消耗很大的性能, 所以引入线程池; 线程池最大的好处就是减少每次启动, 销毁线程的损耗.(1) 下面以一个送快递的案例具体引入线程池:import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ThreadFactory;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUni
2020-05-28 09:33:03
104
原创 多线程 ---- 线程的通信
wait(), notify(), notifyAll() 方法(1) 语法上: 都必须在 synchronized 修饰的代码块中, 如果没在, 就会抛出异常.(2) 作用: 由于在 synchronized 修饰的代码块中, 所以线程一定是运行态, 且已经成功获取到对象锁.下面举一个面包店的例子来进行说明 线程间的通信package Java05_23;// 假设面包店有面包师傅有5个, 可以一直生产面包, 每次生产3个// 假设面包店有20个消费者, 可以一直消费面包, 每次消费1个
2020-05-25 17:08:09
106
原创 多线程 ----- 线程安全问题
多线程带来的风险 - 线程安全(重中之重!!!)1 什么是线程安全线程安全和线程不安全的定义是很复杂的, 下面先通过一个代码来看一下什么是线程不安全.// 有一个共享变量, 初始为 0, 启动 20 个线程, 每个线程执行 10000 次, 每次循环将共享变量 ++ 一次public class UnsafeThread { private static int SUM; public static void main(String[] args) { for (
2020-05-24 11:05:15
113
原创 多线程 ---- 线程的状态
观察线程的所有状态线程的状态是一个枚举类型 Thread.Statepublic class ThreadState { public static void main(String[] args) { for (Thread.State state : Thread.State.values()) { // Thread.State 就相当于一个类 System.out.println(state); } .
2020-05-24 10:32:54
90
原创 多线程-----初识和常见方法
认识线程1.1 概念进程是系统分配资源的最小单位。线程是系统调度的最小单位。一个进程内的线程之间是可以共享资源的。每个进程至少有一个线程存在,即主线程。1.2 观察进程和线程可以通过 JDK 提供的 java 监控工具/命令来观察打开方式: a. 双击打开b. cmd 输入 jconsole 命令打开在 IDEA 中编写好代码, 点击运行, 然后用 jconsole 来观察线程1.2.1 IDEA 中执运行 main 方法(观察让主线程阻塞)(Java 命令代码执行:启动系统 .
2020-05-20 12:03:31
173
原创 操作系统和进程简述
冯诺依曼体系结构大部分计算机都遵守冯诺依曼体系我们所认识的计算机, 都是由一个个硬件结构组成的· 输入设备: 如鼠标、键盘、扫描仪等· 中央处理器(CPU):包含运算器和控制器等· 输出设备: 如显示器、打印机等注意: 某些设备在不同场景中,可能表现为输入设备,也可能表现为输出设备。比如硬盘、VR设备里面的头盔(接受数据展示在我们的视图中, 把我们看向哪个地方当成数据发送到CPU)。输入输出由于视角不同,表现也可能不同。关于冯诺依曼(1)这里的存储器指的是内存。(2)不考虑缓存的情.
2020-05-15 14:54:53
276
原创 Java 的 JDBC 编程
JDBC 是一种用于执行 SQL 语句的 Java API, 它是 Java 中的数据库连接规范.JDBC 插入操作import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.SQLException;public class TestJD
2020-05-11 14:07:43
108
原创 MySQL 事务
事务的背景(1)事务是指逻辑上的一组操作,组成在这组操作的各个单元要么全部成功, 要么全部失败。事务中的典型事例: 转账例:A 的账户有 5000 块钱B 的账户有 1000 块钱当 A 转钱给 B 时,分成两个步骤来操作a. A 的账户 - 钱b. B 的账户 + 钱此时当执行完 a 操作的时候,可能出现极端情况,导致 b 操作没有正确执行,这是一组操作。事务的存在就是为了解决类似于转账这样的问题的。(2)事务的作用:保证在一个事务中多次操作数据库表中的数据时,要么全部成功,要么.
2020-05-10 21:41:08
121
原创 MySQL索引
什么是索引索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现.数据库中的表, 数据, 索引之间的关系相当于书, 书籍内容和目录之间的关系; 索引所起到的作用和目录也相似, 可以用于快速定位, 检索数据, 索引可以提高数据库的性能, 避免出现顺序遍历的情况, 优化了查询速度.索引的工作原理2.1 为...
2020-05-05 10:49:52
76
原创 MySQL表的增删改查(进阶)
数据库的约束1.1 NULL 约束创建表时, 可以指定某列不为空例如:1.2 UNIQUE 唯一约束指定某列是唯一的, 不重复的例如:1.3 DEFAULT 默认值约束例如: 指定插入数据时, name 列为空, 默认值为 ‘unknown’1.4 PRIMARY KEY 主键约束相当于 NOT NULL 和 UNIQUE 的结合对于整数类型的主键, 常搭配自增长 a...
2020-05-04 18:44:28
1062
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人