自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

windyear

写写笔记,同时希望能够帮到别人

  • 博客(41)
  • 收藏
  • 关注

原创 算法第四版书的C++版本代码

最近在看算法第四版,书中使用的是JAVA来实现,因为本人主用语言是C++ ,并且想学得更好一点,于是将书中的例子用C++重写了一遍,主要的数据结构使用了STL的容器。代码中带有本人的一些注释和C++语言更JAVA不同出有部分改动。下面的是github地址。现在差不多写好了第四章,其他的有待慢慢加上。https://github.com/windyear/AlgorithmsAndDataStruc...

2018-03-05 17:20:36 4861 1

原创 开发kubernetes的webhook扩展程序之获取证书文件

摘要本文章主要介绍开发k8s的webhook扩展程序是需要做的获取证书的流程,主要参考了一个webhook程序。是对该程序的自动生成脚本 webhook-create-signed-cert.sh的简单描述。需要TLS验证的原因首先API服务器与其他程序通信需要保证安全性,所以他们之间要https加密通信。webhook程序跟API服务器通信的时候可以理解为webhook程序时服务端,所...

2019-06-29 12:11:08 2591

原创 descheduler源码走读笔记

descheduler整体介绍descheduler是k8s Incubator下面的一个项目,旨在补充默认的kube-scheduler调度能力。在k8s中,pod启动之后会经过调度器调度到某个节点上,之后不会再被调度。但是,随着集群的节点和pod不断增加,就会出现下面的情况需要把pod调度到其他节点上面去运行。某些节点资源使用过高因为后面添加了节点affinity,taints和lab...

2019-06-16 17:50:39 1392

原创 用文件锁实现程序只能有一个进程实例

用文件锁实现程序只能有一个进程实例原理:利用文件锁,如果能加唯一写锁说明没有程序占用,否则已有进程,关闭该进程。用途:用于需要单进程实例的程序比如守护进程。代码示例://// Created by windyear_office on 19-2-28.// 一个用文件锁实现进程只能打开单个实例的程序。#include <fcntl.h> // fcntl sturc...

2019-02-28 16:56:33 1077

原创 POSIX信号量加共享内存实现两个进程简单通信(一收一发)

POSIX信号量加共享内存实现两个进程简单通信(一收一发)要点用了POSIX具名信号量,可以在进程间共享用共享内存当做通信介质信号量初始值为0,实现同步的功能,需要发送端写入信息后通知接收方接收。其他细节在代码注释中POSIXSem_w.cpp为发送端代码,POSIXSem_r.cpp为接收端代码。代码POSIXSem_w.cpp// 一个配合共享内存实现进程间同步的Po...

2019-02-26 22:42:03 1151

原创 ubuntu安装tcpkali

tcpkail最近为了进行tcp服务器的压力测试,寻找了一些工具,找到了tcpkali。但是需要源代码进行安装。从github上下载后按照readme安装依赖库,之后再执行安装命令。tcpkali发现报错。原因是缺少了一些文件。解决办法安装指令中的 test -f configure || autoreconf -iv 原本是第一条命令执行成功,不会执行第二条。于是分开执行,让aut...

2019-02-17 16:26:38 412

原创 Leetcode208 Trie 实现前缀树

Leetcode208 Trie 实现前缀树题目实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。分析字典树关键在于节点的结构的设定。利用字符串的公共前缀节省空间。节点结构应该需要一个节点指针数组代表路径。一个变量记录是否是叶子。拓展增加数量的记录,需要增加经过该节点的字符串数量和以其为结尾的数量。节点结构如下...

2019-02-12 21:27:15 284

原创 编程笔试题之求水仙花数

题目春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 现在要求输出所有在m和n范围内的水仙花数。分析没有什么难度,暴力求解即可。注意格式的控制。本次采取一个vector记录数字,最后再调输出格式。代码#include <iost...

2018-09-09 22:37:03 3042

原创 编程笔试题值求数列的和

题目数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。分析题目没有难度,调用库函数sqrt求出平方根,然后控制输出的精度需要设置。代码#include <cmath>#include <iostream>using namespace std;int main(){ double n, m; cout....

2018-09-09 22:35:59 675

原创 编程笔试题之句子反转

题目给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello”。输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)。对于每个测试示例,要求输出句子中单词反转后形成的句子分析反转想到使用栈,然后就是解决存储单词...

2018-08-19 22:25:16 461

原创 leetcode53之最大连续子数组和

题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。输入: [-2,1,-3,4,-1,2,1,-5,4];输出: 6;解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。尽量实现复杂度为O(n)的算法,还可以采用分治的方法。分析这道题第一个想法是直接暴力求解。三重循环,但是时间复杂度太高了。分治的方法在算法...

2018-07-11 10:09:47 2152

原创 APUE第八章进程控制读书笔记

总结第八章主要讲了fork函数,exec系列函数,exit系列函数和wait系列函数的主要用途,这些函数可以对进程进行控制。后面还有一些对system函数,解释器文件,进程时间进程调度的简单介绍。重点内容在于对前面的几个系统调用的理解,还有孤儿进程,僵尸进程的概念。重点笔记fork函数调用之后,子进程和父进程共享正文段,其余的数据段,堆和栈被复制。且共享同一个文件偏移量。处理文件...

2018-07-10 16:56:40 150

原创 leetcode169之寻找绝对众数

题目给出一串数字,求出其中的众数的值,保证输入的数字数组拥有绝对众数。绝对众数是指超过总的数字个数的一半的数字。分析这道题被归到分治算法当中去,应当使用分解为不同过得子问题的问题。想了很久无法拆出子问题来求解。无法利用超过一半数量的数字这个条件。后来直接使用了map去统计数字的个数的方法。直到找到超多一半数量的数字返回。还有一个方法是直接排序,然后找到其中中间的数字。...

2018-07-10 15:27:44 300

原创 leetcode142之寻找环形链表的环的起点

题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。说明:不允许修改给定的链表。尽量不用额外的存储空间分析这个跟寻找环的题目相似,但是难度增加了。花费了较多时间去做。肯定是利用快慢指针找出是否存在环。画图之后发现,慢指针走的步数是环的长度。所以,只要另一个指针从开头出发,慢指针继续向前走,他们碰到的节点就是环的入口。第一版的代码还用了一个...

2018-07-05 22:40:05 887

原创 APUE第七章重点笔记

进程环境主要讲了程序如何启动和终止,向程序传递参数和环境表,C程序的典型存储空间布局。动态分配内存。main函数要返回整型,否则返回状态是不明确的。exit()函数会调用一个终止处理程序。_exit和_Exit会立即进入内核。程序拥有环境表,是指针数组,可以被读取和修改。C程序存储空间由正文段,初始化数据,bss(未初始化数据),堆和栈组成,栈从高地址往低地址生长。共享库是运行时载入...

2018-07-04 17:22:23 154

原创 leetcode之删除倒数第N个节点

题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。给定一个链表: 1->2->3->4->5, 和 n = 2。当删除了倒数第二个节点后,链表变为 1->2->3->5。你能尝试使用一趟扫描实现吗?分析使用一遍扫描实现,需要计算倒数。很明显是使用快慢指针的问题。快指针先走N步,然后一起走,到达最后的时候就能找...

2018-07-01 19:52:57 233

原创 leetcode之删除重复的有序链表的节点

题目给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。输入: 1->2->3->3->4->4->5:输出: 1->2->5。分析这个删除重复链表的题目跟之前的不同,要把重复的元素全部删除。遍历链表可以删除重复多余的链表,但是会剩下一个。问题的关键在于怎样把有重复的最后一个节点删除。可添加...

2018-07-01 17:13:03 926

原创 leetcode之回文链表

题目请判断一个链表是否为回文链表。输入: 1->2->2->1;输出: true分析第一时间想到的是利用栈,额外的存储空间保存前面一半的节点值,然后跟后一半比较是否相等即可。还有一个方法是翻转一半的链表。由于单向链表不能反向搜索,所以经常应用快慢指针。比如用快慢指针找到一半的位置。代码/** * Definition for sin...

2018-06-30 10:44:48 510

原创 leetcode之找出相交链表的交点

题目编写一个程序,找到两个单链表相交的起始节点。如果相交只会是y型相交,如果不想交就返回空指针。O(1)空间和O(n)时间分析直接采取暴力二重循环可以求解,但是超过时间限制。一个思路是先找出两个链表长度相差的值,然后一个链表先走相差的步数,如果相交,可以找到相交的节点。还有一个方法是建立hash表,但是超出存储的限制了。一种比较巧妙的方法是人工构建环,如果从A的尾部...

2018-06-29 21:41:11 472

原创 leetcode之两种方法反转链表

题目反转一个单链表。可以迭代或递归地反转链表。示例:输入: 1->2->3->4->5->NULL;输出: 5->4->3->2->1->NULL。分析迭代的方法可以从头开始遍历,每次将一个指向反转。在草稿纸上画出草图,很明显需要三个临时指针。反转后所有指针向后移动一步。知道最后一个指针指向空。最后更新一下最后一个...

2018-06-27 20:41:23 5096

原创 leetcode之删除链表中重复的元素

题目给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。输入: 1->1->2;输出: 1->2分析题目比较简单,直接遍历一次即可。使用两个指针,如果后一个节点的值和前面一个相等,删除后面的一个节点。注意传入的头结点为空或者只有一个元素的情况。代码/** * Definition for singly-linked list...

2018-06-27 16:18:41 888

原创 leetcode之删除链表中给定值的节点

题目删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6;输出: 1->2->3->4->5分析比较简单,直接遍历一遍链表,将值相等的删除即可。删除时要保留前一个节点的指针,直接指向下一个节点。重点注意的地方是,如果从头节点开始就是要删除的节点,会使得算...

2018-06-27 16:18:22 361

原创 leetcode之删除链表的节点

题目只给出一个节点信息,删除该节点。链表至少包含两个节点。 链表中所有节点的值都是唯一的。 给定的节点为非末尾节点并且一定是链表中的一个有效节点。 不要从你的函数中返回任何结果。思路这道题要比较巧妙的思路,一开始的时候没有想到。因为链表是不能向前走的,所以不能找到前面一个节点。那么应该如何删除当前的节点呢?其实可以理解链表的节点只是值不同,值替换了其实链表的节点的顺序也...

2018-06-23 21:13:56 133

原创 leetcode之环形链表

题目描述给定一个链表,判断链表中是否有环。不用额外空间。题目分析可以使用快慢指针,快指针比满指针快一步,如果有环就一定可以追上。如果到达了空指针,说明没有环。注意比较相等的时候要比较指针相等,不是节点的值相等。代码/** * Definition for singly-linked list. * struct ListNode { * in...

2018-06-23 20:29:58 443

原创 leetcode之合并有序链表

题目将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4;输出:1->1->2->3->4->4分析思路比较简单,直接遍历两个链表,知道两个到达结尾。每次合并一个节点。值得注意的是两个链表结束的时间不同,所以先判断是否有一个链表已经到达...

2018-06-22 22:57:29 117

原创 leetcode之两数相加

题目描述给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4);输出:7 -> 0 -> 8;原因:342 + 465 = 807。思路很容易想到按...

2018-06-21 22:18:51 180

原创 leetcode_两整数之和

题目给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9,因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]思路分析一个马上想到的思路是遍历所有整数的两两组合,直到和为目标值。可用二重循环...

2018-06-21 15:46:43 362

原创 gvm关于配置GOPATH环境变量的问题

gvm利用pkgset对go的开发环境进行管理,不同的pkgset对应不同的go项目。gvm pkgenv pkgname进行环境变量的设置。在src目录下面还要加一个项目的目录,否则也会go install 失败参考资料 GVM 使用方法...

2018-06-10 21:35:25 2164

原创 android小项目——FateChoice,选择困难症神器

FateChoice项目说明FateChoice针对有选择困难症的人,提供添加选择主题,随机做一个抉择的功能。暂时实现了主界面,添加主题,进行随机选择的功能。分为三个activity项目原理十分简单。存储采用了 SharedPreferences,主界面根据存储的内容进行动态布局。技术难点每次添加主题后返回主界面需要刷新一遍,所以采用的技术方案是跳转到添加主题的activ...

2018-06-10 21:19:16 477

原创 ERROR in Cannot find module 'node-sass' 找不到 node-sass 模块

用 npm 安装依赖后找不到 node-sass 模块有可能是网络原因安装失败, 可以用npm install node-sass重新安装一下。如果还是不找不到,需要重新 build 一下, npm rebuild node-sass就可以了。还有一种可能是全局安装了node, 这时候需要装一个 nvm 管理 node 的版本,删除原来的全局 node, 把那些相关联的全局 node_m...

2018-03-28 16:50:40 14121 1

原创 学习git两天总结

总结说明教程花了接近两天的时间学习了git,基本上是顺着廖雪峰老师的git教程走的,自己敲了大多数命令,总算是入门了。想起自己好久没有打理自己的博客了,于是乎写下这篇总结当做是一次温故而知新的过程,并且留下一些自己一步一步走过的学习轨迹。概述git是一个分布式的版本管理软件,这句话有两重意思。第一:版本管理工具:本人的理解git是用来管理版本的,方便记录每次对代码的修改。实际上不单...

2018-03-25 16:10:04 274

原创 C++笔记1

C++学习笔记1第二章开始学习C++过程化编程思想是根据执行的操作来构思程序。使问题满足语言的过程性方法。面向对象让语言来满足问题的要求。名称空间可以区分不同版本的代码,比如不停公司开发的相同函数名称的函数。回车不能放在字符串中间,空格,制表和回车可以被忽略,但是不能放在名称或者单词之间。cout可以实现智能的打印转换,比如打印一个整形变量,变量里面存储的是数值的二进制形式,...

2018-03-25 16:09:09 116

原创 一道关于整数变换次数笔试题

题目描述:输入一个整数,将它的没一位分别相乘得到一个新的数,直到该数字为1位数。求要做多少次变换。思路该题目很明显给出了这个计算过程,每次都将每一位相乘,之后判断是否达到一位数这个要求。所以问题的关键在于如何将一个多位数字的每一位逐一提取出来。使用对10的取余可以获得各位数字。而对10取模每次都可以将位数降一位。所以整个计算过程包括两个嵌套起来的循环。代码展示u...

2018-03-25 16:08:20 296

原创 learningSocket

简单的本地socket编程以及能够下载网页的socket客户端程序说明使用python封装好的网络编程模块socket,可以快速实现socke编程开发。服务端的主要操作是首先有一个套接字实例,然后去监听某个地址和端口。客户端同样这样,使用connect()函数来连接服务器。此时,服务器的accept()方法一直阻塞到有连接并且返回一个套接字,地址的元组。通过套接字实例的send和r...

2018-03-25 16:06:44 125

原创 cloneBranchFromOrigin

利用git从远程仓库中clone其他分支使用需求说明使用git clone时会默认下载master分支并且实现跟踪,或者可以直接指定要下载的分支。 其他人将其他分支推送到远程之后需要在本地创建一个跟踪分支进行开发。使用方式git checkout -b branchname origin/branchname本地创建一个对应的分支。git checkout -t ...

2018-03-25 16:05:39 99

原创 simpleCalculator

一个简单的计算器简易程序说明一个很简单的用c语言实现的计算器,只能计算一次加减乘除和取余操作。实现原理是,用三个变量分别存储两个操作数和运算符。* 通过switch语句判断执行哪种操作,然后打印出相应的表达式结果。 *值得注意的问题程序需要用到输入控制,使其一直运行直到输入EOF或者输入错误。可以用一个while循环控制,判决表达式用scanf的返回值。除数不能为零等细...

2018-03-25 16:04:42 1029

原创 useHexoInTwoComputer

瞎折腾——在两台电脑上同时使用hexo发布博客作死想要同时在宿舍和实验室写文章并且马上发布。之前的方式是写好文章,然后同步到github上的管理原始代码的分支,然后在宿舍pull下来并且使用hexo命令进行发布,这样太麻烦了。实验:写好文章后马上 hexo deploy -g发布,结果没有生成网站文件,并且将以前的commit覆盖了。解决问题上网查了很久,发现...

2018-03-25 16:03:27 107

原创 QuickSort

快速排序算法分析算法的主要思路是分治思想,将数组分成两个子数组,分别大于和小于主元。然后每个子数组也是按照同样的方法划分,直到子数组只有一个元素。可以分成两个主要的函数,第一个是Partition函数,该函数返回的是主元的位置。第二个函数是QuickSort函数,递归调用。算法的平均时间复杂度是nlogn,最坏的情况是n*n。快速排序属于原址排序,在虚存条件下也可以很好的工作。...

2018-03-25 15:58:05 148

原创 小谈插入排序

小谈插入排序插入排序是常见的排序方式之一,时间复杂度为O(n^2)。它是一种原址性的排序方法,只需要额外的一点空间存储中间变量。比较节省空间,在输入规模不大的时候不失为一种好的排序方法。主要思路如下:从第二个元素开始,逐个与前面的元素比较以找到合适的插入位置,不符合大小关系的往后移动一位,直到找到正确的位置为止。代码如下:#include <stdio.h>int...

2018-03-25 15:56:10 156

原创 拜读UNP前两部分

前言利用国庆黄金周的假期,粗略地看了UNIX网络编程这边关于网络编程的经典书籍。主要当做是复习了一下计算机网络的知识,还有了解了一些基本的套接字编程,包含TCP、UDP和SCTP三种不同的传输层协议。在这里写一篇总结,当做是知识的整理。第一部分:简介和TCP/IP第一章: 简介大三下学期学过计算机网络这么课,当时学的糊里糊涂,只了解到计算机网络是分层的,然后每层里面都...

2018-03-06 19:02:16 1588

空空如也

空空如也

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

TA关注的人

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