- 博客(41)
- 问答 (6)
- 收藏
- 关注
原创 MySQL join和索引
S1jionS2后,S1中的列会与S2中的列一一合并一次最后组成新的表。在join中可以交换位置,最终生成的新表都是一样的;偶然发现的,下载之后连接上自己的库操作操作发现还挺方便的,可以在里面创建管理你的数据库。例如在使用S1joinS2合并表的时,我们想要让S1中的l1列与S2中的l2列相等匹配时,我们可以将语句改成S1joinS2onS1.l1=S2.l2。可以看到合并时不再像之前那样“傻瓜式”合并了,而是将classid和id相等的列合并成一条而形成的新的表。...
2022-07-21 09:08:11
2582
原创 Netty编解码器、实现群聊以及简单开发Http服务器
短连接下的模式是完成一次三次握手发送一个信息,而长连接是一段时间保持TCP连接不断开。并且在Http协议下,总是客户端主动向服务端发起连接(服务端被动、客户端主动),所以。后来结合了SpringBoot框架搞了一个基于WebSocket协议的网页版聊天室,中道未遂最后被告知web搞太早了,所以决定先搁置一段。WebSocket协议是全双工通信(通信的双方可以同时发送和接收消息),实现了多路复用。因为我们要监听用户的在线和离线状态,也就是通道就绪事件和通道未就绪事件,所以通过重写。...
2022-07-18 12:30:37
639
原创 Java网编之:多路复用NIO 以及一些感悟
目录一、同步阻塞:BIO二、同步非阻塞:多路复用NIO1、NIO概念2、NIO三大核心:Buffer、Channel、Selector三、进一步理解NIO1、缓冲区:Buffer(1)缓冲区对象的创建(2)缓冲区对象添加数据(3)缓冲区对象读取数据(4)常用的ByteBuffer类 堆外内存:DirectByteBuffer类 堆内内存:HeapByteBuffer类2、通道:Channel(1)服务器端实现:ServerSocketChannel
2022-07-13 20:05:31
1001
原创 Java网编之:Socket套接字
目录一、Socket概念二、Socket基本操作三、Socket建立通信原理四、服务器端:ServerSocket类1、构造方法2、常用方法五、客户端与服务器端相互沟通:Socket类1、构造方法2、常用方法六、IP地址:InetAddress类七、测试demo1、模拟客户端Client2、模拟服务器端ServerSocket使用TCP,提供两台计算机之间的通信,主要用于描述IP和端口,在建立网络连接时使用。其中Socket类(客户端和服务器均可使用)提供了前3个操作方法;而SeverSocket类(仅服务
2022-07-12 20:38:29
795
原创 初识数据库:MySQL基础使用
一、数据库基础1.1 数据库数据库即为保存有组织数据的容器,而数据库软件称为DBMS(数据库管理系统)。通俗来讲,数据库就是通过DBMS创建和操控的容器。我们平时访问数据库并不是直接访问数据库本身,而是使用DBMS,然后通过DBMS访问数据库。1.2 表表是一种结构化的文件,可以用于存储某种特定类型的数据。简而言之,表就是某种特定类型数据的结构化清单。同时注意:数据库中每个表都有一个名字来标识自己,这个名字是唯一的。模式模式就是关于数据库和表的布.........
2022-07-11 12:04:00
898
原创 AVL 平衡二叉搜索树
二叉搜索树(BST)虽能缩短查找效率,但如果数据有序或接近有序,BST将退化为单支树,此时查找元素就相当于在顺序表中搜索元素,效率低下。那么此时如果能保证每个结点的左右子树高度差的绝对值不超过1,就可以降低树的高度,从而减少平均搜索长度。所以AVL带着这个使命诞生了。在二叉树中,如果每个结点的子树的高度差距为0、1或-1,则称这棵树是平衡二叉树,即AVL。执行插入或删除操作后如果导致了AVL的不平衡,那么我们需要执行旋转操作来重新平衡这棵树。旋转操作主要有LL、RR、LR、RL四种类型。向左子树中的左孩子插
2022-06-30 00:33:37
217
原创 BST 二叉搜索树
目录一、BST概念二、BST的查找、插入和遍历1、查找2、插入3、遍历(1)前序(2)中序(递增显示)(3)后序(4)深度优先(5)广度优先4、删除(1)无左子结点时(2)有左子结点时三、定义一个树接口四、实现BST类 五、数据压缩:哈夫曼编码前几天学习了堆排序,其实堆排序用到的结构就是二叉树。那么BST是满足如下规则的二叉树:遵循BST“左小右大”的原则,查询时从根结点向下依次查找各个子树,直到 子树为空 或 已查询到 为止。否则设置的对比current结点将一直与目标值比较,小于当前结点时赋给curre
2022-06-28 10:00:06
595
原创 Java实现一些排序:不要再只会冒泡啦
归并排序算法将数组分为两半,然后对每个部分持续递归划分子数组。直到每组只有一个元素后开始合并排序,接下来就是不断合并排序合并排序....最终两部分排好序后直接合并即可: 代码实现如下: 其中方法merge的归并实现主要是靠下标跟踪,两数组元素逐一比较后,得出较小的元素放入最终数组temp中,被放入元素的所属原数组下标++(为了接着往下走)。通过两两比较最终全部放入temp中实现排序:快速排序主要是通过选出一个pivot(基准)元素,然后将数组分为两部分,使得第一部分中的所有元素都.........
2022-06-22 10:04:02
270
原创 Java链表:实现MyArrayList和MyLinkedList
目录一、线性表1、Interface:MyList2、Class:MyArrayList(1)关于MyArrayList的有参构造函数(2)检验数组是否full的函数ensureCapacity3、Class:MyLinkedList二、栈和队列(1)GenericQueue(2)GenericStack三、优先队列一个月前学习了线性表、栈、队列和优先队列的相关特性和接口、类中的方法。博客:Java数据结构:线性表、栈、队列和优先队列_颜 然的博客-CSDN博客 下面 --> 如何自己实现一个这样的数据结构
2022-06-18 23:49:12
614
原创 阻塞队列BlockingQueue的实现:生产者消费者问题&&实现线程池MyThreadPool
一、前言 锁的另一种实现:ReentrantLock二、阻塞队列:BlockingQueue三、Java自定义实现BlockingQueue接口中的put()和take()两种锁的实现方式1、synchronized锁版本:*2、ReentrantLock锁版本: Condition类四、使用阻塞队列自定义实现ThreadPool1、execute()方法和submit()方法的比较2、ThreadPool实现思路3、实现写阻塞队列的时候我发现了一个锁的另一种实现。以往我们都
2022-06-16 11:09:59
893
原创 Java线程池初步学习
目录一、什么是线程池二、为什么要有线程池?还有什么池?三、多线程学习:ExecutorServise接口1、线程池的关闭2、FixedThreadPool执行逻辑 3、CachedThreadPool执行逻辑四、ScheduledThreadPool线程池:周期性和定时性1、定时性:schedule方法2、周期性:scheduleAtFixedRate方法虽然启动一个新线程很方便,但是创建线程需要操作系统资源,比如说线程资源或者栈的空间。频繁地创建和销毁大量的线程会消耗大量时间。所以我们可以把很多小任务让一
2022-06-08 21:56:13
378
原创 Java数据结构:规则集Set和映射Map
目录一、规则集:Set接口1、散列式:HashSet类2、链式散列集:LinkedHashSet类3、树形集:TreeSet类4、比较:线性表和规则集二、映射:Map接口1、Map的三个实例化:HashMap类、LinkedHashMap类和TreeMap类2、实例操作:统计单词出现次数上一篇学习了集合Collection接口中的List接口(线性表)和Queue接口(队列),接下来学习剩下一个接口:规则集Set接口还有和他很相像的Map接口。一、规则集:Set接..
2022-05-29 21:54:20
313
1
原创 Java数据结构:线性表、栈、队列和优先队列
目录一、集合:Collection接口二、迭代器:Iterable接口迭代器与for循环1、iterator()方法:获取迭代器2、forEach()方法:每个都操作三、线性表:List接口1、双向遍历:ListIterator接口2、线性表具体类:ArrayList类和LinkedList类四、Comparator接口Comparable接口和Comparator接口之间的不同一些排序和比较的编程设计五、Collections类:执行集合和线性表中通用操作的
2022-05-26 12:27:00
878
原创 Java 线程操作
一、进程与线程计算机中,把一个任务(浏览器、播放器或是其他)称为进程,而进程的子任务则称为线程多进程模式(每个进程只有一个线程):┌──────────┐ ┌──────────┐ ┌──────────┐│Process │ │Process │ │Process ││┌────────┐│ │┌────────┐│ │┌────────┐│││ Thread ││ ││ Thread ││ ││ Thread │││└────────┘│ │└────────┘│ │
2022-05-18 22:17:37
913
原创 Java(8)二进制IO
Java提供了很多类用于实现文本IO和二进制IO。二进制文件的优势在于处理效率比文本文件高,因为文本文件需要编码和解码,而二进制文件则不需要。下面学习二进制IO类。二进制输入类根类为InputStream,二进制输出类根类为OutputStream,它们都是抽象类,后面延伸出了很多子类: FileInputStream类和FileOutoutStream类 这两个类用于从文件读取字节和向文件写入字节,这两个类相较于父类没有引入新的方法。几乎所有的IO类中的方法都会抛出异常java..
2022-05-11 21:35:25
643
原创 Java(7)泛型
目录1、泛型性质2、泛型声明3、通配泛型4、泛型类型参数的注意点1、泛型性质使用泛型能够提高代码的安全性,可以在编译时就发现错误而不是运行时,同时也更具宽容性,不必使用强转。同时注意,泛型类型必须是引用类型而不能是基本类型。比如说想要给一个int值创建一个ArrayList对象,我们应该使用:ArrayList<Integer> intList = new ArrayList<>();//而不是使用ArrayList<int...
2022-05-05 22:35:51
179
原创 Java(6)抽象类和接口
目录一、抽象类(abstract)1、定义2、也不是完全不能new3、意义4、示例二、接口(interface)1、定义2、示例三、比较:Comparable接口四、克隆:Cloneable接口深复制和浅复制五、接口和抽象类对比1、相同点2、不同点(1)构造方法(2)继承(3)根类3、相比之下一、抽象类(abstract)1、定义方法头或者类头使用abstract关键字即表示为抽象类或抽象方法。抽象类不能使...
2022-04-30 11:41:15
548
原创 Java(5)继承和多态之父子关系
一、继承(1)定义从已经存在的类中定义新的类,称为继承。由继承可以引出父类和子类的定义:继承使得你可以定义一个通用的类(即父类、超类、基类),之后继承该类成为一个更特定的类(即子类、继承类、派生类)(2)语法xx(子类)extends XXX(父类)关键字extends告诉编译器,XX类继承自XXX类。经过上面的语句,XX继承了XXX中的方法和数据域。(3)注意点虽说继承了父类的数据域,但如果在父类中的数据是用“private”修饰,就不能直接在子类中访问。如果;父类...
2022-04-26 22:24:22
1633
原创 Java(4)面向对象思考(类的设计和String类的详细学习)
面向过程和面向对象的程序设计有很大的不同,Java中主要为面向对象进行程序设计,将焦点放在类的设计上。面向对象的范式将数据和操作方法包含、耦合在一起,从而构成对象。一、类的关系通常来讲,类之间的关系包括:关联、聚合、组合、继承。1、关联关联是描述两个类之间活动的一种二元关系2、聚合、组合聚合是一种特殊的关联形式,它表示两个对象之间的归属关系。如果被聚集对象的存在依赖于聚集对象,则称这两个对象间的关系为组合。(由于聚合和组合关系都以同样的方式用类表示,所以不区分它.
2022-04-19 22:19:06
1162
2
原创 ubuntu上git代码push到远程仓库以及申请个人访问令牌
一、初始化Git仓库首先mkdir创建一个空目录:$ mkdir learngit //创建目录mkdir$ cd learngit //切换到指定目录cd$ pwd //显示u当前所在工作目录的全路径pwd/home/yanran/learngit (显示)你的主目录中就会出现一个空目录接下来使用git init把目录变成Git可管理的仓库在learngit目录下创建一个txt文档:添加成功二、添加文件到Git仓库接
2022-04-16 11:49:47
1435
原创 Java(3)对象和类
一、为对象定义类我将对象与类之间的关系总结为了以下这张图:总而言之,类(class)是一个模板,而对象(object) 是一个实体,可以理解为对象是类的具象化体现。并且一个模板可以产生多个实体,也就是说可以从一个类中创建多个对象。同时类还提供了一种特殊类型方法:构造方法...
2022-04-15 19:37:09
1012
原创 Java(2)详探方法、数组
目录一、方法1、自定义方法2、 方法重载和方法重写3、方法抽象二、一维数组声明数组变量创建数组并赋值1、“声明变量、创建数组、数组赋值给变量”合三为一:2、foreach循环3、复制数组4、数组传参5、可变长参数列表6、Arrays类数组由小到大排序:sort方法或paralleSort方法数组二分查找:binarySearch方法检测两数组是否严格相等:equals方法填充整个数组或部分数组:fill方法一步打印数组中的所有元素...
2022-04-08 19:15:32
485
原创 Java(1)简单的方法、字符和字符串
Linux终端编写、运行Java程序javac是java的编辑器,能将 .java 文件编译为 .class 可执行文件:使用vim编辑器对程序进行编写 javac + 文件名.java java + 文件名第一章 计算机、程序和Java概述温习了计算机基础知识、程序和操作系统,并且初始Java及其基本语法。1、梦开始的地方:简单的Java程序public class Welcome //类{ public static void main(String[..
2022-04-07 14:48:42
591
原创 Markdown语法和实操
小组学长建议我可以把博客上传到Github上,于是打开了Markdown的大门。不难,研究了一下就能上手了,并且页面清晰又整洁,好喜欢好喜欢。看教程➕github上操作了一波,上传了第一篇用Markdown写的文档:https://github.com/yanyanran/YBlog/blob/main/Markdown%E8%AF%AD%E6%B3%95.md效果:源码:源于想把自己的博客上传到github上的有感而学导语Markdown 是一种轻量级的 「标
2022-03-25 16:21:32
220
原创 GDB调试操作
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具。1、启动gdb使用vim编辑器编写一个简单的测试程序并保存:vim hello.c然后使用gcc将其编译为可执行文件,同时使用-g表示该程序可调试:gcc -g hello.c -o hello接下来启动gdb进行调试:gdb hello或gdb -q hello-q参数可以屏
2022-03-24 14:26:58
24575
4
原创 Linux系统下的gcc操作
目录一、一次性编译1、新建、编辑源文件2、生成可执行程序3、运行可执行程序4、完整演示二、分两步编译1、编译(Compile)2、链接(Link)3、完整演示三、分四步编译1、预处理(.i)2、编译(.s)3、汇编(.o) 合三为一4、链接(.out)完整演示一、一次性编译在Linux上编译.c文件并非直接生成.out文件(Windows上为.exe),中间还经历了预处理、编译、汇编、链接四个过程,好在gcc提供了生成中间文...
2022-03-22 11:59:32
3673
原创 Project2:用C语言实现自己的ls命令/my_ls
目录一、任务说明二、命令解析三、命令终端效果展示四、大致实现思路五、棘手点六、一些小点七、参考书籍八、代码展示part九、总结一、任务说明ls 是 GNU/Linux 操作系统中常见的命令。请使用 C 语言,基于 GNU/Linux 操作系统,编程实现 ls 命令的 部分 功能,包括实现 ls 的 -a、-l、-R、-t、-r、-i、-s 参数。二、命令解析-a 列出目录下的所有文件,包括以.开头的隐含文件 -l 列出文件的详细信息(包
2022-03-20 23:24:12
2599
原创 字典序和康托展开
洛古刷题刷到了和字典序相关的题目题意:输入一个数字,判断其在从小到大字典序中的排序。AC代码:#include<stdio.h>int main(){ char ch[10]; int a[10],num=1,z=1,t,n,str=1; scanf("%d",&n); scanf("%s",&ch); for(int i=0;i<n;i++) //字符串数组转为数字直接-48或-‘0’ {
2022-03-10 20:12:28
239
原创 Project1:设计一个 C 语言的动态扩容缓冲区strbuf
终于成功merge了:任务内容根据目标自行定义填充所给出的API,所给缓冲区类的定义为:struct strbuf { int len; //当前缓冲区(字符串)长度 int alloc; //当前缓冲区(字符串)容量 char *buf; //缓冲区(字符串)};共五个板块:以下为我的实现:#include <stdio.h>#include <string.h>#include <std...
2022-01-18 17:24:41
784
原创 ubuntu下git的配置和命令使用
下面代码段中的串皆为终端命令 git安装sudo apt-get install -y gitgit配置1、配置用户名和邮箱git config --global user.name +用户名(github官网注册的用户名)git config --global user.email +邮箱(gitub官网注册绑定的邮箱)完成后可查看配置:git config --list 2、配置SSH不配置SSH的话,一些git@github...的URL不能下载
2022-01-06 22:53:42
4342
1
原创 学习链表相关(下)---结合数据结构线性表
前言上一篇学习链表相关内容我们介绍了如何创建静态单链表和动态单链表(初始化、内存分配、头插法和尾插法创建链表),以及带头节点单链表的增删改查。接下来的本篇将会开始涉及数据结构中线性表的相关知识点,以及补充无头结点单链表的操作、链表逆置、循环链表、以及双向链表。一、数据结构之线性表线性表指的是相同数据类型的n个数据元素的有限序列。除第一个元素外,每个元素有且仅有一个直接前驱;除最后一个元素外,每个元素有且仅有一个直接后继。元素关键字:有限、有序、同类、逻辑结构(对数据间关系的描述)对于
2021-12-11 22:50:09
365
原创 西邮Linux兴趣小组2019-2021年纳新面试题解析
上面试题:结果:无限打印“ = ” 大家都知道在码长为16位的情况下,int 的取值范围为-32768~32767,而unsinged int即无符号整形的范围为0~65535。那么问题来了哈,unsigned int类型如果遇到的赋值为负数,它会怎么处理呢?答案是它会以补码的形式转换表示。回归到本题:当for循环最后一次将unsigned int类型的i自减为-1时,此时i将会变成其十进制补码:65535。而跳脱for循环的条件是i<0,但每每i想要成为负数的那一刻,啪,直接
2021-12-09 03:18:59
1679
原创 学习链表相关(上)
链表是啥呢?光听名字就知道大概是个有连续性的东西,我第一次听到“链表”这个概念的时候想到的是一节节的火车箱。上一篇博客讲述了结构体的相关知识,实际上链表是通过结构体和指针来实现的。一、什么是链表链表是一种动态存储分配的一种结构,相当于结构通过指针连接的方式重组为一个有序结构。其中指针的追踪保证链表中的每一项都包含着在何处能够找到下一项的信息。一个简单链表的结构为:其中链表的优点在于其高效性和灵活性,并且能够使得内存空间的合理利用率更高。为什么说内存空间利用率更高呢?链表的.
2021-12-04 01:17:50
1167
原创 结构体、联合、枚举等数据处理形式
一、结构体在说链表前提一下结构体,因为结构体相当于一种数据类型,而我们可以使用结构体来实现链表操作。1.1结构体的概念有时候我们需要一个宏观的结构去包罗万象,比如想要建立一个班级成员信息表,里面包括每个人的姓名、性别、家庭住址、出身年月等等,你会发现这些信息如果想要存储在计算机中,他们的数据类型都不一样,并且我们也不希望一个个去定义具体每一项的数据类型。那么
2021-11-30 17:17:28
411
原创 C数组的总结
前言两个月前学的C数组,但最近做算法题发现在数组板块,仍存在或这儿或那儿的漏洞,所以决定回过头来个大复盘,一次给数组板块做个了结。
2021-11-17 19:29:03
511
2
空空如也
这串代码的输出为255是为什么呢?
2021-10-26
大一计科 最后输出结果为什么是(null)呢?
2021-10-23
这串代码为什么输出结果为64
2021-10-21
这道题应该怎么写呀?
2021-09-02
计科专业开学大一 提前学c
2021-08-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人