- 博客(84)
- 资源 (1)
- 收藏
- 关注
原创 海明校验吗
基本原理在数据编码中加入几个校验码位,并把数据的每一个二进制位填充在几个奇偶检验组中。只要有某一个二进制位发生错误,那么就会使其所在校验组的值发生改变,那么在这个基础上,我们就可以找出是哪一个值发生错误。设信息位的位数为 n,校验位的位数为 k,则组成的海明校验码的码长为 n + k 位即 海明校验码位位数 = 信息位位数 + 校验码位位数检验时,需要进行 k 组奇偶检验( 也就是多少个校验位就多少组 ),然后将校验结果组合,可以得到一个 k 位的二进制数,总共能够表示 2k 种状态在这 2k种
2021-03-21 16:53:12
1030
原创 奇偶校验码
理解「奇偶校验码」前,最好要知道一个词的概念「码距」码距:两个合法码字对应二进制位上数字不同的个数例子:00 和 01 的码距为1,因为只有一个位上的数不同00 和 11 的码距为2,因为两个位上的数都不同什么是奇偶校验码奇偶校验码就是用来检测数据传输过程中是否发生错误的一种检验方式,是检验码中最简单的一种本质奇校验信息位 + 校验位里面 1 的个数的总和为奇数个偶校验信息位 + 校验位里面 1 的个数的总和为偶数个信息位:就是其原来二进数数的位的个数校验位:由信息位进
2021-03-20 17:29:34
18709
3
原创 struct的基本使用-go篇
struct 称为结构体,它可以用来描述现实中的一些事物对象它定义了一些不同类型的变量,用这些不同的变量类型来描述事物对象的属性格式type 结构体名 struct {}定义并初始化结构体方法一package mainimport "fmt"type Student struct { Name string Id string Age string}func main() { var student Student student.Name = "陈九礼" stude
2020-12-21 16:21:17
478
原创 map的基本使用-go篇
map是一种键值对的映射,它可以在平时的编程中,存储大部分你需要存储的内容map的形式map[数据类型]数据类型map的创建[ ]在这里表示可选make()创建map变量名 := make(map[数据类型]数据类型, [长度])创建map顺便赋值变量名 := map[数据类型]数据类型{[数据值: 数据值, ...]}什么类型可以作为map的键以下内容都是赋值操作中的样子,如果是声明的话,那么它的样子如下var 变量名 map[数据类型]数据类型如上面的代码所见,它的最后面
2020-12-20 15:10:20
1286
1
原创 Go切片「slice」的介绍
在前面的文章中,我们简单的介绍了数组,但没说数组的缺点是什么?数组有个缺点就是初始化之后数组的长度就固定了,不能改变。但有时,我们不能在一开始就很精确的知道,我们要存储多少个元素,这样的话,对初始化数组的时候,就不好去给定个初始长度,给少了不行,给太多了又很浪费。在Go中,我们可以使用它给我们提供的slice(切片),可以不用关心初始化数组长度这个问题。什么是切片?切片中有3个参数len:表示切片当前可存储元素的个数cap:表示切片最大可存储元素的个数ptr:存储的是指向数组的指针(可以看做是
2020-12-02 22:23:55
607
原创 Go数组,知道这些差不多入门了
有时候,我们想在程序中多存储一些数据的内容,用我们前面学的知识知道,我们可以创建多个变量来接收这些数据,然后去对这些数据进行特定的操作。func main(){ var a int = 10 var b int = 20 var c int = 30}但是,Go语言提供了叫做 “数组” 的东西,让我们不用定义多个变量,就可以多存储一些数据内容什么是数组?数组存储的是同等类型的元素,这些元素在内存中的位置是连续的数组的定义var 变量名 [存储的长度]数据类型 = [存储的长度]数据类型
2020-11-25 20:25:38
187
原创 Go的错误处理
对于怎么样来讲Go中的异常处理,其实我想了很久,最终还是决定用自己的想法,来把错误处理说一遍错误的分类在Go中,有两种错误,一种是让程序停止运行的错误(这种错误,如果被捕获到了,也可以不停止程序),另一种错误是不会让程序停止运行的错误处理可以用到的函数和接口func panic(v interface{})func recover() interface{}type error interface { Error() string}panic()函数调用这个函数,需要给这个函数传递一
2020-11-11 23:13:40
376
原创 defer关键字的使用
在编程中,我们经常有读取文件或者连接数据库资源等操作,每次读取文件后,我们就要关闭文件流,每次连接数据库后,我们都需要断开连接。在Java中,我们利用 try-catch-finally来处理这些问题,把要关闭的资源放在finally中,确保每次关闭资源都会被执行到,而且这样写,就不会忘记关闭资源了,也让我们知道在何时何地可以关闭资源,因为这个 try-catch-finally是可以成对出现的。而在Go中,没有 try-catch-finally来确保我们每次不会忘记关闭资源,也因为没有这个关键字让我们
2020-11-06 21:17:32
445
原创 Go函数的使用
函数是指一段可以直接被另一段程序或代码引用的程序或代码,在Go语言中,函数是它的构成语言构成之一函数的格式func 函数名([参数列表])([返回参数列表]){ 代码块 }[ ]在这里,表示的是可选的意思有名函数无参、无返回值函数package mainimport "fmt"func test(){ fmt.Println("我是无参数,无返回值的函数")}func main() { test()}//输出:我是无参数,无返回值的函数上面创建了一个名为test的函数
2020-11-04 17:02:16
454
原创 Go循环语句的使用
计算机中,我们经常需要对某些代码重复执行多次,一开始我们只懂的多复制几遍来让程序执行package mainimport "fmt"func main() { fmt.Println("镜头前的你好帅!!") fmt.Println("镜头前的你好帅!!") fmt.Println("镜头前的你好帅!!") fmt.Println("镜头前的你好帅!!")}这样的做法,让我们要做的事情繁琐了很多,如果我们要输出1000句语句,那么是不是要把这些代码复制1000遍,非常非常麻烦,不过好
2020-10-24 17:23:46
530
原创 Go的条件判断语句的使用
现实时间中,我们如果想去购物,可以选择网上或者线下去购物,甚至说,要购买的物品都有许多选择,选价格便宜的,选质量好的,选不用运费等等那么在计算机语言中,我们要怎么实现现实中,这些选择呢?Go语言支持了几种条件判断语句,if 语句和switch语句if 语句单分支结构格式if 条件表达式 { 代码块}代码示例package mainimport "fmt"func main(){ var shopping int = 1 //网上购物的编号为1,线下购物的编号为2 /
2020-10-23 23:48:24
1792
原创 Go的基本数据类型转换
在Go中,它的基本数据类型之间的转换,不能隐式的转换,只能显示的转换,由我们自己手动去转换整型 转换成 整型要转换的数据类型(要被转换的数据)低往高转,示例代码package mainimport ( "fmt")func main(){ var A int8 = 111 var B int64 = 555 fmt.Println("A的值为:", A, " B的值为:", B) B = int64(A) fmt.Println("更改后A的值为:", A, " 更改后B
2020-09-29 20:41:28
561
原创 Go的基本数据类型入门看这一篇就差不多了
一开始直接上图,直观的看下基本数据类型整型表格表示类型有无符号占用的存储空间数值范围描述int8有1字节-128 ~ 127int16有2字节-32768 ~ 32767int32有4字节-2147483648 ~ 2147483647int64有8字节-9223372036854775808 ~ 9223372036854775807int有32位系统4字节 64位系统8字节32位系统看int32 64位系统看
2020-09-29 17:53:17
735
1
原创 centos7在虚拟机中,怎么连接网络的问题???
太惨了,每次搞虚拟机能上网,老是搞不定,浪费了一堆时间虚拟机外,网卡的设置进入“设置”点击“网络和Internet”点击“以太网”点击“更改适配器选项”这时候,看你是连WIFI的还是连网线,步骤其实都一样,下面以连WIFI的为例子右键“WLAN”,点击属性勾选“允许其他网络用户通过此计算机的Internet来连接”,选择“家庭网络连接”再选择虚拟机的网卡,最后点击确定我的虚拟机网卡叫 “VMware Network Adapter VMnet8”右键“网卡”,
2020-08-15 23:56:00
2232
1
原创 CountDownLatch的用法,配图版
CountDownLatch 是线程协作中的并发流程控制的工具类,它能在多线程场景中,可以让多个线程执行完自己的任务后,在某个等待点集合,集合完毕后,再继续等待点后面的工作,如图图上有5个蓝色的勇士,每个勇士需要到每扇门寻找钥匙后,就可以在关闭橙色公主的门前等待,直到所有勇士拿到所有钥匙,来开锁才能救出公主。救出公主的关键是必须有5把钥匙其中一勇士调用了 CounDownLatch.count() 拿到了锁勇士拿到锁后打开了一把锁其它勇士也陆续拿到锁并打开锁了最终救出了公主,因为
2020-08-14 19:58:53
619
原创 如何使用CyclicBarrier?
CyclicBarrier 是一种线程协作的方法,它可以让一个线程执行到某个点停止,并等待其它线程到达这个点集结完毕再继续运行。从名字的翻译可以看出 CyclicBarrier是「篱栅」,你可以想象在某个赛道上有比赛,每场比赛需要5匹马到达篱栅才能开始,如下从这图可以看出,有5匹马要进行比赛,但由于马5没有到达赛场,而导致比赛不能开始,下面是代码演示public class CyclicBarrierDemo { static CyclicBarrier cyclicBarrier = n
2020-08-13 23:02:48
839
原创 如何使用Semaphore?
Semaphore的介绍按我的理解是 Semaphore的出现是为了解决在多线程的情况下,并发量过多而导致系统缓慢或崩溃的问题。它可以限制在同一时刻,能访问方法的线程数Semaphore 方法Semaphore的构造器Semaphore(int permits) Semaphore(int permits, boolean fair)第一个构造器是设置许可证的个数,即同时能允许多少个线程执行方法第二个构造器有两个参数,第一个参数跟第一个方法一样,第二个方法是设置是否公平策略,设置是否公平。
2020-08-12 21:59:04
1108
原创 如何把Win的文件上传到虚拟机的Linux上?VMware共享文件夹?xshell文件上传?
写这个标题就来气,VMware共享文件夹弄不来,要下个tools,下就下嘛,看了网上教程,要安装一堆东西,链接也太长了点,又复制不过去虚拟机里,打又可能打错,想想更来气后来就下载个xshell连接虚拟机,为啥下载?因为连接后能复制粘贴,上面说到的问题就解决了。但安装后,突然想到能不能用 xshell上传文件,网上搜了搜,还真有,省了后面下载tools还有设置共享文件夹的功夫检查Linux是否有 lrzsz这是什么?lrzsz 是一款在linux里可代替ftp上传和下载的程序(百度百科说的,可不是我说的
2020-08-08 02:20:43
898
原创 线程池常用的方法介绍
线程池的一些方法提交线程任务threadPool.submit(Runnable task)threadPool.submit(Callable<T> task)关闭线程池/* 调用这个方法线程池不会立即关闭,而是会等到所有线程执行完毕,还有 阻塞队列中的任务执行完毕后,再关闭。在此期间,线程池也会启用拒绝策略, 拒绝新的任务提交*/threadPool.shutdown() /* 调用这个方法,它会给所有线程发送 interrupt信号,尝试中断这些任务,然 后将任
2020-07-28 19:44:45
1535
原创 线程池CachedThreadPool
创建 CachedThreadPool自动创建但不用传参ExecutorService ThreadPool = Executors.newCachedThreadPool();分析一下它的源码,看里面是怎么创建 CachedThreadPool的 public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
2020-07-25 23:24:39
755
原创 线程池FixedThreadPool
如何创建 FixedThreadPool直接 new的话,好像是出不来的只能通过自动创建来创建一个出来public class TestFixedThreadPool{ public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(5); }}参数传进去 5代表了什么意思?我们进去源码看一下public static Exe
2020-07-25 22:30:03
1136
原创 线程池创建线程的各个阶段
判断线程池中是否有线程corePoolsize是否达到上限检查阻塞队列是否已经满了检查线程池中的线程数是否达到最大线程数最后来一张整体的大图欢迎大家关注下个人的「公众号」:独醉贪欢...
2020-07-25 20:25:54
182
原创 线程池有哪些参数?
我们首先创建一个线程池public class ThreadPoolParameters { public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(10); }}当然,上面的参数是随便填的,进入 Executors.newFixedThreadPool里面,查看创建 FixedThreadPool线程池的源码,如下就是它源码
2020-07-25 20:01:59
2852
1
原创 线程的各种状态和顺序
学并发编程的时候,我们不仅仅要知道如何创建线程、停止线程,还要知道线程的各种状态,还有线程之间切换的顺序问题,以便我们在寻找问题的时候,更容易解决问题当线程调用notify或者notifyAll的时候,线程会首先去抢占synchronized的monitor锁,抢到了就进去RUNNABLE状态,抢不到就变成BLOCKED状态线程的初始状态 NEWpublic class ThreadState { public static void main(String[] args) {
2020-07-22 20:52:10
407
原创 线程遇到异常该怎么处理
众所周知,实现 Runnable接口还是 Thread类也好,只要重写了 run()方法,是没有办法把异常往外抛的,那怎么办?直接在 run()方法中,把要处理的异常catch掉public class ExceptionHandling { public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Override
2020-07-21 23:09:16
1332
原创 停止一个线程要如何操作
If this thread is blocked in an invocation of the wait()、wait(long) or wait(long, int) methods of the Object class, or of the join()、join(long)、join(long, int)},sleep(long) or sleep(long, int) methods of this class, then its interrupt status will be cleare
2020-07-21 22:35:11
178
原创 创建新线程的几个主要方法
这里面主要介绍了创建新线程的几个方法,不讨论实现线程有多少种的方法实现 Runnable 接口public class TestRunnableInterface implements Runnable{ @Override public void run() { System.out.println("我创建了一个新的线程!"); } public static void main(String[] args) { TestRunn
2020-07-21 19:57:21
1360
原创 到底什么是线性表?
线性表的定义线性表是具有「相同数据类型」的n(n≥0)个数据元素的「有限序列」,其中n为元素的个数,当n = 0时,线性表为空假设线性表名为L,则一般表示为 L= {a1,a2,a3,…,aj,a(j + 1),…,an}线性表的几个概念aj是线性表的 “第 j 个” 属性,是线性表中的「位序」a1是「表头」元素(线性表的第一个元素),an是「表尾」元素(线性表的最后一个元素)除第一个元素外,每个元素都有且只有一个「前驱」元素除最后一个元素外,每个元素有且只有一个「后继」元素线性表的操
2020-06-27 23:24:03
1450
原创 如何求关系模式的候选码
对于给定的关系模式R(A,A1,A2,…,An)和函数依赖集F,可以把属性分为以下四类L类:仅出现在F中的函数依赖左边的左部属性R类:仅出现在F的函数依赖右边右部属性N类:在F的函数依赖左右边均未出现的属性LR类:在F的函数依赖左右两边均出现的属性对于给定的关系模式R及其函数依赖集F,有以下结论若X(X ∈ R)是L类属性,则X必为R的任一候选码的成员若X(X ∈ R)是L类属性,且X+包含了R的全部属性,则X必为R的唯一候选码若X(X ∈ R)是R类属性,则X不在任何候选码中若X(
2020-06-27 19:44:47
13170
2
原创 无损连接分解
怎么看函数是否是无损连接分解?很多书都有步骤求解,在这我按例子来说,就不把书上的写上来了 1. 第一步,画表(R的属性作为列,ρ的属性作为行) 2. 第二步,填充a(根据ρ中的元素,在表格跟ρ属性相关的一格,填充为a) 3. 第三步,根据函数依赖,填充表格 4. 第四步,循环第三步,直到表格的某一行被填充完整或者循环结果重复 5. 第五步,如果有一行是满的,即关系模式的分解具有无损连接性,反之是有损连接分解例1、关系模式R(U,V,W,X,Y,Z),函数依赖F={U→V,W→Z,Y→U,WY
2020-06-22 22:07:02
11256
8
原创 什么是算法及其复杂度
算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指定表示一个或多个操作算法的5个特性有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都在有穷时间内完成有穷时间指的是在你接收的时间范围内完成确定性:算法中每一条指令必须有确切的含义,让人不会产生二义性;并且,在任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得到出相同的输出可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现输入:一
2020-06-18 18:15:44
400
原创 时间复杂度-严蔚敏老师
什么是时间复杂度?代码执行时间随数据规模增长的变化趋势,前面这句话可能有点难以理解,其实时间复杂度可以理解为,代码执行的次数时间复杂度用什么来表示?用大O表示法来表示时间复杂度大O表示法:T(n) = O(f(n))T(n):表示代码执行的时间f(n):表示每行代码执行次数的总和n:表示数据规模的大小时间复杂度分析:关注循环次数最多的一段代码加法法则:总复杂度等于量级最大的那段代码的复杂度乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积时间复杂度用大O表示法来表示的话
2020-06-18 17:58:56
321
原创 无脑死磕数据库原理填空题
第一章1.数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段,其中数据独立性最高的阶段是_____。2.在关系数据库中,把数据表示成二维表,每一个二维表称为_____。3.在数据库理论中,数据物理结构的改变,如存储设备的更换、物理存储的更换、存取方式等都不影响数据库的逻辑结构,从而不引起应用程序的变化,称为_____。4.数据库管理系统是位于用户与_____之间的软件系统。5.数据库系统中,实现数据管理功能的核心软件称为_____。7.数据库三级模式体系结构的划分,有利于保持数据的_
2020-06-18 15:33:55
4490
原创 数据库函数依赖名词的解释
函数依赖:函数依赖是关系模式中属性之间的一种逻辑依赖关系假设有A、B两个函数,A → B(A 决定 B,即A推出B,也叫做B函数依赖于A)平凡函数依赖:当属性集Y是属性集X的子集时,必然存在函数依赖X→Y,这种类型称为平凡的函数依赖有函数A、B,B是A的子集(即B里面的内容,A都有,但A的内容B不一定有),即一定有 A → B非平凡函数依赖:如果Y不是X的子集,则X→Y为非平凡的函数依赖有函数A、B,B是A不是B的子集(也就是B里面至少有一些属性是A没有的),还有 A → B,即这种类型
2020-06-18 15:17:06
7252
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人