- 博客(44)
- 收藏
- 关注
原创 IP协议基础介绍、以太网
目录IP地址公网IP和内网(私网)IPIP协议路由功能NATDNSIP(Internet protocol)协议。是作用在网络层的的通信协议。目前主要为IPv4和IPv6两种。我们知道IP地址就是用来在网络种确定一台主机的。IPv4中,我们使用点分法表示(32位无符号整数)IPv6(128号无符号整数)。IP地址由两部分组成,分为网络号和主机号两部分。划分网络的方式有两种,早期通过固定的方式划分网络号和主机号。如下图我们发现这种方法会造成大量的IP地址的浪费,于是有了后来的采用网络掩码的方式进行划分 。网络
2022-06-11 16:39:24
982
1
原创 TCP/UDP协议基本介绍
目录前言1、socket(套接字)2、UDP/TCP特点3、UDP协议细节4、TCP协议细节TCP协议的可靠性握手阶段正式通信阶段 断开阶段流量控制与拥塞控制其他细节小结TCP协议是面向连接的,可靠的,基于字节流的传输层通信协议。UDP协议是面向无连接,不可靠的,基于数据报的传输层通信协议。所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议
2022-06-10 22:14:36
3389
原创 网络相关的常识、基本概念
目录前言1、网络分层划分2、相关设备3、名词解释4、基本演绎 首先学习网络这方面的知识,我们要清楚一个核心问题:如何实现跨主机之间的进程通信的问题。 为了解决上面的核心问题,iso首次提出osi七层网络模型,除此之外常见的网络层次划分还有tcp/ip五层模型.这里我么主要探讨tcp/ip五层模型,如下图所示。物理层:激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒
2022-06-10 22:14:14
392
原创 【Java多线程】线程安全、生产者消费者模式、定时器、线程池、其他常识
线程安全、synchronized锁、volatile和单例模式、wait和notify、阻塞队列、生产者消费者模式、定时器、线程池。
2022-05-13 22:19:52
729
1
原创 操作系统常识、进程线程基础
基本概念操作系统:是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。进程:是程序的一次执行过程,是操作系统进行资源分配的基本单位,进程是程序的实体。线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。操作系统的职能划分:1.进程管理模块:OS进行CPU...
2022-04-20 15:03:00
147
原创 【MySQL】表(DML、约束)、存储引擎、事务、索引、视图、DBA命令、设计三范式
目录一、表1. 表的 创建/删除/复制2. 表的 插入3. 表的 修改4. 表的 删除5. 约束二、存储引擎三、事务(Transaction)四、索引五、视图六、DBA命令七、设计三范式总结一、表1. 表的 创建/删除/复制创建表:create table t_name(字段1 类型,字段2 类型,...);查看建表语句:show create table t_name;删除表:drop table t_name.
2022-03-31 09:27:30
222
原创 【MySQL】连接查询、子查询、union和limit
目录一、连接查询内连接:外连接内连接和外连接的区别:多表连查二、子查询select后面:from后面:where后面:三、union四、limit以及分页查询总结一、连接查询在实际情况中,我们往往不是在单张表中进行查询,我们往往通过多张表来联合查询。连接查询按照连接方式可以分为内连接、外连接、全连接。其中内连接可以分为等值连接、非等值连接、自连接。外连接可以分为左连接、右连接。 笛卡尔乘积现象:如果两张表进行连接查...
2022-03-30 14:42:00
519
原创 【MySQL】概述、常用命令、简单查询、条件查询、排序数据、数据处理函数、分组函数、分组查询、去重
一、概述SQL 的全称 (Structured Query Language)结构化查询语言。用来和数据库打交道,完成和数据库的通信。MySQL由“MySQL AB”公司开发。于2008年被sun公司(Java母公司)收购,而2009年sun又被Oracle(甲骨文)公司收购。MySQL的分类:语言 含义 DQL Data Query Language 数据查询语言 DML Data Manipul...
2022-03-28 12:53:32
1194
原创 【数据结构】哈希表以及HashMap(基本原理、手动实现)
目录一、上集回顾二、基本原理三、闭散列方法四、开散列方法(哈希桶)五、HashMap的手动实现六、进一步分析一、上集回顾我们已经了解了Set和Map的基本性质,并且我们使用二叉搜索树实现了简单的TreeSet的功能,其实TreeMap的实现方法和TreeSet是类似的,我们不再介绍。接下来我们会引入一个新的数据结构哈希表(HashTable),并以此来实现HashMap类,同样,HashSet类似,就不介绍了。二、基本原理什么是...
2022-03-26 20:00:07
1099
原创 【数据结构】Set和Map(常用方法、手动实现)
目录一、基本概念二、二叉搜索树三、手动实现总结一、基本概念Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。Set我们可以理解为集合,Map我们可以理解为字典。其中Set继承自collection接口,Map独立存在。Set中的基本元素为Key。Map中的基本元素为Key-value对。无论在Set还是在Map中,Key的值都不允许重复。Map和Set可以通过什么来实现呢?我们也可以通过List来...
2022-03-26 10:38:48
599
原创 【数据结构】排序(冒泡、选择、插入、希尔、堆、归并、快排)
目录一、冒泡排序二、选择排序三、插入排序四、希尔排序五、堆排序六、归并排序七、快速排序八、分析总结一、冒泡排序最基础的排序,思路是将数据和下一个数据进行比较,如果比下一个大就交换,然后指向下一个元素,依次类推则最大的元素被移到了最后。然后继续进行下一轮排序,直到排序完成。利用减治的思想。 public static void bubbleSort(int[] arr){ for (int i = 0; i <...
2022-03-21 13:32:53
438
原创 【数据结构】堆(向下调整、堆的建立、top-K问题、最后一块石头问题)
目录一、堆及其概念二、向下调整(向上调整)三、堆的建立四、优先级队列五、例题1.top-k问题2.最后一块石头的重量一、堆及其概念 堆在逻辑上是一颗完全二叉树,在物理上保存于数组。满足任意结点的值都大于其子树中结点的值,叫做大堆,或者大根堆,或者最大堆反之,则是小堆,或者小根堆,或者最小堆。堆的基本作用是在频繁变动的集合中找到最值。二、向下调整(向上调整) 前提:调整的左右节点必须是堆。才能调整。基本思想:1...
2022-03-20 17:03:20
382
原创 【数据结构】二叉树(基本概念、性质、遍历、基本操作)
目录一、树的基本概念二、二叉树的基本性质三、二叉树的遍历1.递归法2.层序遍历和非递归法四、二叉树的基本操作五、总结一、树的基本概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看 起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:1.有一个特殊的节点称为根节点,根节点没有前驱节点。2.除根节点外,其余节点被分成M(M > 0)个互不相交的集合T1、...
2022-03-20 11:09:16
1468
原创 【数据结构】栈和队列(基础概念、有效的括号问题、用队列实现栈、实现一个最小栈、设计循环队列)
目录一、基础概念二、基础练习1、.括号匹配问题2、用队列实现栈3、实现一个最小栈4、设计循环队列总结一、基础概念什么是栈(stack)呢?大概就是一个类似于弹夹的东西,懂得都懂。属于FILO(先进后出)或者LIFO(后进先出)模式的一种容器结构。顶部元素叫栈顶,底部元素叫栈底。栈的常见操作有1、压栈(push)2、弹栈(pop)3、查看栈顶元素(peek)4、查看元素个数(size)等。队列(Queue),顾名思义就是数据像排队一...
2022-03-19 15:05:41
624
原创 【JavaSE】基础部分小结
目录一、语句角度二、数据角度三、几个重要的关键字四、重载和重写五、抽象类和接口六、异常七、Java是值传递还是引用传递八、总结一、语句角度语句执行的顺序问题。我们先看下面一道例题public class B{ public static B t1 = new B(); public static B t2 = new B(); { System.out.println("构造块"); } sta.
2022-03-18 21:38:58
336
原创 【JavaSE】综合练习(图书馆管理系统附链接)
目录一、目的二、任务三、设计思路四、基本框架五、实现细节六、总结一、目的利用前面所学的知识点:类,抽象类,封装,继承,多态,接口等进行的一个简单的代码练习。二、任务1、简单的登录2、管理端添加书籍、删除书籍、按名称排序、按价格排序、按借阅情况排序、退出3、用户端按名称排序 、按价格排序、按借阅情况排序、借阅书籍、归还书籍、退出三、设计思路我们首先需要一个Main函数来作为我们程序执行的路口。Main中首先需要完成用户的登录过...
2022-03-18 09:26:01
595
原创 【JavaSE】String类(创建、常量池、常见操作、优化)
目录一、字符串的创建二、字符串常量池三、字符串的常见操作1.常见操作2.例题四、字符串的优化一、字符串的创建1.字符串常量直接构建String str = "hello";2.构造函数String类的构造函数有多个,常见的方法如下:String str2=new String("hello");char[] helloArray = { 'h', 'e', 'l', 'l', 'o'};String helloString = new S
2022-03-17 17:25:08
652
原创 【JavaSE】链表对象及其实现
目录前言一、主要思路二、主要步骤0.节点对象1.链表对象2.构造方法3.检查是否符合要求4.尾插5.给定下标插入6.给定下标删除7.获取指定下标的元素8.修改指定下标的元素9.输出指定元素的下标10.输出链表是否包含指定元素11.给定元素删除第一个12给定元素删除全部总结前言 以前我们实现的都是节点对象,现在我们需要完成一个双向的无头的不循环的链表对象。主要包含的方法如下:尾插、给定下标插入、给定下标删除、给定元素...
2021-12-23 16:50:19
839
原创 【JavaSE】链表小练习(第2弹)(链表中间节点、链表倒数第K个节点、交叉链表找交点、带环链表找入口、复制带随机指针的链表)
目录一、输出链表中间节点二、链表倒数第K个节点方法一方法二三、交叉链表寻找交点四、带环链表找入口方法一方法二五、复制带随机指针的链表总结一、输出链表中间节点leetcode(876题)方法:使用快慢针的方法,快的指针走2步,慢的指针走一步。当快的走到末尾的时候,慢的指针正好走到中间。由于方法比较简单,不再赘述。下面的方法和快慢针是一样的。 public ListNode middleNode(ListNode head) { L
2021-12-23 15:45:18
622
原创 【JavaSE】链表小练习(第1弹)(反转链表、删除链表指定元素的所有节点、升序链表合并、指定数值分割链表、删除有序链表的重复节点)
目录一、反转链表方法一:头插法方法二:递归法二、删除指定元素的所有节点方法一:尾插法方法二:遍历修改三、升序链表合并四、指定数值分割链表五、删除有序链表的重复节点方法一:遍历法方法二:递归法一、反转链表leetcode(206题)方法一:头插法 我们根据最基本的想法,将链表的每个节点按顺序头插在新的节点上。看代码 public static ListNode reverse1(ListNode head){ ...
2021-12-22 17:45:11
402
原创 【JavaSE】顺序表的实现(算法复杂度、线性结构特点、顺序表)
目录前言一、顺序表的实现总结前言 由于CSDN的撤销功能和自动保存功能导致我写的博客直接GG,心态爆炸。所以长话短说。算法复杂度包括时间复杂度以及空间复杂度。算法复杂度是指算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。具体怎么计算不再赘述。多写几道题就懂了。线性结构具有以下主要特点有序除首和尾外,所有元素均有前后元素(“前驱”、“后继”)顺序表见正文一、顺序表的实现 这个是一个简单的顺序表的实现,其中用到的思...
2021-12-10 16:03:05
445
1
原创 【JavaSE】实现日期类和时间类(类和对象的练习以及浅拷贝和深拷贝)
目录前言一、基本要求二、实现日期类1.思路2. 重要部分实现2.1 检查天数是否正确2.2 下一天2.3 根据月份输出天数的边界2.4 输出两个日期的间隔天数三、实现时间类四、时间类和日期类的使用1.浅拷贝与深拷贝总结前言 通过实现一个日期和时间类来加深对类和对象的印象,理解理解什么是面向对象。一、基本要求1. 日期类具有年月日三个属性(1000年到3000年之间),时间类具有时分秒三个属性2. 日期类具有前一天、后一天以...
2021-12-10 11:38:02
438
原创 【JavaSE】类和对象(OOP的基本思想、变量、属性、方法)
目录前言一、基本解释二、类的属性1.属性的定义2.属性的初始化2.1默认值规则2.2构造方法规则2.3定义时初始化规则2.4构造代码块规则2.5执行顺序3.this的用法4.权限控制三、类的方法四、实例化过程总结1.变量的总结2.对象的三个层次总结前言 什么是面向对象编程(OOP)?什么是类?什么是对象?一、基本解释面向对象程序设计(Object Oriented Programming)作...
2021-12-08 22:28:21
438
原创 【JavaSE】数组及其使用练习(交换两数、二分查找、冒泡排序等)
目录前言一、数组的创建以及使用1. 创建数组2.数组的遍历3.数组练习3.1交换两个数3.1冒泡排序3.2二分查找二、Arrays类三、多维数组总结前言数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java 语言中提供的数组是用来存储固定大小的同类型元素。具体的使用如以下几个方面。一、数组的创建以及使用1. 创建数组Java语言使用new来创建数组。使用方法如下...
2021-12-08 17:09:28
133
原创 【JavaSE】基础语法+基本使用
目录前言一、Java的基础介绍1. JavaSE、JavaEE、JavaME2. JVM、JRE、JDK二、基本数据类型1. 基本介绍2. 类型转换2.1 自动类型转换2.2 强制类型转换2.3 字符串的转入转出三、使用实例总结前言 开始学习Java的基础部分,由于部分的基础知识在C中已经学过,所以不在拘泥于基本的知识点,而是在之前的基础上进行讲解和学习,主要体现在面向对象(OOP)上。.一、Java的基础介绍1. JavaSE、...
2021-12-08 15:53:57
375
原创 【C进阶】程序的预处理操作
目录前言1. 程序的运行2. 预定义符号3. #difine3.1 定义常量3.2 给类型定义别名3.3 自定义一些关键字3.4定义一个代码片段3.5#undefine4. 条件编译总结前言 程序具体是怎么运行起来的呢?会涉及到那些操作呢?预处理又是在干什么?1. 程序的运行分为两个步骤1.把.c文件变成一个可执行文件2.执行该可执行文件。 编译又可以分为以下几个阶段1.预处理。编译器先对程序进行...
2021-11-09 17:12:44
608
原创 【C进阶】文件操作(fopen、fclose、fread、fwrite等)
目录前言1. 什么是文件2. 文件名3. 打开文件4. 关闭文件5.读取文件6.写入文件总结前言我们在想既然是通讯录就应该把信息记录下来,只有我们自己选择删除数据的时候,数据才不复存在。 这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据 库等方式。 使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。1. 什么是文件 不解释2. 文件名一个文件要有一...
2021-11-09 16:11:18
522
原创 【C进阶】动态内存管理(malloc、free、calloc、realloc)
目录前言1.动态内存函数介绍1.1 malloc1.2 free1.3 calloc1.4realloc2.例题2.1 题目一2.2 题目二2.3题目三总结前言有时候我们需要的空间大小在程序运行的时候才能知道, 那数组的编译时开辟空间的方式就不能满足了。 这时候就只能试试动态内存开辟了。1.动态内存函数介绍1.1 mallocvoid* malloc (size_t size);这个函数向内存申请一块...
2021-11-09 15:15:26
698
原创 【C进阶】通讯录的实现
前言 该部分是对结构体这一重要知识点的巩固。需要实现基本的增删改查的任务。1.设计思路 我们知道通讯录需要记录联系人信息,并且还要支持对该通讯录的增删改查。 首先,我们如何对 “ 联系人 ” 这个概念进行抽象。当然是使用我们的自定义类型,也就是使用结构体。同理,通讯录这个概念也是由多个联系人构成,再加上序号。我们同样可以使用结构体来表示这个通讯录。 而具体的内容就是对结构体的展示,以及操作部分。2.主要步骤2.0 使...
2021-11-03 15:34:51
90
原创 【C进阶】自定义类型(结构体、位段、枚举、联合体)
目录前言1.结构体1.1结构的自引用1.2结构体内存对齐1.3修改默认对齐参数2.位段2.1位段的布局规则3.枚举3.1枚举的优点4.联合体4.1 联合类型的定义4.2 联合的特点4.3使用联合体来判断主机的大小端总结前言 好好复习下前面学过的结构体。1.结构体1.1结构的自引用 直接看代码:#include <stdio.h>struct Node{ int data; str...
2021-11-02 21:06:14
77
原创 【C进阶】内存函数(memcpy、memmove、memcmp、memset)
目录前言1.内存函数1.1 memcpy1.2 memmove1.3 memcmp1.4 memset总结前言 str系列的函数只能对字符串起作用,也就是以'\0'结尾的字符数组使用。而mem系列的数只要是内存就能使用。 1.内存函数1.1 memcpy 内存拷贝函数。将src拷贝到dest中。num为要拷贝的字节数。void * memcpy ( void * destination, const...
2021-11-02 01:07:21
321
原创 【C进阶】字符串函数(strlen、strcpy、strcat、strcmp、strncpy、strncat、strncmp、strstr、strtok、strerror)
1.字符串函数2. 内存函数
2021-11-01 23:37:22
485
原创 【C进阶】指针进阶第一期(字符指针、 数组指针、指针数组、数组传参和指针传参)
目录1.字符指针2.指针数组和数组指针2.1指针数组2.2数组指针3.数组参数,指针参数3.1数组传参3.2指针传参1.字符指针在指针的类型中我们知道有一种指针类型为字符指针 char* ,那么我们先看一下下面这道练习题。#include <stdio.h>int main(){ char str1[] = "hello bit."; char str2[] = "hello bit."; const char...
2021-10-27 14:47:51
267
原创 【C进阶】数据在内存的存储(字节序、原码反码补码)
目录前言1. 整形在内存中的存储1.1原码反码补码1.2大小端字节序1.2.1大小端介绍2.例题总结前言 我们已经了解了数据的基本类型,以及他们所占空间的大小。而现在我们要从内存的角度出发,来更加深刻的理解数据在内存的存储。整形家族charunsigned charsigned charshortunsigned short [int]signed short [...
2021-10-26 16:03:13
152
原创 Git和GitHub的基本用法(Git操作三板斧)(Windows版)
目录一、Git和GitHub的区别二、下载安装1.安装git for windows2.安装git的图形界面三、GitHub的使用四、下载项目到本地五、Git 操作的三板斧1.git add2.git commit3.git push总结一、Git和GitHub的区别Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。是Li...
2021-10-20 21:32:55
843
原创 【C语言基础】结构体
前言结构体是 C 编程中用户自定义的可用的数据类型,它允许存储不同类型的数据项。(数组允许储存相同类型的数据项)。一个典型的例子就是学生信息登记表,姓名为字符串、学号为整数、年龄为整数,因为数据类型不同所以我们可以使用结构体来存放。一、结构体的基础使用 具体的使用方法可以参考以下的代码:#include <stdio.h>int main(){ struct book /* 定义结构体类型 */ { char bo...
2021-10-20 15:26:39
379
原创 【C语言基础】指针基础
前言 该部分会介绍指针的基本知识,比如什么是指针、指针的类型、野指针等基本概念,以及指针和数组。其他关于指针的重要知识将会在指针进阶中提到。一、什么是指针指针不扎人,专门指内存!要理解指针一定要和内存结合起来。指针就是一个变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。对应到代码就是:#include <stdio.h>int main(){ int a = 10;//在内存中开辟一块空间 int *p = &a...
2021-10-19 20:49:47
113
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人