C
seen_in_hw
希望我能变厉害!!!成为大师!!!我放弃了很多看似很炫的技术而去探寻技术的本质,技术是用来提供服务的,所有的技术都离不开思想,而思想是最难掌握的,我们应该把更多的精力放在对于思想的探寻上
展开
-
linxu SOCKET编程详解
这是一篇不错的文章,对socket编程中的原理和要点讲解的都很清楚。------------------------------Linux的SOCKET编程详解1. 网络中进程之间如何通信进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进转载 2018-01-03 12:24:31 · 479 阅读 · 0 评论 -
C语言正确使用extern关键字
C语言extern关键字可以在不同文件下 引用别的文件里的函数或者是变量,只要在用的文件里面用extern声明一下就可以了.更多的可以参考这个链接去了解:[http://blog.csdn.net/xingjiarong/article/details/47656339](http://blog.csdn.net/xingjiarong/article/details/47656339)原创 2018-01-11 14:29:19 · 393 阅读 · 0 评论 -
快速操纵linux shell命令行
在shell命令终端中,Ctrl+n相当于方向向下的方向键,Ctrl+p相当于方向向上的方向键。在命令终端中通过它们或者方向键可以实现对历史命令的快速查找。这也是快速输入命令的技巧。在命令终端中可以通过Ctrl+r 实现快速检索使用过的历史命令。Ctrl+r中r是retrieve中r。Ctrl+a:光标回到命令行首。 (a:ahead)Ctrl+e:光标回到命令行尾。 (e:end)Ctrl原创 2017-10-13 20:48:03 · 661 阅读 · 0 评论 -
C语言系列之指针类型内存分配模板
该样例实现了各种类型的指针的内存分配以及 各种类型的指针释放值得一提的是free操作之后就释放了指针指向的那块内存,则那块内存很可能就被人修改了,所以释放的时机一定要把握准。代码如下:/***author:seentime:2017-10-12***/#include <stdlib.h>#include <stdio.h>#include <string.h>#include <ti原创 2017-10-13 10:20:39 · 401 阅读 · 0 评论 -
C语言系列之C语言如何返回字符串数组
问题出在如此想了一下C语言如何实现返回一个字符串数组,答之:没有这种功能,但是吧,还是有办法实现的。那就是指向数组的指针解释char **p 这个p就是指向数组的指针,它指向一个数组的起始地址. 想要引用里面的数组时,直接使用p[i] 即可。我们知道C语言里面的各种数组,本质上都是指针,并且函数其实也是不能把数组当作参数的,实际上都是把数组的地址传进去了,实际上就是指向数组地址的指针。说了这么多原创 2017-10-12 15:26:13 · 7295 阅读 · 2 评论 -
哈希表的应用之1:用哈希法统计大数据词频
问题背景给出一篇文章,默认已经分好词了(一个单词一行),问如何统计各个单词的词频?这个问题可以延伸出其他几个问题 1,热搜的关键词是如何出来的,就是给你一堆的大数据量的词,问你如何从中找出词频最高的几个词。 2,给你一堆大数据量的单词列表,问某个单词第一次出现的位置 3,大数据去重,用哈希表存储后的数据就是去重了的以上几个问题都可以通过哈希表解决,同时也有取代它的方法,那就是字典树解决问题我们原创 2017-10-12 14:07:43 · 9301 阅读 · 0 评论 -
C语言实现的统计一个单词在文章中的频率
思路如下:单词用char数组存,文章也是用char数组存储通过空格找到文章中的各个单词位置,然后截取出来各个单词,同时用传进去的单词与截取的单词相比较,相同就统计次数+1函数int wordinpage(char word[],char *page)传进去文章及单词,返回单词出现的次数 这个函数比较有难度,因为需要考虑到各种情况函数 char *cutwords(char *page,int s原创 2017-10-11 15:50:11 · 2235 阅读 · 0 评论 -
C语言实现的字符串截取函数
如题,实现的就是字符串截取函数,传入字符串以及要截取的位置,返回截取后的字符串,函数如下,测试可用。char *cutwords(char *page,int start,int end){ char *word = malloc(sizeof(char)*30); int pos = 0; for(int i=start;i<=end;i++){ word[原创 2017-10-11 15:45:02 · 7204 阅读 · 0 评论 -
非常齐全的链表操作
//无头结点单链表的各类操作#include #include #include using namespace std;struct LinkList {int value;LinkList *next;};//根据输入建立单链表:链表头部插入LinkList *BuildList() {LinkList *head = NULL;int data;int i = 0;while (scanf(转载 2017-09-30 13:41:24 · 214 阅读 · 0 评论 -
C语言指针详解
这是一篇非常详细并且写的认真的C语言指针方面的文章前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开原创 2017-09-30 13:18:27 · 313 阅读 · 0 评论 -
跳表的基本原理
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB转载 2017-10-09 13:49:05 · 356 阅读 · 0 评论 -
关于快慢指针的若干应用详解
关于快慢指针的若干应用详解一.问题来源 昨晚看微博,发现于梁斌penny,他在说现在的面试制度考不出来真功夫,也就是基本功,面试题千篇一律的算法,看过会,不看就不会。期间提到了快慢指针求中位数。 查资料时我发现,这其实是计算机系统原理里的知识点。二.快慢指针概念 快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向转载 2017-10-09 13:48:00 · 927 阅读 · 0 评论 -
图算法之最短路径算法
坐在马桶上看算法:只有五行的Floyd最短路算法此算法由Robert W. Floyd(罗伯特·弗洛伊德)于1962年发表在“Communications of the ACM”上。同年Stephen Warshall(史蒂芬·沃舍尔)也独立发表了这个算法。Robert W.Floyd这个牛人是朵奇葩,他原本在芝加哥大学读的文学,但是因为当时美国经济不太景气,找工作比较困难,无奈之下到西屋电气转载 2017-10-09 13:19:55 · 413 阅读 · 0 评论 -
【经典算法】:图的深度优先搜索与广度优先搜索的实现
非常简单,深度优先搜索可以用递归或者栈来实现,广度优先搜索用队列来实现,仅仅是数据结构换了一下而已,其他任何的东西都没有变。实现样例代码:#include<iostream>#include<queue>#include<stack>#include<stdlib.h>#define MAX 100using namespace std;typedef struct { int原创 2017-10-09 11:26:13 · 842 阅读 · 0 评论 -
C语言的字典树实现
字典树是什么东西就不过多于解释了,反正在查找上面很好用,它的更好的一层封装就是AC自动机. C语言的字典树的实现就是如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 128 #define IDXERR -1 #define INVALID原创 2017-12-28 22:02:09 · 2042 阅读 · 0 评论 -
C语言字符切割,strtok
说起来很有意思,自认为对C语言理解得还是比较深刻的。但居然到今天才知道有个strtok函数,试用了一下突然感慨以前做了多少重复劳动。每次需要解析配置文件,每次需要分割字符串,居然都是自己去分割字符串,既累人又容易出错。感概继续学得不够全面啊!这里引用一段strtok用法:The strtok() function returns a pointer to the next “token” in原创 2018-01-08 13:28:32 · 296 阅读 · 0 评论 -
CTF之 凯撒密码破解工具
众所周知的是凯撒密码就是靠移位得出来的,这里我做了一个凯撒密码的python脚本,思路很简单,移位就完事了. 我将移位定为从1移到26,然后输出的在各种移位情况下的结果.#!/usr/bin/python# -*- coding: UTF-8 -*-from __future__ import print_functionstr = 'HTRUZYJW' #凯撒密码字符串f原创 2018-01-08 16:37:47 · 10957 阅读 · 0 评论 -
TCP粘包的解决办法
详情请看链接:https://www.cnblogs.com/kex1n/p/6502002.html转载 2018-08-10 12:46:39 · 900 阅读 · 0 评论 -
linux网络编程的常用的库
见链接:https://blog.csdn.net/jx232515/article/details/51912700转载 2018-08-09 23:08:09 · 2206 阅读 · 1 评论 -
linux下面C编程常用头文件
见链接:https://www.cnblogs.com/happyliuyi/p/5209260.html转载 2018-08-09 22:50:48 · 700 阅读 · 0 评论 -
makefile的使用
直接见链接:https://www.cnblogs.com/owlman/p/5514724.html 讲的还是蛮详细的,做备份用原创 2018-05-16 21:11:03 · 442 阅读 · 0 评论 -
如何识别TCP流
问给你一个报文包,求问如何识别出一个TCP流答用五元组,(源ip,目的ip,源端口,目的端口,协议号(TCP)),根据这个就能识别一个tcp流了原创 2018-05-25 17:11:49 · 3669 阅读 · 6 评论 -
从一亿个ip找出出现次数最多的IP(分治法)
/* 1,hash散列 2,找到每个块出现次数最多的(默认出现均匀)—–>可以用字典树 3,在每个块出现最多的数据中挑选出最大的为结果 */问题一: 怎么在海量数据中找出重复次数最多的一个 算法思想: 方案1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数。 然后找出上一步求出的数据中...原创 2018-05-21 14:47:37 · 6810 阅读 · 0 评论 -
客户端 IO复用 多路复用 epoll
#include &lt;fcntl.h&gt; #include &lt;arpa/inet.h&gt; #include &lt;sys/epoll.h&gt; #include &lt;errno.h&gt; #include &lt;sys/types.h&gt;#define BUFSIZE 512 #d原创 2018-05-07 21:20:00 · 457 阅读 · 0 评论 -
某道华为机试题
这道题比较简单,我就直接放题目跟我的解答吧对输入的单词进行字典序排序输出: 字典序定义 1. 单词中字母比较不区分大小写,两个单词先以第一个字母作为排序的基准,如果第一个字母相同,就用第二个字母为基准,如果第二个字母相同就以第三个字母为基准。依此类推,如果到某个字母不相同,字母顺序在前的那个单词顺序在前。 2. 当一个短单词和一个长单词的开头部分都相同(即短单词是长单词从首字母开始的一...原创 2018-05-18 15:14:24 · 743 阅读 · 3 评论 -
linux 条件变量 互斥锁的实现
这是一个经典的猴子吃桃子的问题的实现(生产-消费者问题) 有一棵桃树和一只猴子,开始的时候桃树上没有桃子,然后开始一个一个的长,每长一个猴子就吃一个,猴子吃了之后再长一个,又被猴子吃掉,猴子需要吃7个桃子,才能吃饱。编写程序模拟这个猴子吃桃子的过程。 一看这肯定是两个线程,一个是桃树长桃子,一个是猴子吃桃子,归根是一个生产者和消费者的问题。注意事项互斥锁用起来比较简单,条件变...原创 2018-05-09 23:27:49 · 345 阅读 · 0 评论 -
线程退出方式:pthread_exit(NULL)和return的区别
pthread_exit()用于线程退出,可以指定返回值,以便其他线程通过pthread_join()函数获取该线程的返回值 return,是函数返回,不一定是线程函数哦! 只有线程函数return,线程才会退出 exit()是进程退出,如果在线程函数中调用exit,那改线程的进程也就挂了,会导致该线程所在进程的其他线程也挂掉,比较严重下面是英文的解释,更专业: http://www...原创 2018-05-09 17:43:30 · 11824 阅读 · 0 评论 -
linux多进程跟多线程的使用场景分析
https://blog.csdn.net/pingd/article/details/17895933具体看这篇文章原创 2018-05-09 11:27:55 · 1378 阅读 · 2 评论 -
C语言实现栈,存之
/********************************引入头文件**************************************************/#include#include#include/**********************************定义*********************************************原创 2018-01-18 21:59:03 · 651 阅读 · 0 评论 -
提供一个解析数字各个位的办法
原理看懂下面这点解释很简单,思路如下 比如说135 135%10 = 5,解得个位 (135-5)/10 = 13 ,这样就把刚才解决了的位给弄掉了,然后继续运用刚才第一步的动作 13%10 = 3 (13-3)/10 = 1 ….就这么往下继续做就可以了,位数更多只不过是这样做的过程更长而已. 结束条件: 某位/10==0附上一个实现好的函数:void Digit原创 2018-01-18 21:36:15 · 381 阅读 · 0 评论 -
判断机器大小端的C语言实现
原理关于这个非常的简单,首先明白大小端是怎么一回事,然后写代码就完事了 我这里用的是C语言实现,也没有什么技巧,就是取到字节第一位,然后用构造的数据,判断它是否是0或者1就完事了,详细代码如下:代码 #include int main() { int a = 1; char * p = (char*)&a;原创 2018-01-10 10:25:10 · 373 阅读 · 0 评论 -
linux网络编程必看书籍
为了能够胜任C++后台开发的目标,今天在此设定一些目标:需要看的书籍:《计算机网络:自顶向下方法(原书第4版) 》《计算机网络系统方法(原书第4版)》《用TCP/IP进行网际互连第一卷:原理、协议与结构(第五版)》用TCP/IP进行网际互连第二卷:设计、实现与内核》《用TCP/IP进行网际互连第三卷:客户-服务器编程与应用(Linux/POSIX套接字版)》《TCP/IP指南-原创 2018-01-17 14:19:48 · 604 阅读 · 2 评论 -
C语言之回调函数
在理解了函数指针这样的概念后,我们就可以去理解回调函数这样的东西,回调函数非常好理解,回调函数就是有个参数是函数指针的函数函数指针:故名思义,指向函数的指针------------------------------------------- 下面是关于函数指针的一些东西在看LWIP时,见到用回调函数,再看某老外公司OPC源代码时,见到用回调函数。看我国内原创 2017-09-30 13:02:55 · 350 阅读 · 0 评论 -
C语言指针之通过修改内存修改数组的数据
原理原理非常之简单,比如说有数组a,a是有数据的,然后通过一个指针指向这个a数组的内存,然后直接在内存里面修改数据,就可以观察是否内存里面的数据被修改了。代码 int array[5] = { 1, 2, 3, 4, 5 }; int *ptr = array; //指向数组的首地址 for (int i = 0; i < 5; i++){ (*ptr)+原创 2017-09-30 11:05:46 · 5636 阅读 · 1 评论 -
C语言的标准版本
1、C语言之父是Dennis Ritchie,他也是UNIX操作系统发明者之一。2、C89标准,ANSI制定的第一个C语言标准,在1989年被正式采用,故称C89,也称ANSI C。 该标准随后ISO采纳,成为国际标准(ISO/IEC 9899:1990)。3、C99标准,由ISO制定于1999年(ISO/IEC 9899:1999),故称为C99。4、C11标准,由ISO制定于2011年(ISO原创 2017-10-09 09:43:35 · 1451 阅读 · 0 评论 -
栈内存和堆内存
调用函数时,主调的函数所拥有的局部变量等信息需要存储在特定的内存区域。这个区域被称作栈内存区。另一方面,利用new 或者 malloc 进行分配的内存区域被称为堆内存。 栈内存在程序启动时被统一分配,此后不能再扩大。由于这一区域有上限,所以函数的递归深度也有上限。虽然与函数中定义的局部变量的数目有关,不过一般情况下 C 和 C++中进行上万次的递归是原创 2016-05-11 19:52:29 · 347 阅读 · 0 评论 -
【经典算法】:猴子排序
猴子排序是一种什么样子的排序呢? 猴子代表乱的意思,猴子排序的意思就是乱排序,直到有序为止。这个真实的含义就是把一个无序的数组进行乱排序,然后看其是否会有序,这是个概率性事件,有可能一次之后就有序了,也有可能很多次后依然无序。实现方法如下: 1,定义数组 2,数组随机 3,检验数组是否有序,无序继续,有序了就停止就是如此简单的实现思路,但是却要用到随机化的知识和标志变量的实现技巧代码如下:原创 2016-04-14 12:21:32 · 38178 阅读 · 3 评论 -
【项目】:图像识别中的排序算法
图像识别出了9个点,那么如何进行排序呢?下面写出的代码是我项目真实应用的,然后使用了 三角形辨别 和 线性规划的知识 感觉还是有点高端的,拿出来与大家分享#include <iostream>using namespace std;/*P结构体存原数据res结构体存排序后的数据测试数据:400 450380 500600 620450 820350 810 350 7906原创 2016-04-13 22:06:59 · 958 阅读 · 0 评论 -
【经典算法】:判断某点是否在某线性区域内
#include <iostream>using namespace std;int main(){ int x1,y1,x2,y2,x3,y3,x4,y4,flag=0; cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4; int k1 = (y2-y1)/(x2-x1); int k2 = (y3-y2)/(x3-x2); if原创 2016-04-13 20:37:00 · 2081 阅读 · 0 评论 -
【经典算法】:桶排序
桶排序是一种特别逗比的方法,至少现在我是这么认为…桶排序: 一个例子你就懂。8个数 3 6 2 7 9 8 1 1 申请一个9位的数组 int a[9];初始化所有a的值都为 0 然后3出现一次,就把a[3]的值加1最后的结果是 a[3] = 1;a[6] = 1… ;a[1] = 2 //因为a[1]出现了两次 然后遍历,得到a[i]的值,把i输出a[i]遍即可我相信聪明人直接看代码原创 2016-04-13 14:47:41 · 4320 阅读 · 5 评论