自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL数据库:索引和事务

1. 索引1.1 索引的概念① 索引就是目录,目的是为了提高 查询 的效率,但是会拖慢增删改的效率.② 创建索引,也需要时间和空间的开销.1.2 作用数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。 索引所起的作用类似书籍目录,可用于快速定位、检索数据。 索引对于提高数据库的性能有很大的帮助。1.3 使用场景数据量较大,且经常对这些列进行条件查询。 该数据库表的插入操作,及对这些列的修改操作频率较低。 索引会占用额外的磁盘空间。大部分场景

2021-06-18 13:48:49 555 13

原创 Java中的垃圾回收(GC)

垃圾回收,英文名Garbage Collection(GC).Java进程在启动后,会创建垃圾回收线程,来对内存中无用的对象进行回收.目录1. 那么问题来了,什么是垃圾?2. 什么是垃圾回收?3. 什么时候回收垃圾?4. 判断是否为垃圾的算法4.1 引用计数法4.2 可达性分析算法5. 回收的区域5.1 方法区的gc5.2 堆的gc6. 垃圾回收算法6.1 标记清除算法(老年代的回收算法)6.2 复制算法(新生代的回收算法)6.3 标记整理算法.

2021-06-16 12:52:52 2325 17

原创 Java运行时数据区域(内存划分)

线程私有区域: 程序计数器,Java虚拟机栈,本地方法栈. 线程共享区域: Java堆,方法区,运行时常量池.1. 程序计数器(线程私有) 程序计数器是一块比较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器(切换线程后,能恢复到正确的执行位置).2. Java虚拟机栈(线程私有)(1) 概念 虚拟机栈描述的是Java方法执行的内存模型 : 每个方法执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从...

2021-06-14 14:36:45 1900 10

原创 浅谈JVM

1. JVM是什么?JVM: Java Virtual Machine,Java虚拟机.什么是虚拟机?答: 虚拟机指 通过软件模拟的具有完整硬件功能的,运行在一个完全隔离的环境中的完整计算机系统.Java虚拟机,是虚拟机的一个简化版本,裁减了很多内容,完成Java字节码指令集的执行.2. Java文件的运行过程运行的第二步:对于单行字节码指令的翻译,速度很快,但是大量的字节码指令翻译积少成多,时间消耗也是比较大的.于是有了JIT即时编译器: 热点代码在运行时,编译为

2021-06-14 11:49:09 1281 2

原创 多线程基础---线程池

1. 作用线程的创建和销毁,都是比较消耗资源,代价比较大的.然而池,可以实现,不用反复创建对象,可以复用.2. jdk线程池 ThreadPoolExecutor 每个参数的含义public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable&gt

2021-06-10 21:47:23 614 33

原创 多线程基础---线程安全(原因及解决方法),synchronized,volatile关键字

1. 中断线程1) 使用标志位的方式public class FlagStop { private static volatile boolean isStop; public static void main(String[] args) throws InterruptedException { new Thread(new Runnable() { @Override public void run() {

2021-06-07 19:17:30 248 3

原创 多线程案例---单例模式

1. 什么是单例模式?1) 概念属于设计模式的一种,不是java独有,也不是多线程的知识.一个类型,为其他调用方提供本类的实例对象,始终都是同一个对象.2) 使用场景如 :使用JDBC操作数据库,此时数据库连接可以通过数据库连接池来获取DataSource ds=new MySqlDataSource();Connection c=ds.getConnection() ;//获取数据库连接连接池就可以使用单例模式,创建唯一的一个对象.3) 实现代码上有很多种实现方式,

2021-06-07 19:15:46 450 9

原创 多线程基础---线程的创建和启动,多线程并发执行时的特征,多线程的效率问题

通过一张图先来回顾一下进程的状态:其中阻塞状态: 表现为程序暂停,等待满足条件之后才能恢复并执行.处于就绪状态还是运行状态: 系统调度进程,用户程序无法决定启动后就能直接进入运行态.获取到时间片就是运行态,没有获取到时间片就是就绪态.线程的状态和进程的状态类似.目录1. 线程的创建2. 线程的启动3. 观察多线程并发执行时的特征4. 多线程的效率问题5. Thread基础API1. 线程的创建共有三种方式,如下:1) 继承ThreadThread.

2021-06-01 12:01:55 501 3

原创 应用层协议----HTTP,DNS,NAT,NAPT

应用层的作用是定义源主机,目的主机之间发送和接收的数据,在应用程序使用的协议.其中代表性的协议有:HTTP,DNS,NAT,NAPT.目录1. HTTP协议2. DNS协议3. NAT4. NAPT1. HTTP协议详情点击查看2. DNS协议1)概念域名转ip的一种协议,ip地址不方便人使用,创造的一种方便记忆的标识网络地址的方式.2)如何查找某个域名对应的ip?首先明确,公网域名是需要在网上申请的,绑定的http协议必须是80端口,一个域名申请时,可以.

2021-05-26 19:13:57 686 12

原创 数据链路层----以太网,MTU,ARP

数据链路层的作用是互联设备之间传送和识别的数据帧.代表性协议有:以太网,MTU,ARP.1. 认识以太网数据链路层的封装,分用,是基于以太网的数据格式(包含了源mac和目的mac).认识MAC地址:硬件的网络传输数据,必须使用mac地址表示下一个设备,体现为网络传输时,每一跳都会使用mac地址. 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).2. MTU1)概念处于.

2021-05-26 15:24:34 290 4

原创 网络层----IP协议和路由

网络层的作用是地址管理和路由选择,是基于IP协议和路由技术来实现的.目录1. IP协议2. 路由1. IP协议1) 基本概念主机: 配有IP地址, 但是不进行路由控制的设备;路由器: 即配有IP地址, 又能进行路由控制;节点: 主机和路由器的统称;2) 协议头格式第一行中,8位服务类型指的是:3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本,四者冲突,选一个就.

2021-05-26 12:02:02 735 7

原创 传输层协议----TCP(三次握手,四次挥手)和UDP

目录1. 端口号2. UDP3. TCP4.TCP和UDP的区别5.粘包问题传输层的作用是负责数据能从发送端传输接收端,即确保网络数据传输的可靠性和安全性.下面我们先来简单的了解一下端口号.1. 端口号1) 作用:对应某台主机中的进程.2) 认识默认端口号:http服务器80端口;ssh服务器, 使用22端口;ftp服务器, 使用21端口;telnet服务器, 使用23端口;https服务器, 使用4433) 问题1: 一个进程是否可以绑定多个端口号?..

2021-05-23 20:20:30 423 5

原创 网络基础理论--协议,网络分层(OSI七层模型,TCP/IP五层模型),封装和分用

1. 网络发展史① 独立的主机 (没有互相连接,不能在主机之间传输数据)② 网络互联③ 局域网 (LAN) 交换机-路由器 交换机④ 广域网 (WAN) 国际上所有国家都认可的网络节点,组建成一个庞大的网络图.2. 协议网络数据传输,经过的所有网络节点,都要遵循的规则,最终体现为数据包的数据格式.3. 网络分层...

2021-05-22 20:41:11 457

原创 进程和线程的区别

1. 进程(1) 什么是进程?进程就是一个个正在运行的程序;当双击某个exe,试图运行它的时候,操作系统就会创建出一个对应的进程出来,然后操作系统就会根据这个进程的代码逻辑来完成具体的任务.并发: 计算机同一时刻要执行很多很多的任务,也就同时具备很多的进程,这些进程之间看起来就像是在同时执行.(2) 特点独立性,进程之间互不干扰.(3) 问题多进程模型效率不高(由于要分配系统资源(内存)),创建/销毁进程开销大.2. 线程为了解决上面进程存在的问题,所以引入了线程,线程就

2021-05-15 20:49:38 145 1

原创 Cookie和Session

目录Cookie1.概念2. 作用3. 应用场景(用户免登陆)Session1. 概念2. 作用3. 原理Cookie1.概念标准的请求头: Cookie: 键=值标准的响应头: Set-Cookie : 键=值2. 作用保存信息,即保存在客户端本地和浏览器相关的文件夹,每次发送http请求时,请求头就会自动携带cookie键,值就是之前保存的信息.3. 应用场景(用户免登陆)流程:①输入账号密码,勾选用户免登陆②点击登陆按钮,..

2021-05-11 10:29:09 137 1

原创 Servlet(1)

1. 什么是Servlet?servlet是开发webapp的一种方式.学习servlet的目标就是能写出webapp(网站).tomcat 是一个Http服务器,可以想象成淘宝的电商平台, webapp是一个一个的淘宝店铺,要运行在tomcat之上. servlet是淘宝平台给淘宝店铺提供的服务(例如: 买家和卖家之间可以通过阿里旺旺沟通,卖家可以设定优惠劵,买家可以统计某段时间的营业额...)tomcat和servlet的关系:tomcat也称为: web服务器, servlet容

2021-04-25 12:53:39 173

原创 Http的协议格式、方法和状态码

协议是网络上数据传输时约定好的统一的数据格式,Http是网络分层中的应用层(应用程序)协议.1. Http的协议格式行信息分为 请求行 和 状态行/响应行.其中在请求行中Method用来标识操作的类型(比如我们吃饭是网上点餐还是线下就餐).响应行中的状态码是一个数字,标识服务器处理当前请求的结果(比如我们想要就餐,提供就餐或者座位满了不提供就餐)2. Http的方法这里只说一下GET和POST的区别.a) GET没body,请求数据只能在url queryString

2021-04-09 11:26:05 267

原创 URL的格式

url就是我们平时所说的"网址".它的格式为 http://域名或ip:端口号/应用文上下路径/服务路径?键1=值1&键2=值2http是协议域名或ip绑定网络上的主机端口号绑定进程应用文上下路径绑定项目服务路径绑定资源键1=值1&键2=值2表示请求数据querySting,多个键值对之间&间隔,键=值.URL在发送时会进行编码,接收后需要解码....

2021-04-09 09:49:07 2632

原创 MySQL: 表内容的查询---聚合查询和联合查询(进阶)

1. 把查找结果作为另一张表的新增数据2.聚合查询把行之间的数据进行聚合,和列无关,也就是对每一行数据的某一列进行聚合.MySQL中提供了一组现成的聚合函数:① count(字符串和数字均可)② sum ③avg ④max ⑤min(只能针对数字进行这些操作,不能针对字符串)...

2021-04-07 15:44:27 695

原创 MySQL: 约束

1. 什么是约束?在创建表时设置约束,对于某一列值能填什么内容做出限制,每一列独立设置自己的约束.2. not null描述: 保证插入的值不为 null ,创建表时,写在类型的后面.此时向 id 列插入空的值会报错.3. unique描述: 保证插入的值在被约束的这一列中是唯一的不能重复.如果向 name 这一列插入重复的值会报错.4. default描述: 默认值给带有默认值的列插入 null 最终结果是什么?结论: 如果显示的给...

2021-04-07 15:21:54 124

原创 MySQL: 表内容的修改和删除(基础)

目录1. 修改(update set)1.1修改一列1.2同时修改多列1.3没有where子句,整个列的值都被修改​2. 删除(delete from)1. 修改(update set)1.1修改一列1.2同时修改多列用逗号间隔即可.1.3没有where子句,整个列的值都被修改2. 删除(delete from)a) delete from 表名 where 筛选条件b) 不加 where 筛选条件时,会删除整张表的内容,但...

2021-04-07 14:01:53 197

原创 看完这篇再也不怕青蛙跳台阶啦~

题目描述一只青蛙可以跳上 1 级台阶,也可以跳上 2 级台阶,求该青蛙跳上一个 n 级台阶总共有多少种跳法.思路这道题目可以看成斐波那契数列 将 n 级台阶的跳法看成 n 的函数 f(n) 当 n<2 时,只有一种跳法,即一次跳一级. 当 n>=2 时,可以跳一级,也可以跳两级.跳一级时,剩下的台阶数为 n-1,此时跳法数目就变成了剩下的 n-1 级台阶的跳法数目 f(n-1);跳两级时,剩下的台阶数为 n-2,跳法数目变成了剩下的 n-2 级台阶的跳法数目 f(n-2).

2021-04-06 12:51:08 96

原创 MySQL: 表内容的新增和查询(基础)

目录1. 准备工作2. 新增(Create)2.1 全列插入(以插入一组数据为例)2.2 指定列插入(以插入一组数据为例)2.3 插入多组数据3. 查询(Retrieve)3.1 查找所有列3.2 查找指定列3.3 查询字段为表达式3.4 给当前列起一个别名(as)3.5 对查询结果去重(distinct)3.6 排序(order by)3.7 条件查询(where)3.8 分页查询(limit)1. 准备工作首先准备一个表 grade,如下:

2021-04-03 17:13:58 905

原创 哈希表

1. 什么是哈希表想要查找一个元素方法有很多,比如说查找数组中的某个元素,直接遍历数组,依次判定比较,时间复杂度为O(N);或者将数组排成有序数组,再采用二分查找,时间复杂度为O(NlogN);还可以将数组的内容放到二叉搜索树中,时间复杂度为O(N)。那么能不能通过key,不需要遍历和比较,就能直接得到对应的value呢?为了实现这样的思想,于是就有了哈希表,奥秘就是借助了数组取下标的时间复杂度为 O(1),借助了内存的随机访问能力。即将 key 通过一定的数学变换,映射到数组下标上,如下示例:

2021-03-31 16:52:49 155

原创 MySQL: 常见的数据类型+数据库和数据表的查看创建和删除

1. 什么是数据库?数据库是“一个用来存储数据的软件”,数据库里面大量运用了各种数据结构,最终把数据组织在硬盘或者内存上。简单数据使用文件保存,复杂大量的数据,使用数据库会更方便更高效。2. 数据库的相关操作2.1 查看当前存在哪些数据库show databases;注意:可支持多行书写,遇到封号才算结束。2.2 创建一个数据库create database Anapple;如果数据库存在了,就不能重复创建,这个时候可以使用 create database..

2021-03-31 13:51:34 270

原创 二叉搜索树的查找插入和删除

1. 什么是二叉搜索树对二叉搜索树进行中序遍历,其结果是有序的。 若左右子树不为空,左子树上所有节点的值小于根节点的值,右子树上所有节点的值大于根节点的值。2. 实现二叉搜索树的 查找、插入、删除操作2.1 先准备一个二叉搜索树的节点class BinaryNode{ int key; int value; BinaryNode left; BinaryNode right; public BinaryNode(int key, int val

2021-03-30 17:22:05 333

原创 Map和Set的常用方法和注意点

Map 和 Set 两个接口分别被 HashMap、TreeMap 和 HashSet 和 TreeSet 实现。HashMap 和 TreeMap 两者用法相同,只是底层实现不同,HashSet 和 TreeSet 也一样。下面就以 HashMap 和 HashTree 为例。1. Map接口里面存储的是<key,value> 键值对,key一定是唯一的,不能重复,就像不同的身份证对应到不同的人。1.1 Map的常用方法① 增加,通过 put() 方法增加键值对Map..

2021-03-30 15:29:40 864

原创 前K个高频单词

题目描述(题目链接)给一非空的单词列表,返回前k个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。代码class Solution { public List<String> topKFrequent(String[] words, int k) { Map<String,Integer> map=new HashMap<>(); for(String ..

2021-03-29 20:12:03 179

原创 LeetCode:复制带随机指针的链表

题目链接思路创建一个HashMap 根据原链表,创建对应的新节点,将原链表的节点当作 key,根据原链表复制的新节点为 value 根据key的指向,创建value的指向代码class Solution { public Node copyRandomList(Node head) { if(head==null){ return null; } Map<Node,Node> map=new Ha

2021-03-29 09:39:10 98

原创 [实现+性能分析] 七种常见的排序算法!!!

使一串数据,按照递增或者递减的顺序排列起来,这个操作称为排序,通常意义上的排序,指的是原地排序。===========本篇文章均以升序为例==========1. 性能分析的方法① 时间复杂度② 空间复杂度③稳定性两个相等的数据,排序前和排序后的相对位置相同,那么就称这种排序是稳定的,反之,不稳定。上图中,升序排序前,红2在黑2的后面。经过方法①的排序之后,红2依然在黑2的后面,相对位置保持不变,所以认为算法①是稳定的;经过方法②排序后,红2跑到了黑2的前面,算法②不稳定.

2021-03-25 12:50:07 406

原创 优先级队列(堆)

目录1优先级队列1.1 什么是优先级队列?1.2 PriorityQueue的使用2什么是堆?2.1 概念2.2 性质2.3大堆和小堆3 堆的基本操作3.1建立堆3.2插入元素3.3获取堆顶元素3.4删除堆顶元素1优先级队列1.1 什么是优先级队列?有的情况下,我们操作的数据可能带有优先级,比如众多作业中先写语文作业还是先写数学作业,按照我的理解,我认为哪个先交我就先写哪个,或者有的同学可能认为,对哪个更感兴趣就先写哪个。之前我们学...

2021-03-23 16:44:36 204

原创 非递归实现二叉树的先中后序遍历

1. 先序遍历1.1 思路①创建一个栈 ②将根节点入栈 ③取出栈顶元素并访问 ④将其右子树入栈,左子树入栈 ⑤回到③重复1.2 代码//这里先序遍历创建一个栈,根->右->左public static void preOrder(TreeNode root){ if(root==null){ return; } Stack<TreeNode> stack=new Stack<>(); stack.p

2021-03-21 23:16:34 133

原创 剑指Offer57-II:和为s的连续正数序列

题目链接举例思路出现数字中最大的数字是(target+1)/2 定义两个引用small,big,分别指向1和2 如果[small,big]这个区间的数字和小于target,那么big++,让这个序列包含更多的元素 如果[small,big] 这个区间的数字和大于target,那么small++,删除一些元素 如果[small,big] 这个区间的数字和等于target,那么这个区间的数字存储起来 我的做法是将其保存在顺序表中,最终转化为二维数组,返回即可代码class So

2021-03-16 15:45:45 144

原创 二叉树

目录1.二叉树的特点2.二叉树的基本操作(使用链式存储结构实现)2.1 准备工作2.2前序遍历2.3中序遍历2.4 后序遍历2.5 求节点个数(两种方法)2.6 求叶子节点的个数(两种方法)2.7 求第k层节点个数2.8 获取二叉树的高度2.9 查找val所在的节点3.练习题目3.1 二叉树的前序遍历(题目链接)3.2 二叉树的中序遍历(题目链接)3.3二叉树的后序遍历(题目链接)3.4 检查两棵二叉树是否相同(题目链接)3.5 判断...

2021-03-14 16:08:27 414

原创 栈和队的练习:实现一个最小栈

题目描述(题目链接)实现一个能求出当前栈中最小元素的栈思路创建两个栈,A,B A中存所有入栈的元素,B中存当前栈中的最小元素,最小元素为B的栈顶 入栈时,如果元素小于或者等于B的栈顶,A和B均入栈,反之,只给A入栈 出栈时,如果A的栈顶元素等于B的栈顶元素,那么A和B均出栈,反之,只给A出栈 取栈的最小元素,即取B的栈顶元素代码class MinStack { Stack<Integer> A=new Stack<>(); Stack&lt

2021-03-11 20:50:01 82

原创 栈和队的练习:用两个队列实现栈

题目链接思路主要是在出栈和取栈顶元素问题上 只要明确,出栈出的就是队列的队尾元素,所以只要获取到队列的队尾元素即可(如果不理解可以画一个栈和一个队,入相同的元素,可以发现栈顶即是队尾) 取栈顶元素就是取到队列的队尾元素 实现上,我们创建两个队列A,和B。A中始终保存入队的元素。将A中的元素挪到B中,当A中只剩一个元素时,也就是我们想要的队尾,即出栈的元素,也就是栈顶,将其保存返回即可,此时所有的元素在B中,我们再将A,B交换,始终保证A中是存入队的元素。代码//用两个队列实现栈cla

2021-03-11 20:02:54 122

原创 栈的练习:括号匹配问题

题目链接思路首先创建一个栈 charAt遍历字符串,如果字符为左括号,那么就入栈 遇到右括号,将栈顶元素取出来比较是否和右括号匹配,如果匹配,就删掉栈顶元素继续循环,否则返回false 全部遍历完成之后,判断栈是否为空,如果栈为空,说明全部匹配完成,返回true,否则返回false代码import java.util.Stack;public class Solution1 { public boolean isValid(String s) { Stack&

2021-03-11 19:08:30 165

原创 C中的数组名

情况1. sizeof(数组名),计算整个数组的大小,sizeof内部单独存放一个数组名,数组名表示整个数组情况2. &数组名,取出的是数组的地址。&数组名,数组名表示整个数组情况3. 除了上面两种情况之外,所有的数组名表示的都是数组首元素的地址...

2021-03-09 16:46:12 121

原创 Java:自己实现栈和队列

一、什么是栈,什么是队列?栈:栈的特点是后进先出,也就是从哪边进从哪边出(就像装在罐子里的糖果,最后装进去的,最先被取出来)队列:队的特点是先进先出,也就是从哪边进,从另一边出(就像我们排队买饭一样,先排队的人先买到饭)二、自己实现栈核心操作:入栈push(把元素放到栈里面),出栈pop(把最后进来的元素删掉),取栈顶元素peek(获取到最后一个进来的元素的结果)2.1 使用顺序表实现尾插尾删即可(不建议头插头删,由于顺序表是基于数组实现的,如果头插头删,可能会存在大量的挪动元素,效

2021-03-09 13:39:33 221

原创 顺序表实现实现一副扑克牌的洗牌发牌功能

通过这个小游戏回顾一下顺序表的知识~一副扑克牌中有很多张卡片,每个卡片是由花色和点数组成的,所以我们先创建卡片这个类,属性为花色和点数。public class Card { public String huaSe; public String point; public Card(String huaSe, String point) { this.huaSe = huaSe; this.point = point; }

2021-03-07 20:26:14 461 1

空空如也

空空如也

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

TA关注的人

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