自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 希尔排序---一种特殊的插入排序(Java实现)

什么是希尔排序希尔排序也是一种插入排序,属于直接插入排序的增强,也被称为缩小增量的插入排序。基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。我们来看下希尔排序的基本步骤,在此我们选择增量gap=length/2,缩小增量继续以gap = gap/2的方式,这种增量选择我们可以用一个序列来表示,{n/2,(n/2)/2…1},称为增量序列。希尔排序的增量序列的选择与证明是个数学难

2020-08-16 16:42:38 265

原创 填坑向---补充上一篇博文中的深拷贝浅拷贝问题

利用序列化实现深拷贝//序列化实现深拷贝test_copy test857 = new test_copy(25,'T',new TreeNode(100));//将次对象序列化进入文件中ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("/tmp/test2020"));out.writeObject(test857);out.close();//反序列化读出来test_copy test9896 =

2020-05-14 16:47:48 100

原创 你真的懂Java中的浅拷贝和深拷贝么?

写在前面:其实深拷贝和浅拷贝这个概念,不仅仅只是Java中独有的概念,很多地方都适用。目前网上的各种资料,对二者的描述我认为是模糊不清的,甚至有一些是错误的,简直是误人子弟!这篇博客主要是从源码角度总结一下浅拷贝和深拷贝的区别。概述:浅拷贝和深拷贝的概念都是针对对象而言的,且都是可以通过生成一个新的对象完成对原始对象的拷贝。那么区分的关键在什么地方:深、浅二字。1.浅拷贝浅拷贝的实现方法为重写继承制Object类的clone( )方法,见下:protected native Object clo

2020-05-12 20:53:55 178 1

原创 听说你也要学SpringBoot?来看看我写的入门篇吧!

写在前面:SpringBoot作为业界优秀的框架,早已被各种大厂普遍应用,这得益于其优秀的性能和较为简便的配置。今天来总结一下SpringBoot的入门级配置。SpringBoot的环境搭建较为简单,主要分为三步:1.创建maven工程这点儿我就不多做赘述了~都懂滴2.在工程内添加SpringBoot的起步依赖如下<!-- 配置SpringBoot环境首先要添加SpringBoo...

2020-05-07 17:01:29 106

原创 Java8中的Lambda表达式(一文秒懂lambdm表达式)

写在前面关于lambda表达式,网上的资料不少,但是仔细看一看就会发现,写的良莠不齐,且大部分博文的表达较差,词不达意,所以这里自己进行一次总结,方便日后复习。什么是Lambda表达式?lambda表达式,是Java作为面向对象的编程语言在函数式编程方面的一些拓展和优点合并。***Lambda 允许把函数(行为)作为一个方法的参数(函数作为参数传递进方法中)***。在lambda表达式子出...

2020-05-04 16:18:40 784 1

原创 git push -u参数意义

其实发现自己在过往对于细节的把控不是很好,所以就会导致再三犯错。以后在工作学习中要主要对于细节的把控。下面对于git push -u的参数进行一下分析。其实一般使用来说。git pull某个分支之后,进行修改,直接git push就会发到对应的某个分支上。但是如果这个分支不是从远端pull下来的,而是本地创建的分支,那么当进行push时,便需要首先和远端的某个分支建立联系,而参数-u便是这个建立联系的关键。-u一般是在第一次push时,建立本地的分支和远端某个分支之间的关联,这样下次在本地分支push

2021-06-23 15:54:44 1132

原创 关于Git的一些命令

由于自己即将入职,所以需要提前做一些准备,把git的一些常用指令存储一下,传送门(- -其实主要是想在六月发一篇划水博客)

2021-06-23 15:33:05 139

原创 Go语言中字典树的实现

写在前面字典树在存储、查询方面应用广泛。所以特总结一下,利用GO语言实现字典树。具体实现字典树的实现主要还是基于树形结构,如果只是小写字母的话,那其实字典树是一个26叉树,每个节点最多都可以有26个子节点。从而可以利用一个长度为26的数组来记录某个节点的子节点情况。并且每个节点可以使用一个布尔标志位来划定是否是一个单词,这是关键所在,具体代码见下:type Trie struct { children [26]*Trie isEnd bool}func Construct

2021-05-23 16:49:15 320 2

原创 Go语言中的自定义slice排序

写在前面排序算法在日常生活中经常用到,许多语言有着很方便的api进行对排序算法的快速支持,譬如JAVA等中的lambda表达式,可以快速将自定义的排序规则织入。slice作为Go语言中特殊的数据结构,其排序的场景是比较常见的。Slice排序Go语言中的sort.slice可以利用匿名函数来快速实现自定义的排序。其实其很类似于其他语言中的sort函数,通过利用lambda表达式实现自定义排序,只不过这里是通过一个匿名函数。具体使用,见一个算法案例。案例分析给定一个字符串数组,和一个整数K,返回这个字

2021-05-20 20:37:00 1835

原创 Docker自定义镜像(异构为例)

写在前面docker镜像的制作主要是通过从docker仓库中拉取原始镜像,然后再通过生成容器的方式对镜像进行定制,或者直接利用dockerfile脚本文件对容器镜像进行个性化定制。例子这里主要是以异构docker镜像的制作为例子展开的,所谓的异构主要是指非x86架构,包括arm以及ppc架构等。第一步:拉取原始镜像:docker pull multiarch/ubuntu-core:armhf-focal第二步:利用原始镜像拉取生成相应的容器:docker run -it multiarch

2021-05-04 23:00:21 444 1

原创 OpenStack中制作和上传Docker镜像

一、在docker节点新建dockerfile文件# vim dockerfie二、文件里面填(无需任何修改):FROM ubuntu:14.04MAINTAINER ZhangKe<[email protected]>RUN apt-get updateRUN apt-get install -y openssh-serverRUN mkdir /var/run/sshdRUN echo 'root:rootroot' |chpasswdRUN sed -ri 's/^Per

2021-04-30 21:22:22 902 3

原创 Go语言实现一个简单的并发聊天室

写在前面Go语言在很多方面天然的具备很多便捷性,譬如网络编程,并发编程。而通道则又是Go语言实现并发编程的重要工具,因为其承担着通道之间互相通信的重任。并且因为其本身就是并发安全的,所以在某些场景下是非常好用的。并发聊天服务器这里主要是实现一个简单的并发聊天服务器。首先,客户端可以在服务器中注册自己的信息(登录以及退出),客户端发出的所有的信息由服务器向各个客户端进行转发,或者换句话说是广播。具体代码服务端说的再多,没有代码简单明了,直接上代码~package mainimport (

2021-04-26 16:48:30 1951 5

原创 Docker实现异构容器的创建

需求背景需要在X86的环境中,生成非X86架构的Docker容器,譬如arm以及ppc等。基本思路需要借助一款类似于转译cpu指令的程序:qumu-user-static。每一个异构容器的内部指令都会通过此程序转译给底层的X86架构cpu,从而实现上述功能。简要过程步骤1. 首先打开Linux内核的binfmt功能。该功能就是告诉linux什么样的文件等该用什么样的程序打开。这里主要是为了让Linux知道,系统在运行arm等架构的程序指令时,自动调用qemu-user-static来执行。开启方式

2021-04-24 11:20:26 540

原创 GO语言实现拓扑排序-2

本次主要利用BFS实现拓扑排序在上一篇文章中,主要是利用BFS实现了拓扑排序。与DFS实现拓扑排序不一样的是,DFS主要采用递归的方式实现拓扑排序,而BFS则无需引入递归,其核心思想是对一个有向(有环)图的各个节点入度的判断与分析。核心代码func findOrder(numCourses int, prerequisites [][]int) []int { var ( //描述有向图 edges = make([][]int, numCourses)

2021-04-01 11:04:56 210

原创 Go语言实现拓扑排序-1

写在前面所谓算法,一定一定是要落地才有意义的,任何一个在计算机领域流行的算法,一定有与之深度match的业务场景。这里之所以总结拓扑排序,是因为拓扑排序的应用场景还是非常丰富的。拓扑排序应用场景从经典的(人人都刷过)的课程表排课问题,到任何一些存在前驱和后驱关系的元素排序问题,其实都是典型的拓扑排序问题。如果细化问题,拓扑排序更多时候是有向图遍历或者排序。Go语言实现拓扑排序业务需求n门课程,其各个课程之间的有的课程需要先修,对应关系以map给出,例如:“信号与系统”:{"通信原理",“线性代

2021-03-30 10:15:53 298

原创 关于Go语言中的迭代变量的分析

写在前面迭代变量的使用,在立即执行的函数中,一般是不会显现问题的,但是在延迟执行的函数中,就会出现致命的问题。立即执行的情况当然,这种例子有很多,这里举一个非常简单的例子分析一下。场景需求:将silce内的数字迭代输出即可。package mainimport "fmt"func main() { var numsSilces []int for i:=0; i<10; i++ { numsSilces = append(numsSilces, i) } for _, nu

2021-03-28 15:08:57 330

原创 关于Go语言中的接口类型判断问题

作为一款面向对象的编程语言,Go语言的接口同样也存在多态这项特性。任何类型,如果其实现了某个接口所定义约束的函数,那么就说该类型实现了此接口。所以,就需要判断此时这个接口变量到底是什么类型的。具体见下:package mainimport "fmt"//定义接口type phone interface { call()}//利用两个子类型来实现该接口(实现其方法就ok,并无类似于implament等关键字)type apple struct{}type nokia struct {}

2021-03-19 16:01:36 465

原创 Pthon编写脚本

这里直接借鉴大佬的总结,用于自己日后查看学习参考,链接如下:传送门

2021-03-15 15:56:41 78

原创 Python多版本切换

环境MAC OS 其预装的是Python2,在安装了Python3之后,如何切换版本。如果是直接官网下载安装,直接在操作时,区别指令即可:python xxx.pypython3 xxx.py如果未能正常,可采用修改配置文件,添加python3的alias别名来实现此功能:用命令 sudo vi ~/.bashrc 在文本中添加一个alias。例如:alias python3=′/Library/Frameworks/Python.framework/Versions/3.7/bin/pyt

2021-03-15 15:44:06 130

原创 Go语言中的函数字面量与匿名函数

写在前面习惯性的在写内容前说点儿什么,个人感觉Go语言中的函数字面量这个东西用着不是很顺手,所以想着总结一下,今天先从简单的开始。持续更新给出概念命名函数的作用范围是包级别的,这个大家都知道。如果想在程序的任意表达式中使用一个变量来表达函数,那便需要:函数字面量。函数字面量类似于函数申明,只不过其实际是一个变量,而此变量的值是一个匿名函数。如下所示:func lbw() func() int { return func() int{ }}其实可以这么理解,lbw这个字面量指的是一个返回值为

2021-03-13 19:37:01 425 2

原创 GO语言多线程实践-3

关于Channel这种GO语言并发原语其实channel已经在另外一篇博客里面有曾经提到过,其使用起来是阻塞的(非buffered),所以比较容易造成dead lock。今天主要总结其两种比较优秀的应用场景:1.生产者和消费者的场景;2.用于替换WaitGroup的场景。生产者和消费者的场景具体代码见下:package mainimport ( "fmt" "math/rand" "time")func main() { c := make(chan int) for i :=

2021-03-08 11:27:04 135

原创 GO语言多线程实践-2

实践背景本次实践的背景依然MIT的6.824课程,在课程中lab2需要实现Raft算法,Raft算法的原理细节在我的另外一篇博客中,在这里就不再赘述了。Raft中Leader Election在Raft算法中,当一个节点变为candidate节点之后,其他的节点需要对其进行投票,当其获得超过半数票数时即当选,反之落选。下面将对该过程进行简单的模拟实践。实践思路1.首先向其他节点发送投票请求;2.根据投票请求的结果进行票数计算;3.根据票数的结果,得出投票的结果。那么在第一个步骤中,一定是并发

2021-03-04 19:53:29 217 2

原创 GO语言多线程实践-1

写在前面其实不论是哪一种编程语言,在当下这种大数据的业务压力下,多线程都是重中之重。本文的一些关于go语言的多线程实践都是基于MIT6.824课程总结而来的。多线程通信使用channel通道关于利用channel实现多线程通信的方法,在另外一篇博客中已经提及了,需要注意的主要是其可能造成的死锁问题,本文主要介绍下面这种多线程通信的方式。使用全局变量+锁其实这种方法与channel最大的不同就是,前者是go语言所独有的特性,因为其天然的可以集成多线程并发。这种方法在很多编程语言中都有,譬如Java

2021-03-03 11:09:03 518

原创 Raft算法详解

为什么会有这篇总结留下这篇总结的原因还是因为MIT6.824课程,分布式系统中的Raft算法是非常重要的,首先给出一篇很好的参考博客,供自己以后查看。持续更新…

2021-02-23 10:25:09 159

转载 Linux下查询本机cpu、内存、磁盘利用率情况

查询主机各类资源的利用率情况是非常重要的,这里直接给出大佬的文章,以供自己以后进行参考。

2021-02-08 12:51:37 244

原创 GO中的Channel以及死锁的造成

写在前面这篇文章的诞生要感谢MIT 6.284课程。在其中一节课中,谈到了多线程的协同的一些问题,其中就涉及到了channel这个概念,并由一段代码引发思考并逐渐深入得到了这篇文章。引子课程中有一段代码如下:其大致含义是:代码背景是在进行多线程网络爬虫页面url,master线程启动后,从channel通道中读取当前页面的所有url即urls,接着再对这个urls中的每一个url进行爬虫读取新页面中的urls(即执行go worker(u, ch ,fetcher)),每启动一个worker线程便

2021-01-31 22:19:47 407

原创 关于Go语言中的waitGroup

写在前面如果你刚接触Go语言并且想用它构建高并发,高性能的应用,弄明白WaitGroups是怎么回事很重要。在本教程中,我们将掌握以下内容:WaitGroups的用途一个WaitGroups的简单示例学习完本教程,你将会对WaitGroups有个全面的了解并且可以在你的高并发go应用中使用它。理解WaitGroups接下来我们就来看一下WaitGroups是什么以及它能为我们解决什么问题当你在程序中使用go语言的协程的时候,在协程执行完成之前,你需要阻塞程序的执行。请看以下代码示例 :

2021-01-30 22:21:15 172

原创 关于Go语言中一些日志的打印

之前一直为了偷懒,将日志的答应全部使用的是log.Fatal,结果发现,一旦出现问题,程序直接退出了。研究源码发现:func Fatal(v ...interface{}) { std.Output(2, fmt.Sprint(v...)) os.Exit(1)}可以明显的看到:使用log.Fatal 和 log.Panic 相关的函数时,会调用os.Exit(1)退出程序。总结所以说,在平时的使用过程中,尽量换用 log.Print 。该函数在输出日志的时候并不会调用os.Exit 进

2020-12-23 19:35:56 448

原创 Go语言中连接MySql并进行数据交互

写在前面总结这一篇博文的原因是,今天竟然被一条SQL的预处理语句给教训了,应该反省一下。借鉴一下大佬的文章太烂了,先把大佬的文章放上来供自己以后参考

2020-12-19 21:24:18 201 2

原创 闲聊赛博朋克2077

为什么提笔前一阵子入了赛博朋克2077,从序章任务的心情澎湃,到被bug折磨到痛不欲生(ps4 pro主机版本),再到最后结局的怅然若失,还是想说几句,记录一下这几天赛博朋克的时光。闲余小思最后的结局,我选择的是星星解决,即会和女友帕南一起,面对荒坂,离开夜之城。这应该是我最喜欢的解决了,V之所以可以是V,那么他一定不会和荒坂妥协的,而且这一定也是银手所不愿意看到的。至于为什么没有把身体交给银手,这是因为帕南爱的是V,而不是被强尼占据了身体的V。既然选择了和帕南一起面对这些,那么帕南也一定会希望从神舆

2020-12-19 17:15:03 430 3

原创 关于OpenStack Neutron中的各种网络

下面这篇文章说的非常清楚,是一篇让人收获很多的文章另外一篇文章也不错

2020-12-17 22:57:00 228

原创 基于Docker搭建MySql主从集群

主体引用主体上,参考这位仁兄的文章说点别的主要是在一开始镜像下载的时候,主要选择合适的镜像源,亲测有效的是下面这个:http://f2d6cb40.m.daocloud.io只需要在镜像的时候通过参数指定镜像源即可:--registry-mirror=http://f2d6cb40.m.daocloud.io...

2020-12-16 21:06:21 109

转载 关于go语言中格式化时间的问题

看到一篇文章,还不错,直接拿来转载使用了:格式日期

2020-12-14 14:19:25 153

原创 GO语言原生实现文件上传

写在前面最近在学习go,发现实践才是检验真理的唯一标准。在不引入任何框架的基础上,利用go语言实现一个web小应用也是比较方便的,但是坑还是不少,这里直接放上来,以防以后自己用得到,也希望可以帮到你。首先写处理文件上传的handlerpackage handler/**实现文件的上传和下载*/import ( "fmt" "io" "io/ioutil" "net/http" "os")//文件上传(这里一定要注意,方法名首字母大写,否则无法在别的包中被引用发现)func

2020-12-13 17:09:12 1340

原创 Go语言中的rune数据类型

写在前面最近开始学习Go语言,因为自己是从Java逐步转Go原因,在感慨Go语言简便的同时,也因为其封装的数据类型和包较多,所以还得慢慢学习。今天来谈谈Go语言中的rune数据类型。名词解释Go语言中的整数类型也有有符号数和无符号数之别,分别用int 和uint表示,也分别由8、16、32、64位之分。Go语言中有一种特殊的数据类型rune,该数据类型与int32是同义词,或者说其本身只是int32的别称。为何要有rune那么既然rune和int32等价,为什么还需要有rune这种数据类型呢?我是

2020-12-06 16:54:51 2233 2

原创 Java HashMap中的getOrDefault(key, defaultValue)方法以及一些思考

写在前面其实最近发现很多api虽然使用的不是太多,但是真的还蛮有用的,可以极大的节省代码空间,避免代码冗余的情况发生。getOrDefault(key, defaultValue)这个api其实是在hashmap还比较常用的,从map中去取一个值的时候,如果该值存在,那么就返回该值对应的value,反之如果不存在,那么将会返回默认值:defaultvalue在一些特定的场景中,或者说特定的数据结构中这个api还是非常好用的。应用实例以力扣381题为例子说一下吧:题干设计一个支持在平均 时间复

2020-10-31 22:12:17 795

原创 Spring框架中的IOC初步理解

写在前面Spring框架中的IOC初步理解终于到了Spring框架的学习,看了一堆资料,几乎每种资料都会先去强调IOC的重要性。那么,什么是IOC???名词解释一波:inversion of control 反转控制。那么,深入的理解一下:反转什么?控制什么? ------反转创建对象的控制权:创建对象的控制权一直在我们手里,通过new方法即可。但是spring里面的ioc是将创建对象的控...

2020-09-15 16:12:54 121

原创 git命令详细记录

Git命令记录在这里对git的相关操作在这里详细记录一下,方便自己日后的复习操作。首先在本地指定目录创建git本地仓库:git init然后将指定的项目从远程仓库上git下来:git clone git@仓库地址接着查看当前分支:git branch根据实际的需要,创建自己的分支:git branch newbranch接着将自己创建的本地分支push到远程仓库去:git push origin newbranch...

2020-09-15 16:12:19 96

原创 <细节向>jdk1.8中HashMap底层链表转红黑树的阈值为什么是8?红黑树转链表为什么是6?

先看源码/* * Implementation notes. * * This map usually acts as a binned (bucketed) hash table, but * when bins get too large, they are transformed into bins of * TreeNodes, each structured similarly to those in * java.util.TreeM

2020-08-12 10:51:26 2500 4

原创 二叉树深度和高度

首先对于一棵树而言,二者无区别虽然深度是从上往下,高度的从下往上。但是对于一颗树而言,其高度和深度均为根节点到叶子节点路径的最大值(经过边条数的最大值)但是对于树中某节点而言,就不一样了对于树中某个节点,其深度为根节点到其的边数,而高度为叶子节点到其最长的边数。默认根节点的深度和叶子节点的高度均为0...

2020-08-02 11:08:50 493

信息论__第一章第一节熵.pdf

本pdf为信息论第一章的讲义。目前网络上的信息论教材层次不齐,质量堪忧,我认为这份pdf属于教材中的良品,所以和大家分享,欢迎一起交流学习~

2020-05-11

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

TA关注的人

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