自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 排序算法复杂度与稳定性图

2020-08-25 12:34:00 184

原创 数据库索引的作用?什么时候用索引?优缺点?

数据库索引索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。索引类型(1)普通索引◆创建表的时候直接指定CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); 删除索引的语法: DROP INDEX [indexName] ON mytable;

2020-08-12 20:04:12 5479

原创 一篇总结关于HTTP协议

HTTP是什么HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,

2020-08-11 23:41:26 179

原创 线程池七个参数与阿里巴巴开发手册

什么是线程池在一个应用程序中,我们需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建并销毁线程的过程势必会消耗内存。而在Java中,内存资源是及其宝贵的,所以,我们就提出了线程池的概念。线程池:Java中开辟出了一种管理线程的概念,这个概念叫做线程池,从概念以及应用场景中,我们可以看出,线程池的好处,就是可以方便的管理线程,也可以减少内存的消耗。如何创建线程池可以通过ExecutorService创建public class ThreadDemo { public static v

2020-08-11 23:00:58 375

原创 饿汉、懒汉之单例模式!!

单例模式是什么?为什么需要单例模式单例模式顾名思义,就是在整个运行时域,一个类只有一个实例对象。为什么需要单例模式,因为有的类实例对象创建与销毁资源消耗不大,比如String,有的类庞大复杂,如果频繁创建销毁会造成不必要的浪费。比如创建数据库连接对象Connection con,可以使用单例模式,避免重复创建销毁。饿汉模式public class Singleton { private final static Singleton INSTANCE = new Singleton(); pri

2020-08-06 15:28:18 127

原创 JVM GC等

动态内存管理器就是平时所说的GC(Garbage Collector)本质上,我们回收不再使用的内存,真正的思想是回收死对象PC/栈 —— 和唯一的一个线程强绑定,线程出现是,需要这块内存。线程结束时,这块内存就可以回收了。所以这块内存的分配时机时非常明确的,所以不需要GC来花大精力操心常量池+方法去 : 这两块内存,占比比较小,里面的数据很少会失去作用,回收这块垃圾性价比不高,也不是GC的重点考虑堆: GC 重点考虑的,是如何管理堆上的内存因为如果只回收内存的话,可能在对象中出现一半回收,一

2020-07-06 17:43:10 95

原创 JVM内存划分

JVM内存区域程序计数器(线程私有)程序计数器是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。如果当前线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是一个Native方法,这个计数器值为空。程序计数器内存区域是唯一一个在JVM规范中没有规定任何OOM情况的区域!栈(线程私有)虚拟机栈描述的是Java方法执行的内存模型 : 每个方法执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一

2020-06-28 16:42:09 98

原创 【图解】浏览器输入url发生了什么

浏览器输入url–应用层接收到url准备开始解析把url 分为图中四个部分进行解析调用Socket调用socket接入目标host和端口TCP建立连接开始三次握手TCP的传递IP协议IP五元组传输进入数据链路层广播域找到目标哦路由器目标数据链路层接收到到此为止,无限循环TCP视角:三次握手浏览器视角:HTTP层的视角...

2020-06-16 21:04:49 167

原创 TCP-IP(四)

TCP 整理TCP 属于传输层协议:端对端的通信、实现可靠的通信客户端通过A应用层—ATCP—BTCP—B应用层应用层驱动的方式:通过 socket 编程的方式网络层驱动方式:TCP 收到一个TCP Segment(Header + Payload)可靠性是核心什么是可靠性如何保证可靠性:学习各种机制确认应答-超时重传连接管理发送量控制——拥塞控制TCP vs UDP可靠、有链接、面向字节流 vs 不可靠、无连接、面向数据报文TCP 不具有广播特性(一个人说,多个人听)

2020-06-11 15:03:11 170

原创 TCP(三)控制

TCP连接管理涉及双方四人,通信的两端和每端有的应用层和TCP协议栈ack标志位在整个tcp连接期间,只有第一个segment 值为零,以后都是1TCP为了追求可靠性,进行发送量的控制 —— 广义上的“流量控制”发送方如果无脑发送数据,接收方的缓冲区满了就堵塞了所以要进行发送量的控制发送量受到哪些因素影响?接收方的接受能力(流量控制)网络情况的影响(拥塞控制)流量控制Flow Control 根据接收方接受能力,进行发送量的控制机制作为发送方,如何得知接收方的接受能力?在He

2020-06-08 16:30:11 244

原创 TCP协议(二)建立连接的过程

TCP协议栈内部需要进行连接管理一个连接有三个阶段:建立连接 -> 连接可用 -> 关闭连接三次握手 —— 建立连接的过程四次挥手 —— 管理连接的过程TCP连接管理之三次握手TCP上发送的任何数据(不包含确认数据),都需要进行确认为什么TCP的建立连接过程是三次握手,而不是2或者4呢?因为两次握手就无法保证双方数据都同步给对方了四次握手发送的数据就浪费了三次握手时,TCP连接中的状态变化三次握手过程 应用层不可见四次挥手有三种可能第一种不是同时提分手第二

2020-06-03 21:03:41 637

原创 TCP协议(一)

TCPTransmission Control Protocol 传输 控制 协议作为一个传输层协议 天生的职责 —— 实现端对端更远大的目标 —— 职责:实现可靠的 端对端 通信学些 TCP 的核心就是理解: 可靠性什么是可靠性网络传输是天生不可靠的!为什么网络传输不可靠?数据通过物理介质传输的,传输过程有一定概率 1/0 之间被 修改 ;信号有衰减等因素网络上的数据是经过一个一个路由器传输的,每台设备都有一定概率损害技术数据达到了,也不一定有序,网络上的通信数据是以ip包为单位,

2020-06-02 16:11:27 197

原创 通过 Servlet 实现简易博客系统

需求分析用户管理用户注册 静态:GET/register.html 动态:POST/register用户推出 动态 :GET/logout用户登录 静态:GET/login 动态:POST/login.html文章管理文章发表 动态 GET/publish 动态 POST/publish.html文章查看 GET/a?id=<文章id> GET/a/id图片管理图片查看 GET/i?id=<图片i

2020-05-27 21:10:45 318

原创 ServLet 开发

Web 开发Servlet 开发使用 IDEA 创建 Servlet 的流程准备阶段 + 开发阶段 @开发环境构建阶段 + 部署阶段 @构建环境运行阶段 @运行环境Servlet 标准规定了 环境运行上,的目录结构Tomcat 在 Servlet 运行过程中所起的作用HTTP 服务器 Servlet 容器把浏览器发送的 HTTP 请求,进行解析, 并按照 Servlet 标准,封装成 HttpServlRequest 对象 ,根据指定规则 —— 找到对应的 Servlet

2020-05-15 12:47:46 205

原创 创建Servlet项目

Servlet开发为什么需要用Servlet开发 ?之前通过 tomcat 访问的资源,都被称为静态资源 —— 资源都是固定的,不能随着 query string 或者 请求中的 body 不同而有不同的结果。query string 之前的部分确定了,返回的内容就不会变化但是实际中需要动态资源,比如登录密码正确就返回正确,密码错误就返回错误什么是 Servlet 开发 —— 它是 java 规定的一套 web 开发的标准名称, 类似之前学过的 JDBC 。Servlet 本质是一个标准

2020-05-09 17:25:20 225

原创 HTML简单知识

分类Web前端分为 html、css、jshtml表示内容css表示排版js在前端处理一些逻辑html: <h1>I am a HTML file </h1>css: h1 { color : yellow; font-sizr : 150px;}css就是影响html排版的HTMLhtml是超文本标记语言,浏览器具备解析html的能力,所以才...

2020-05-08 17:15:30 143

原创 HTTP协议

Http协议HTTP 协议是应用层协议,默认端口为 80URL 则为资源的唯一表示HTTP 协议的流程理解HTTP请求的语义表达的是 对服务端上的某一个资源,提出某种动作的要求。动作就包括CURD请求行:HTTP方法 GET/POST PUT/DELete/ HEADURL : 标识唯一的资源HTTP 协议的版本:1.1 3.0请求头:一组一组的 Key-Valu...

2020-05-05 11:39:57 352

原创 网络基本原理-Socket编程(2)

TCP 协议下的 C/SUDP : 不可靠的、无连接的、发送/接受数据时,是以数据报为单位的TCP: 可靠的、有链接的、发送数据时是以数据流的形式可靠/不可靠 : 可靠并不能代表就一定能通过网络发送成功。而是发送的数据尽可能的保证成功,即使失败了,发送方也有感知面向字节流: 一个连接可以只传递一组 请求-响应:发送“你好\r\n”接受是 “你”“好””\r“"\n",当收到EOS时...

2020-04-29 15:14:23 162

原创 网络基本原理-Socket编程(1)

网络基本原理:局域网的概念:局域网内部的结点可以直接通信(广播域)跨局域网通信,需要经过路由器中转,路由器用来连接局域网网络的分层 —— TCP/IP 的五层分层应用层 > 传输层 > 网络层 > 数据链路层 > 物理层网络传输的三个场景局域网内部,结点到结点 —— 广播域/冲突域/MAC地址局域网内部,应用层到应用层 —— 封装 + 解包/分用...

2020-04-28 11:16:44 147

原创 IO小应用

文件复制import java.io.*;public class FileCopy { public static void main(String[] args) throws IOException { String srcPath = "src.png"; String destPath = "dest.png"; // 1....

2020-04-20 16:57:29 129

原创 IO

Input的基本套路:对于文本流try (InputStream is = new FileInputStream("文件名.txt")){ try (Scanner sc = new Scanner(is, "UTF-8")) { //利用scanner直接读取文本内容 while (sc.hasNext()) { String line = scanner.nextLi...

2020-04-20 16:48:14 174

原创 多线程(3)

线程池1.不用线程池的场景:一个线程负责读取用户输入,其他线程计算斐波那契数列main() { while (true) { int n = scanner.nexxtInt(); new Calc(n).start(); }}2.通过线程池解决(Pool技术)提前雇佣好5个服务员3.线程池的优点 —— 减少频繁创建、销毁线程的开销。4.JDK中线程池使用 —— 公司...

2020-04-15 17:34:06 114

原创 多线程(2)

线程安全什么是线程安全 —— 保证 100% 正确才是线程安全。反之,只要有错误的可能性,就不是线程安全的。随机性来源 —— a.被从CPU上掉下来 b被选中上CPU。随着计算的次数越大,需要的CPU时间也就越多。可能被分到多个时间片的概率也就越大,所以出错的概率越大。会出现线程安全的两个必要的条件1.线程之间是有数据共享的2.即使线程之间出现了数据共享,只要大家都是只读,...

2020-04-04 18:47:02 110

原创 进程与多线程

什么是多线程?线程是操作系统进行时间片分配调度的最小单位进程是操作系统资源分配的最小单位在每个进程中,至少都有一个线程(主线程)在每个进程中,也允许拥有多个线程创建线程public class 手动创建线程 { static class MyThread extends Thread { @Override public void run() ...

2020-03-29 17:50:18 101

原创 操作系统、进程

冯诺依曼体系结构我们常见的计算机和不常见的计算机大部分都遵守冯诺依曼体系操作系统概念任何计算机系统都包含一个基本的程序集合,称为操作系统。笼统的理解,操作系统包括:内核(进程管理、内存管理、文件管理、驱动管理)其他程序(函数库等)OS定位在整个计算机硬件架构中,操作系统的定位是一款纯正的搞管理的软件OS在管理的是资源的分配权,不是以用户为单位,以进程为单位进行分配内存通过空间...

2020-03-28 16:07:26 144

原创 哈希表实现

哈希和树的区别一个是表结构,一个是树结构一般哈希值通过 key % arr.length 获得可是如果哈希值相同了怎么办呢?这就叫哈希冲突解决哈希冲突有两种方法:闭散列:线性探测,二次探测开散列:又称为哈希桶,拉链法注意:任何情况下,哈希表都不会存满数据,数据越多,哈希冲突的概率越大,一般当负载因子大于或者等于某一个阈值(0.7)时, 就需要进行扩容开散列:哈希桶就是...

2020-03-26 21:12:29 92

原创 数据结构总结 思维导图

2020-03-26 20:30:35 151

原创 二叉搜索树

实现二叉搜索树查找: public Node find(int value){ if(root == null) return null; Node cur = root; //从根开始搜索 while(cur != null){ if(cur.value == value)...

2020-03-21 23:34:01 113

原创 MySQL 复杂查询

基础查询单表查询SELECT 子句 ———— 对列作筛选FROM 子句 ————置顶查询数据源WHERE 子句 ———— 对行做筛选ORDER BY 子句 ———— 对结果集排序LIMIT 子句 ———— 对排序后结果取子集聚合查询场景:学生表(id、姓名、班级名称)1.查出一共多少学生2.查出某个班有多少学生3.查出每个班有多少学生//1.查询表中有多少行数...

2020-03-17 22:06:37 126

原创 七大排序及其时间测试

一、冒泡排序public class MyBubbleSort { /* 冒泡排序: 时间复杂度:O(n) ~ O(n^2) 最好:顺序 + 标记 最坏: 逆序 稳定性: 稳定 空间复杂度: 常数空间 ---> O(1) */ pu...

2020-03-11 12:00:38 156

原创 排序 之 插入、 希尔、选择

插入排序插入排序类似于插入扑克牌

2020-03-01 19:11:37 119

原创 JAVA 堆 与 优先级队列 关系

一 : 堆什么是堆?堆可以理解成一个完全二叉树只不过堆是以数组的形式表现出来的满足任意结点的值都大于其子树中结点的值,叫做大堆,或者大根堆,或者最大堆4. 反之,则是小堆,或者小根堆,或者最小堆。大堆与小堆可以用于筛选数组之中最大值或是最小值,比如在千万级别的数据中找到前五个最大的值,那么就要建立一个有五个元素的小堆,每一次筛选,如果筛选的元素比堆顶就找到堆顶最小的元素将其换下来那...

2020-02-28 14:51:45 207

原创 二叉树 前中后 非递归遍历

非递归遍历就是迭代遍历模拟的就是递归中的过程,代码比递归略微复杂//非递归前序遍历 public static void prOrderNoR(TreeNode root){ Stack<TreeNode> st = new Stack<>(); TreeNode curNode = root; while(c...

2020-02-26 11:27:25 122

原创 先以先序建立一个二叉树,然后再将此二叉树以中序遍历输出

此题的重点在于如何按照题目描述的顺序建立二叉树 public static Node buildTree(String s) { //以中序遍历创建二叉树 if (s.charAt(i) != '#') {//如果不是空 Node root = new Node(s.charAt(i));//根是当前i的值 ...

2020-02-23 17:23:22 2093

原创 JDBC1、链接mysql和命令方法

首先去甲骨文官网下载mysql的jar包然后将jar包放在新建idea工程的lib目录下(需要新建一个lib文件夹)然后再idea中文件中的Project Srtucture中导入jar包以上工作完成后就可以敲代码了import com.mysql.jdbc.Driver;import java.sql.*;public class Main { public static...

2020-02-21 16:15:38 102

原创 MySQL简易的博客关系表 设计

简单的设计一下博客中用户、文章、评论、点赞之间的关系用户 -----> 文章 是一对多文章 -----> 评论 是一对多点赞 ------> 用户 是多对多多对多就要在其之间建立一个表表明两者的点赞关系比如用户到评论的是 1 : n 那么评论表中就会要有用户的id文章对评论是 1 : n 那么评论表中就会有文章id…………以此类推首先我们...

2020-02-19 14:32:07 485 1

原创 LeetCode 150.逆波兰表达式求值

思路:本题主要考察的是栈的知识点,看到逆波兰表达式就联想到栈的特点:后进先出,与本题的运算符后置很相似代码:import java.util.Stack;public class Solution { public int evalRPN(String[] tokens) { Stack<Integer> stack = new Stack<...

2020-02-18 17:03:28 108

原创 Java二叉树 层序遍历

思路:使用队列进行遍历,先进入根,然后出队时让他们的子节点进入队列代码:public class BinaryTree { public class leverOder(TreeNode root) { queue<TreeNode> queue = new LinkedList<>(); if (root != null) { queue.offer...

2020-02-18 12:25:35 131

原创 LeetCode.100 相同的树

思路:进行前序比较,如果相同再进行比较代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */c...

2020-02-17 16:15:53 67

原创 二叉树的搜素

二叉树搜索思路:用递归进行根的判断,如果根不是,进行左子树的查找,如果根 是,则返回,如果左子树没有,则进行右子树的查找public class BinaryTree { public Node find(Node root, int value) { if (root == null) { return root; } if (root.value == value) {...

2020-02-17 13:11:35 77

空空如也

空空如也

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

TA关注的人

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