自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 everything项目测试篇

对项目测试用例进行详细测试,得出测试结果:测试次数:14次发现bug:1个(已解决)

2022-09-01 16:06:08 937 1

原创 仿everything的文件搜索工具项目详解:Part3

我们把整个扫描过程分为几个部分来说。

2022-08-30 19:14:11 654

原创 仿everything的文件搜索工具项目详解:Part2

继承接口的子类,用于具体扫描方法的实现,通过覆写callback方法,并且加上子类自我实现的添加,删除,查询数据库信息的各个方法,最后对比出最新的结果写入数据库。谜底就在谜面上,可以认为是整个程序的扫描开关,如果说我们是通过Main方法打开文件,那么Controller类就是用来开启文件扫描的。1.关于如何进行文件的扫描,如何于数据库连接,如何将扫描到的最新文件信息放到数据库中,并且将数据库中的旧信息删掉。包含两个子类,一个可以用于网络扫描,一个用于本地扫描,我们本项目只实现本地扫描的子类。...

2022-08-30 17:39:27 862

原创 仿everything的文件搜索工具项目详解:Part1

Part1旨在介绍此项目的基本信息。

2022-08-30 13:07:58 730

原创 前端三剑客第一剑—Html基础标签讲解

所以Web资源,就是后端写好的一些资源(一般是存放在网络中其他主机上的文件,我们可以理解成服务器)由这些来供我们前端通过网络拿取(一般通过应用层的HTTP协议),我们拿到这些资源,咔咔在我们的前端展示(前端例如浏览器),用户可以通过这些资源获取信息或者跳转到下一个页面,重复获取新的资源。接下来是我的灵魂画图,我相信诸位能懂。......

2022-07-31 00:12:25 419

原创 网络协议详解:IP

你要问我网络层什么最重要,我会告诉你,是IP。IP中最重要的是什么?IP地址。

2022-07-26 08:19:41 3214

原创 网络协议:TCP Part2

1.四次挥手,为啥不说三次。2.四次挥手的三种情况3.四次挥手的tcpheader的标志位变化4.四次挥手的状态变化5.其中CLOSE_WAIT和TIME_WAIT做重点学习。Header部分基本都说了,下图中对两个还没讲的标志位进行了说明,并对之前说的内容进行了总结。这里的东西之前都讲过,我就直接盗图了落实在状态转移上,我们能记住三次握手就可以,能多记就多记因为都是之前讲过的,直接上图了。...

2022-07-25 12:46:15 584

原创 网络协议详解:TCP Part1

TCP的可靠性是通过以下这几点实现的1.TCP会尽量把数据发送给对方,但不保证100%2.TCP的数据如果发送不成功,会给发送端应用层错误通知,这个时候应用层就知道数据丢失了3.TCP可以保证接收方的应用层严格按照发送时的数据顺序接收4.TCP保证数据不会无意损坏(UDP也可以)5.TCP尽可能地在维护网络质量。......

2022-07-23 20:25:05 1663 1

原创 网络协议详解 :UDP

1.从应用层先收到payload数据,相当于把应用层的内存数据拷贝到自己的内核内存区域2.准备header部分1).源端口(socket里就有,也不用自己写)2).目标端口3).UDP长度3.header+payload就相当于datagram4.直接把打包好的datagram交给网络层发送5.只要网络层发送成功(数据已经到达网卡)6.通知应用层发送成功如果接收方能收到,一定是原封不动完好无损的数据,这就是面向数据报文的好处。......

2022-07-23 15:25:53 3790

原创 认识传输层协议—TCP/UDP

本篇博客主要讲述以下几点1.网络编程的情况2.如何使用ip+port3.socket的使用4.UDP的特点不可靠,无连接,面向数据报文(数据内容在经过通信时不进行拆封,也就是我不会打开这封信,也就不存在数据改变的问题,对方可以完整接收到数据,当然前提是传出去了)httpshttpshttpshttpshttps。.........

2022-07-23 07:19:20 587

原创 网络基础原理概述

直接进入主题,用户态和内核态其实都是一个大类,只是作为抽象概念大体介绍一下两台主机在网络上的连接。先看图在这里明确一个概念,用户态也好,内核态也好都只是内存的不同区域我们从一台主机的用户态的某个进程A出发,把内存的数据复制给本机的内核态,然后通过网卡,将数字信号转化为物理信号,经过光纤,再通过另一台主机的网卡把物理信号转化为数字信号,一步步到达进程B。这里说的是TCP/IP5层协议Sir,这里我就直接导图了。...

2022-07-20 01:20:54 182

原创 多线程进阶篇Step2

若不相等,说明当前线程的值A已经过时了,不是最新的主内存值,此时需要将主内存的最新值V覆盖到A上,保存最新的工作内存,这时值B就不能写回主内存了,需要重新循环重新修改。ABA问题实际上就是当一个线程做了很多事,但是值最终还是没有变化时,把这个值再写会主存,这个时候另一个线程看到的值仍是自己工作内存的值,因此会直接用,但是其实不能直接用的。自旋锁已经说过了,就是获取锁失败的线程不是进入阻塞态,而是一种循环态,会在CPU上空转,不断查询当前锁的状态。我们会发现,线程2的A保存的是0,V!...

2022-07-18 01:29:52 672 2

原创 文件操作IO-Part2

目录操作文件的方法重点方法构造方法对于文件树结构的修改方法创建新文件方法创建目录删除文件方法移动节点(重命名) 判断文件属性判断是否存在方法判断文件存在&&是文件夹判断文件存在&&是普通文件获取文件标准路径返回文件的一般绝对路径 返回文件的标准绝对路径针对目录 对此路径进行遍历获取文件名方法得到文件名(当前文件名,没有路径其他信息)得到父类文件名得到该文件最后一次修改的时间得到文件的所有孩子相对路径进程运行时的工作目录在哪?关于内容的读写内容的读写——关于读的内容读文件用到的类和模型1.输入流2.使用具体类

2022-07-02 23:15:41 1147

原创 文件操作IO-Part1

硬件我们可以粗略地分为四大类:处理器(CPU),存储器(内存),输入设备(Input Device), 输出设备(Output Device)其中,CPU只能和内存做直接的数据交换输入设备和输出设备我们统称为I/O输入设备:将现实中的物理信号(光信号,电信号,波信号) ->数字个数,存储在内存中输出设备:数字->物理信号输入输出设备有:鼠标,屏幕,扬声器,摄像头,麦克风,键盘,网卡,硬盘等等。本篇重点说明硬盘这个I/O设备我们可以把计算机的存储结构比作一个金字塔,塔尖的传播速度最快,但是容量较小,反之则越来

2022-06-29 15:03:04 221

原创 多线程进阶篇

线程池创建的目的在于:如果我们直接采用像之前的Thread构造方法创建线程,其实在每次创建和销毁线程时都有一定的开支,当线程太多时这个开支还是挺明显的。“池”:目的就是让某些对象被多次重复利用,减少频繁创建和销毁对象带来的开支问题所以说,线程池最大的好处就是可以减少每次启动和销毁线程的损耗(提高时间和空间利用率)线程池内部创建了若干个线程,这些线程都是Runnable的状态,只需要从系统中取出任务(run),就可以立即开始执行。我们将线程池比作一个餐厅:餐厅中的固定员工:线程池中的线程后面招聘的临时员工:当

2022-06-27 13:15:59 791 1

原创 多线程基础部分Part3

wait和notify是Object类的方法,用于线程的等待与唤醒,必须搭配synchronized锁来使用进入此方法的线程会进入阻塞态(WATING),直到有其他线程调用notify方法唤醒此线程b.等待一段时间线程被唤醒就继续执行,否则不再继续等待,继续执行唤醒方法:notifya.普通notify() :随机唤醒一个处在等待状态的线程b.notifyAll() :唤醒所有处在等待状态的线程wait和notify方法的细节对于wait和notify方法,不仅存

2022-06-26 23:59:13 182

原创 多线程基础部分Part2

JMM是描述线程的工作内存(概念,并不真实存在,就是一系列CPU的寄存器或高速缓存)和主内存(真实存在的RAM)之间的关系。每个线程都有自己的工作内存,当访问共享变量时(类中的成员变量,常量,静态变量),会先将主内存中的共享变量值拷贝一份放到线程自己的工作内存中,之后对此共享变量的读取操作都是在当前工作内存中进行的。当两个进程同时访问同一共享变量时,会出现各种各样的问题,因为每个线程实际上都是将共享变量加载到自己的工作内存中进行各种操作的,这就导致了,各个线程之间的工作内存可能会出差错,有可能数据在主内存更

2022-06-26 16:40:12 531

原创 多线程基础部分Part 1

目录进程和线程进程:程序在系统中的一次执行过程线程:进程中的一个子任务进程和线程的区别描述线程对象的类-Thread类run方法和start方法的区别run方法start方法创建线程:Java中创建一个线程一共有四种方式a.继承Thread类,覆写run方法(现成的核心工作任务方法)a方式下的线程与启动使用匿名内部类创建Tread对象写法b.覆写Runnable接口,覆写run方法b方式下的线程与启动使用匿名内部类实现Runnable接口使用Lambda表达式c.覆写Callable接口,覆写call方法d

2022-06-21 11:00:51 619

原创 多线程铺垫:内部类以及Lambda表达式

目录什么是内部类内部类存在的原因内部类的分类成员内部类成员内部类产生对象的两种方式 在成员内部类与外部类之间互相访问属性方法 问题:成员内部类是否可以访问外部类的静态域,能否定义自己的静态域?静态内部类在静态内部类与外部类之间互相访问属性方法 问题:静态内部类是否可以定义自己的成员域/静态域成员内部类和静态内部类的区别方法内部类特点匿名内部类特点 Lambda表达式函数式接口1.无返回值无参数写法2.无返回值有参数写法3.有返回值无参数写法内部类不同于普通类,是把一个类嵌套在另一个类中或者另一个方法中的类别

2022-06-19 23:15:54 173

原创 索引和事务

目录什么是索引MySQL中最经典的两种存储引擎为什么需要索引索引的CURD创建索引删除索引查看索引 索引的存储位置键与索引​编辑 索引背后的数据结构B-树 B-树的特点聚簇索引保存信息特点特点非聚簇索引保存信息特点特点聚簇索引与非聚簇索引的关联B+树特点:RBTree与HashMap的弃用原因 RBTree 计算机的运行流程​编辑 HashMap事务什么是事务回滚事务的ACID(原子性,持久性,隔离性,一致性)特性原子性:事务中最核心的操作持久性:一致性:隔离性:事务的四种隔离级别1.读未提交2.读已提交

2022-06-10 23:25:25 181

原创 mysql—数据库的基础建表

本文说明一些数据库的基础操作找到C盘的ProgramData,找到MySQL里面的 5.7文件夹 里面有个my.ini文件在此文件中这样设置PS:第一个框表示跳过密码 是修改密码的操作 第二个框表示创建数据库时字符集的默认格式然后用命令行登录服务器 我们输入 mysql -u root 即可跳过密码然后输入修改密码的命令:修改完成后 注释掉.int文件的跳过密码命令在服务中重新启动一次MySql服务即可客户端 mysql -u root -p以root用户登录mysql服务器输入 mysql -u r

2022-06-02 13:47:56 1881

原创 关于异常的基本用法

异常的基本语法:try {未产生异常则会执行代码,反转转到catch代码执行}catch(可能产生的异常){ 产生异常会执行的代码 }finall{ 无论是否产生异常都会执行 }异常父类Exception一切异常的父类,当不清楚使用何种异常时,可以使用这个关于错误堆栈信息可通过print Stack Trace打印错误信息关于finally代码块因为无论是否产生异常都会执行,所以一般用于资源释放和方法关闭,比如数据库的连接,关闭文件等操作都会在此代码块进行,无

2022-05-21 15:07:18 568

原创 String类详解

String类算是比较特殊的类型了,作为初学者我们甚至把这个引用类型时不时当成基本类型来用,而且发现,竟然差不多。然而实际呢?我们太年轻,差的真的很多,今天就来详细讲一讲到底差在哪。一、创建字符串的四种方式1.直接赋值直接赋值,在堆中的常量池中创建该字符串对象String str1 = "HelloWorld";2.通过构造方法创建对象在堆中创建对象,并把该对象的拷贝放到常量池中String str2 = new String("HelloWorld");3.通过字符数组

2022-05-21 13:33:03 22222 8

原创 图书管理系统基本实现

展示样例第一步:输入用户名及用户权限第二步:展示菜单第三步:输入具体执行操作第四步:退出程序初步实现:建立package文件夹以及其中的类由上图的过程我们可以看出,若要展示书籍,我们需要一个书籍包,具体的书类和一个存放书的书架类若要完成各种操作,我们需要一个操作包,包含一个接口作为操作总接口,包含一个操作子包,子包中包含继承它的各种操作,也就是接口的子类若要输入用户名以及判断权限,我们需要一个用户包,一个总的用户类,以及继承它的两种用户,普通用户和管理员。

2022-05-12 17:55:20 2262 3

原创 Object类的方法和Comparable接口方法覆写

目录Object类toString方法.equals方法注意事项:代码实现:Comparable接口comparable原理及应用compareTo方法实现注意事项:代码实现:sort方法实现完整代码Object类object类为所有类的共有父类,所以它可以接收所有的引用类型,包括包装类。我们可以在任意子类中覆写Object的方法,例如.equals方法和toString方法等。toString方法当我们在打印方法中写入引用对象名会

2022-05-12 15:17:46 1189

原创 看完这篇博客,面向对象直接拿下

面向对象一篇带走

2022-05-01 17:56:10 787

原创 这篇基础链表,打开你的任督二脉

理解单链表什么是单链表单链表也是顺序表的一种,但是和数组不一样,单链表在物理上是不连续的,只有逻辑上连续。单链表是由无数个节点连接到一起的,每个节点存放一个节点值val和下一个节点的地址next我们可以把单链表想成一列火车,每一个节点就是一节车厢。而火车,必然会有车头和车尾。无头单链表则是我今天要说的重点内容。无头单链表指:没有单独的无val值节点存放head什么是头节点(head)单链表的车头部分,驱动整个单链表能够运作起来,为重中之重。如何创建节点我们之前说,

2022-04-21 18:31:06 832 2

原创 类和对象-下篇

封装什么是封装面向对象一共三大特性:封装,继承和多态封装带来的特性是:保护性,易用性。(封装有很多中表现形式)之前写的程序中,我们不难发现,任何一个对象可以随意更改调用类中的成员变量和方法,这样非常不安全,所以需要保护起来,封装起来。或者我们写的程序,作为用户而言,只要实现具体功能,并不需要知道组成他的具体部分是什么,所以可以封装起来,这是易用性的体现。private实现封装权限修饰符Java的权限修饰符指的是,修改的属性,方法,类可见的范围到底有多大一共有四大访问修饰符

2022-04-15 16:18:08 1233 25

原创 类和对象-上篇

什么是类和对象Java是一门面向对象编程的语言,所以在Java中,一切皆对象,我们把这些对象共同具有的属性列表放在一个类中(比如人的眼睛,鼻子,嘴都放在人这个类中),这就组成了类与对象。类的实例化类的创建class Person { //成员属性 实例变量 int age; String name; String sex; //成员方法 public void eat() { System.out.println("吃

2022-04-14 18:36:55 891 14

原创 数组重点内容强调

目录数组基本用法数组的遍历for循环遍历for-each 增强型for循环数组作为方法的参数内存内存在JVM中的分布栈区与堆区理解引用类型内置类型传参引用类型传参二维数组传参什么是二维数组二维数组在栈堆中的存储数组的练习二分查找正常写法递归写法冒泡排序数组逆序数组奇数偶数排序数组基本用法数组的遍历for循环遍历确确实实遍历数组每个元素,可以修改每个元素的值for (int i = 0; i...

2022-04-11 21:27:42 936 26

原创 认识方法与递归

认识方法方法的作用方法相当于C语言中的函数,主要用来解决一些规模较复杂的代码。方法可以让代码更加简洁并且更好理解方法可以重复利用有些方法可以直接调用,不必自己一点点从零开始创造。方法的注意事项可以没有返回值实参和形参没有关系,形参只是实参的拷贝必须在类中定义在Java中没有函数声明的概念方法的重载经典题型:重载和重写的区别(重写还不会)在同一个类当中,方法名相同,参数列表不同(类型与数量)的一组方法,与返回值无关。详情查看博客: 方法的重载_小白的..

2022-04-09 12:22:50 796 12

原创 非递归非数组超简单实现打印每一位

import java.util.Scanner;/** * @author DELL * @date 2022-04-06 15:43 */public class Print { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int count = 0; in.

2022-04-06 16:00:06 431 1

原创 递归——进阶青蛙跳台阶

普通青蛙跳台阶和斐波那契数基本一致,只有当n=2时与斐波那契数有所不同。那么进阶版说的是青蛙一次跳几个台阶都行。先确定终止条件,也就是n==1的时候。再确定表达式。方法一既然普通跳台阶,当一次跳一阶和跳两阶,为 f(n-1)和 f(n-2)相加。那终极版一次可以跳 n 至 1 ,这么多。就一直从n-1 加到 1 ,也就是 f(n)= f(n-1)+f(n-2).....+1那 f(n-1)又可以变成 f(n-2)+....+1也就是 f(n)= 2 f(n-1)publ

2022-04-05 20:23:07 328

原创 递归问题——汉诺塔

以我目前浅薄的题量来说接触的递归类型题就那么几个,按位打印,阶乘,斐波那契(跳台阶),汉诺塔算是几个经典题里面较为难理解的一个,所以我决定拿出来说一下。什么是递归刚刚接触递归的我只能浅谈一下我的理解,递归更像是一种只有积累大量题才能掌握的知识,重点就是掌握遇到实际问题时应该怎样用递归,这更像是一种在初期内行怎么给你讲你还是没办法自己做的出来,只能靠你一点点积累的这么个东西。其实编程总体也就是这么个意思。而递归的思想,我认为就是有始有终,我给你一个起点,你可以无限次地套娃和绕圈,但是你必须要达到一

2022-04-05 17:54:34 336

原创 方法的重载

重载不同于再重新创建一个全新的方法,有些许的不同。拿一个简单的求和方法举例子。重载的特点:1.方法名相同2.返回值不做要求3.参数列表不同(个数和类型)4.同一个类当中public static void main(String[] args) { int a = 10; int b = 20; int ret = sum(a,b); double a1 = 565.5; double a2

2022-04-05 12:15:20 431

原创 十进制转换为二进制和十六进制的方式

自建方法转二进制个人认为转二进制比较好理解,想象一下补码的每一位与 1 这个整型按位与,若该位是1则打印1,否则打印0;(先右移到最大位次,再慢慢向左移动回去)public class Test { public static void main(String[] args) { int a = 15; for (int i = 31; i >=0; i--) { System.out.print(((a>>i)

2022-04-03 21:56:18 226

原创 关于JAVA中变量的创建规则与运算符易错点说明

那些年变量给你挖的坑数据类型区分基本类型与引用类型数据类型分为基本数据类型和引用数据类型。而String类型属于引用类型。命名规则1.Java使用字母数字下划线组合的形式命名变量,但是不可以数字开头,也不可以用关键字命名。同时,虽然理论可行,也最好不要用 $ 这种符号命名。2.Java中对变量的命名推荐小驼峰形式,也就是从第二个单词开始每个单词首字母大写,例如:firstNum别用拼音当字母用,显得自己很low。3.Java的“ . ”是不可以用来命名的,因为..

2022-04-03 21:03:13 446 11

原创 Java预习计划-运算符

基础

2022-03-21 19:09:30 461

原创 JAVA预习计划-数据类型

冲冲冲

2022-03-20 21:57:03 1274

原创 Java预习计划-第一次见面

小萌新的冲级路

2022-03-20 17:15:50 306

空空如也

空空如也

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

TA关注的人

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