自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 IO(一)文件操作(罗列出一个目录中的所有文件)、绝对路径、相对路径

一、文件基本操作public static void main(String[] args) throws IOException { // 文件操作 File file = new File("d:/test.txt"); System.out.println("文件是否存在: " + file.exists()); System.out.println("文件是否是普通文件: " + file.isFile()); Sys

2020-07-31 23:25:27 408

原创 mysql -- 事务(脏读、不可重复读、幻读)

一、概念事务就是把一组操作打包在一起,执行的时候使这些操作之间满足一定的特性,避免出现问题。例:如果 A 向 B 发 200 红包,此时 A 的余额减少 500 元,若 B 收了红包之后余额并没有增加 500 元,则说明 发红包、收红包 这一组操作出现了错误。事务就是防止中间出现错误,因此事务应该具备以下特征:原子性(一个事务是一个不可分割的工作单位)一致性(数据在事务执行前后没有错误)持久性(事务执行之后,数据被持续修改)隔离性(多个事务并发执行时,事务之间不能互相干扰)ps : 隔离

2020-07-31 23:13:45 133

原创 线程的重点总结

一、线程不安全的原因线程是抢占式执行的线程实现不是原子的多个线程尝试修改同一个变量内存可见性导致的线程安全问题 (防止编译器过度优化:出现一个线程读,一个线程写的情况)指令重排序 (编译器在编译代码时, 会针对指令进行优化, 调整指令的运行顺序, 提升程序运行效率)二、保证线程安全使用没有共享资源的模型适用共享资源只读不写的模型a. 不需要写共享资源的模型b. 使用不可变对象保证线程安全(会写代码)a. 保证原子性 ( 加锁 synchonized)b. 保证可见性 (保

2020-07-31 21:37:26 80

原创 线程(九)-- 线程池

一、基本介绍线程池:已经包含了一些线程, 以便直接使用.优点:避免了频繁创建 / 销毁线程的开销线程池本身就是生产者 - 消费者模型。生产者 - 消费者模型介绍核心操作:execute: 把一个任务加到线程池中shutdown: 销毁线程池中的所有线程线程池的组成:(需要管理两个部分: 将要执行的任务, 正在执行任务的线程)1. 一个类, 描述具体线程要做的工程(借助 Runnable 表示)2. 需要一个数据结构来组织若干个任务(BlockingQueue)3. 先有一个类, 表示

2020-07-31 21:15:34 126

原创 @WebServlet 的使用

一、作用servlet可以直接通过 @WebServlet 标签配置URL映射,不再需要从 web.xml 里面配置 servlet,使操作更便捷。二、使用方法如果对 @WebServlet 内容没有显式指定,则默认其含义等价于< servlet-name >。例:@WebServlet("/upload")public class UploadServlet extends HttpServlet { ...... }若对其进行具体的属性设置,则需要了解它的具体属性。

2020-07-31 17:26:48 1384

原创 OSI七层模型和TCP/IP五层(或四层)模型

一、OSI七层模型OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机。OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;。它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯; 而缺点则是既复

2020-07-29 23:11:06 803

原创 数据库连接不上问题 和 不能识别汉字问题

一、数据库连接错误在 mavan 中连接数据库时有时会发生连接失败的错误。通过提示,发现错误是以下两行代码:发生这种情况,很大概率是连接数据库的字符串输入错误:username 和 password 一定要填写正确。url 一般要确定是否连接 SSL根据MySQL 5.5.45+、5.6.26+和5.7.6+的要求,如果不设置显式选项,则必须建立默认的SSL连接。需要通过设置useSSL = false来显式禁用SSL,或者设置useSSL = true并为服务器证书验证提供信任存储。

2020-07-29 09:24:35 735

原创 线程(八)定时器实现 -- java

一、定时器的基本内容定时器: 多线程编程中的一个重要且常用的组件。例如:浏览器内部就有定时器,当浏览器发生请求时,定时器就开始定时。当规定时间内并没有响应(页面并未跳转,数据没有提交等情况),就会强制终止请求,返回错误页面。定时器的基本构成, 有三个部分:用一个类来描述 “任务”(Task 类)用一个阻塞优先队列来组织若干个任务. 让队首元素就是时间最早的任务.如果队首元素时间未到, 那么其他元素也肯定不能执行.用一个线程来循环扫描当前的阻塞队列的队首元素, 如果时间到, 就执行

2020-07-27 23:18:34 126

原创 线程(七)阻塞队列 -- java

一、阻塞队列可用来实现生产者消费者模型(典型的并发编程)基于数组实现。生产者消费者模型:两个线程分别模拟 生产者 和 消费者.分别模拟两次情况:第一次, 让给消费者消费的快一些, 生产者生产的慢一些.(在线程一里加入 Thread.sleep(500); )预期情况: 消费者线程会阻塞等待. 每次有新生产的元素的时候, 消费者才能消费.实际情况: 只有生产者生产了新元素, 消费者才能进行消费(生产消费交替实现)第二次, 让消费者消费的慢一些, 生产者生产的快一些.(在线程二里加入 Thre

2020-07-27 23:06:34 68

原创 线程(六)单例模式(饿汉模式、懒汉模式)-- java

一、单例模式单例模式是常见的"设计模式"设计模式: 一些解决方法模板单例模式: 保证指定的类只能有一个实例.二、代码实现(一)饿汉模式 static class Singleton { // "饿汉模式": 只要类被加载, 实例就会立刻创建. // => 线程安全. // a. 创建一个表示单例的类 // b. 把 构造方法 变成私有, 此时在该类外部就无法 new 在这个类的实例了. priva

2020-07-27 22:46:27 91

原创 线程(五)synchonized,volitale,wait 用法 -- java

一、线程不安全的具体分析二、解决方法(一)synchonized 用法:static class Counter { public int count = 0; synchronized public void increase() { // synchronized: 监视器锁 // 进入方法之前会先尝试自动加锁(加锁不成功会自动阻塞,直到成功加锁) // 方法执行完毕之后会自动解锁 //

2020-07-27 22:17:28 100

原创 线程(四)解决线程不安全问题

一、何为线程不安全?线程安全: 多线程并发执行时, 没有产生逻辑错误线程不安全: 多线程并发执行时, 产生逻辑错误体会线程不安全:static class Counter { public int count = 0; public void increase() { count++; // 自增操作步骤: // 1. 把内存中的数据读取到 CPU 中(load) // 2. CPU 中把数据加一(increase)

2020-07-27 22:08:52 260

原创 mysql密码正确出现闪退:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)

有时候运行 mysql 输入密码会出现闪退情况在 cmd 输入 mysql -uroot -p 会出现错误:ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)主要原因是:电脑杀毒软件可能会关闭 mysql。查看方法:在搜索中输入 service(服务)并打开检查 mysql 是否启动(也可右键点击查看),并启动。若找不到 mysql 命令,则需手动安装。cmd 以管理员身份打开,输入 mysql

2020-07-27 15:33:57 418

原创 Selenium IDE 出现 Exceeded waiting time for new window to appear 2000ms

如果运行Selenium IDE 出现如下问题:可能原因有两个:浏览器自动拦截页面跳转,如下图(火狐浏览器):解决方法:若还是出现跳转超时的情况,则是第二种情况。网速慢若页面跳转过快,则当页面还未加载成功即跳转就会报错。解决方法:减慢运行速度完成上述操作,页面即可跳转成功。ps: 打开的多个页面要一个个关...

2020-07-27 14:08:51 2124 1

原创 线程(三)线程等待、线程状态 -- java

一、线程等待public void join(): 等待线程结束 // 线程等待(线程之间是并发执行的关系) // join 方法会阻塞所在的线程, 让其他线程先执行, 以此控制线程结束的先后顺序. public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread() { @Override public

2020-07-23 23:03:20 1800

原创 线程(二) 线程中断、thread.start() 与 thread.run() 的区别与联系 -- java

一、thread.start() 与 thread.run() 的区别与联系run 方法和 start 方法是不同的,启动线程必须要调用 start 方法static class MyThread extends Thread { @Override public void run() { System.out.println("线程"); } } public static void main1(String[]

2020-07-23 20:50:12 172

原创 进程和线程(一)

一、操作系统(OS)的基本概念概念:任何计算机系统都包含一个基本的程序集合,称为操作系统。笼统的理解,操作系统包括:a. 内核(进程管理,内存管理,文件管理,驱动管理)b. 其他程序(例如函数库,shell程序等等)设计目的a. 与硬件交互,管理所有的软硬件资源(对内且对下)b. 为用户程序(应用程序)提供一个良好的执行环境(对外且对上)二、进程对于操作系统来说,一个任务就是一个进程(Process)。进程是担当分配系统资源(CPU时间,内存)的实体,是具有动态特性的。

2020-07-20 17:57:53 178 1

原创 冯诺依曼体系结构

一、冯·诺依曼体系结构  冯·诺依曼体系结构冯·诺依曼理论的要点是:数字计算机的数制采用二进制;计算机应该按照程序顺序执行。 人们把冯·诺依曼的这个理论称为冯·诺依曼体系结构。  根据冯·诺依曼体系结构构成的计算机,必须具有如下功能:把需要的程序和数据送至计算机中。必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。能够根据需要控制程序走向,并能根据指令控制机器的各部件协调操作。能够按照要求将处理结果输出给用户。  为了完成上述

2020-07-20 15:57:38 1370

原创 哈希表及哈希冲突避免

一、哈希表概念顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。搜索的效率取决于搜索过 程中元素的比较次数。如果构造一种存储结构,通过某种函 数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快 找到该元素。当向该结构插入、搜索元素,此方法即为哈希(散列)方法。哈希方法中使用的转换函数称为哈希 (散列) 函数,构造出来的结构称为哈希表(Hash Table)(或者称散列表) 。

2020-07-20 14:29:05 2601 1

原创 二叉搜索树的插入、删除和创建 -- java

一、二叉搜索树二叉搜索树满足条件:若左子树不为空,则左子树上所有节点的值都小于根节点的值若右子树不为空,则右子树上所有节点的值都大于根节点的值其中序遍历是一串有序数列查找:二叉搜索树的创建、插入和删除public class BinarySearchTree { class Node { int key; int val; Node left; Node right; public Node

2020-07-19 23:59:24 145

原创 Map 和 Set -- java

一、基本概念Map 和 Set 常用于搜索。一般把已知的数据称为关键字(Key),和关键字对应的称为值(Value)。对于搜索模型:纯 key 模型,即 Set 的应用环境,只需要判断关键字在不在集合中即可,没有关联的 value;Key-Value 模型:即 Map 的应用环境,需要根据指定 Key 找到关联的 Value。二、基本用法Mapimport java.util.HashMap;import java.util.Iterator;import java.util.M

2020-07-19 23:50:30 66

原创 排序(二)冒泡排序、快速排序、归并排序 -- java

一、交换排序冒泡排序在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序。import java.util.Arrays;public class BubbleSort { public static void bubbleSort(int[] array) { //冒泡排序:在无序区间,通过相邻数的比较, //将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序 //时间复杂度:O(N

2020-07-18 23:53:20 125

原创 排序(一) 直接插入排序、希尔排序、选择排序、堆排序 -- java

一、排序(Sort)基本概念:排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。平时的上下文中,如果提到排序,通常指的是排升序(非降序)。通常意义上的排序,都是指的原地排序(in place sort)。稳定性(重点):两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法是具备稳定性的排序 算法。二、常见排序插入排序a. 直接插入排序每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入import java

2020-07-18 23:24:07 97

原创 优先级队列 top-K 问题 -- java

一、概念简介在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,首先处理优先级高的对象,然后处理次高的对象。举一个例子:在手机上玩游戏的时候,如果有来电,那么系统应该优先处理打进来的电话。在这种情况下,我们的数据结构应该提供两个基本的操作:一个是返回高优先级对象,一个是添加新的对象。这种数据结构就是优先级队列(Priority Queue) 。最常见的实现方式是用堆来实现。二、常见操作(代码在最后实现)入队列步骤(以大堆为例):a. 首先按尾插方式放入数组b. 比较其和其父节

2020-07-10 22:51:35 585

原创 堆 向上调整 向下调整 --java

一、堆的简介堆是一个完全二叉树,一般使用数组以层序遍历的形式存放。下标关系:已知父节点的下标,则:left = 2 * parent + 1;right = 2 * parent + 1;已知子节点的下标(不分左右),则:parent = (child - 1) / 2;堆的作用:快速找到集合中的最大(小)值二、大根堆、小根堆满足任意结点的值都大于其子树中结点的值,叫做大堆,或者大根堆,或者最大堆;反之,则是小堆,或者小根堆,或者最小堆。可以总结为:对于除根节点外

2020-07-10 21:58:53 1274

原创 非递归实现前序遍历、中序遍历、后序遍历(用栈和 List)

ps: 非递归 写 递归 要用 栈,用 List 也可实现。import java.util.ArrayList;import java.util.List;import java.util.Stack;public class ListTree { public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x

2020-07-10 18:27:49 350

原创 二叉树经典练习题(基础)-- JAVA

判定一棵树是否为完全二叉树判定两棵树是否相同判定两棵树是否有相同结构和节点值的子树找出树的最大深度判定一棵树是否为高度平衡的二叉树(一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1)判定一棵树是否对称判定一棵树是否镜像对称import java.util.LinkedList;import java.util.Queue;class TreeNode { int val; TreeNode left; TreeNode right; Tre.

2020-07-06 19:56:34 930

原创 二叉树的基本代码实现(关于节点) -- JAVA

首先,构建一棵树。 static class Node { public char val; public Node left; public Node right; public Node(char val) { this.val = val; } @Override public String toString() { return ".

2020-07-06 19:41:06 345

原创 二叉树的遍历 -- JAVA

一、二叉树的遍历根据访问结点操作发生位置命名NLR:前序遍历(Preorder Traversal 也称为先序遍历) —— 访问根结点的操作发生在遍历其左右子树之前。LNR:中序遍历(Inorder Traversal) —— 访问根结点的操作发生在遍历其左右子树之间。LRN:后序遍历(Postorder Traversal) —— 访问根结点的操作发生在遍历其左右子树之后。层序遍历:设二叉树的根节点所在层数为 1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问

2020-07-06 18:58:46 64

原创 树和二叉树的基本概念 -- JAVA

一、树定义(百度释义)树(tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。它是一种无向图(undirected graph),其中任意两个顶点间存在唯一一条路径。树图广泛应用于计算机科学的数据结构中,比如二叉查找树、堆、Trie树以及数据压缩中的霍夫曼树等。基本概念如图:a. 节点的度:一个节点含有的子树的个数称为该节点的度;如上图:A 的度为6b. 树的度:一棵树中

2020-07-06 18:32:14 112

原创 队列 -- JAVA

一. 队列队列是只允许在一端进行插入数据操作, 在另一端进行删除数据操作的特殊线性表. 进行插入操作的一端称为队尾, 进行删除操作的一端称为队头.用链表实现队列(较常用):public class MyQueue { // 链表尾部作为队尾(方便插入元素), 链表头部作为队首(方便删除元素) // 为了更方便的实现尾插操作, 多搞一个引用指向链表的尾部 static class Node { public int val; publ

2020-07-06 16:53:31 131

原创 栈 -- Java

一. 栈栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶...

2020-07-06 16:20:36 419

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除