- 博客(31)
- 资源 (1)
- 收藏
- 关注
原创 SFINAE技术初涉
看一段C++代码的时候一不小心掉坑了,然后就没出来,先上代码。 #define HAS_MEMBER(member)\template<typename T, typename ... Args>struct has_member_##member\{\private:\ template<typename U> static auto C...
2018-08-06 17:16:49 332
原创 半同步半异步线程池
本篇文章比较杂,除了介绍线程池以及实现之外,还解释一些编程的细则,主要是在对于C++特性使用的过程之中,碰到了诸多的问题,所以就此机会一起解决。实现采用C++半同步半异步线程池:在处理大量并发任务时,为解决传统大量线程创建和销毁将消耗过多的系统资源的问题,通过建立一个线程池在系统中预先创建一定数量的线程,当任务请求到来时从线程池中分配一个预先创建的线程取处理任务,线程处理任务之后可以...
2018-08-06 11:14:55 539
原创 设计模式——设计模式原则
“一腔诗意喂了狗,不如代码三两行”1、单一职责原则(SRP): SingleResponsibility Principle“有且仅用一个原因引起类的变更”(1)首先自然有一个问题,所谓的单一职责具体是怎么样?原则的定义是:有且仅有一个原因引起类的变更。在此之前首先我觉得弄清楚有哪些东西会引起类的变更,对此有一些自己的理解。举一个例子,在设计类的时候,会将业务对象(Bussiness Object...
2018-07-09 20:48:24 223
原创 进程间通信
相较于线程间通信,线程间通信由于是在同一进程内的,对于某些全局的静态变量进行读写操作,无疑方便的多。而不同进程之间的通信,由于在内存中位置不同,因此通信起来较为复杂,同时进程间通信有时还会考虑进程之间互斥访问的问题,及在多个进程同时就使用某一资源通信时存在的竞争。 进程通信的方式,我目前了解到的有:管道(有名和匿名)、消息队列、共享内存,在此基础上会介绍操作系统提供的信号量(实现进程...
2018-06-16 19:58:23 232
原创 孤儿进程、僵尸进程、守护进程
上次讲了关于线程的一些操作,这次讲一下进程,进程是程序运行的真正实例,就linux而言,进程结构可以分为三部分,代码段、数据段和堆栈段。余下的就不进行科普了 进程的创建通过fork来搞定,由于创建的进程会完美copy父进程的数据,数据段和堆栈段(说copy有些不好,毕竟现在操作系统实现了一种“写时复制”的机制,只有子进程修改了某些内容时,操作系统才会开辟空间把修改的内容从父进程cop...
2018-06-02 13:07:32 353
原创 pthread中的互斥锁、条件变量与读写锁
上过操作系统课程的同学应该都知道在线程,管理各个线程运行,实现对资源的互斥访问的时候有一个互斥锁mutex,主要防止在OS对线程进行切换的时候,由于每个线程执行的语句的深度不一样,结果导致对某些共享量的操作乱套了,实际上是因为在重新载入线程时,恢复上下文导致了原本已经修改过的变量又一次被原来的值所替代(相当于这个变量对于当前线程而言没有发生变化,实际上已经变了,解释可能不准确,不单单只有这种情...
2018-06-01 22:20:55 644
原创 编译
知识出自《后台开发核心技术与应用实践》 从一个简单的hello.cpp程序到之后的可执行的文件,中间经历一些列的过程,一般而言通过开发工具,比如Vs一个键就搞定,用g++也是一个指令的事情,中间的过程是编译,那么编译的过程是怎样的?大致可以分为四个部分,分别是预处理、编译、汇编和链接 本文尝试在Ubuntu下,用最简单的Hello.cpp程序来阐述这一过程1、预...
2018-05-29 16:35:32 246
原创 C++之路 STL中的Set——基本操作
在看常见STL使用的时候,看到了STL中的一个Set,本来没什么好说的,但是看到了一些之前没有看见过的代码写法,所以就记了下来。 首先介绍一下Set,中文讲是不相交集合(内部没有重复的元素),以下是C++标准给的介绍Sets are containers that store unique elements following a specific order. 相关的说明可以参照...
2018-05-28 14:56:57 1887
原创 C++ 之路 vector的内存管理与效率
好长时间没有写博客了,重新开始写又有一点不一样的感觉,有点怅然若失,或者说是又有点小期待,一直以来状态不是很好,但不管如何还是要坚强地、勇敢地走下去。 言归正传 C++中vector是一项大杀器,相当于可自动变长的数组,在不改变容量的情况下,其效率相当于数组,但较于数组而言他又有更多的优点,首先介绍几个成员函数与vector容量相关的size() Returns the ...
2018-05-26 19:46:19 2502
原创 网站建设-前后端交互json
1、Json是一种数据交换格式(用于在不同的平台或系统间交换数据的文本),用于不同平台之间传递信息2、Json的核心概念:对象字面量(字面意思与其表达的值完全一致,可以直接知道是什么),键值对注意点:①{, [,",的使用, ② Json只用双引号 ③Json对象中,属性名称使用双引号 ④使用 “\” 进行转义3、Json的数...
2018-04-08 20:03:28 827
原创 lintCode. 792 Kth Prime Number
Description:Given the prime number n, output the number of prime numbersExample:Given n = 3, return 2.explanation:[2,3,5], 3 is the second prime number.Given n = 11, return 5.explanation:[2,3,5,7,1...
2018-02-28 23:41:53 472
原创 lintCode. 488 快乐数
题目描述:写一个算法来判断一个数是不是"快乐数"。一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。样例:19 就是一个快乐数。1^2 + 9^2 = 828^2 + 2^2 = 686^2 + 8^2 = 1001^2 + 0^2 + 0^2 = 1 解...
2018-02-25 23:18:39 207
原创 STL之路 - 空间适配器二
具备次配置力的SGI空间配置器 SGI STL的配置器与标准规范不同,其名称是alloc,不接受任何参数(PS:SGI STL的每一个容器都已经指定其缺省的空间配置器为alloc,对于编码而言没有多大的困扰)1、SGI有一个符合标准的allocator适配器,但效率不高,SGI并没有使用(因此注释写着有DO NOT USE THIS FILE)2、SGI特殊的空间配置器,std::al
2018-01-26 16:28:36 293
原创 STL之路 - 空间适配器一
空间适配器:空间适配器是STL实现的一个基础。整个STL操作的对象(所有的数值)都存放在容器之内,而容器一定需要配置空间以置放资料。(这里的空间配置器的空间可以是磁盘或其它辅助的存储介质,在SGI STL中是内存)空间适配器的标准接口:以下提供一份std标准的allocator,在SGI中是defalloc.h,但是SGI没有使用它,原因是效率过低,但是作为讲解标准接口是一个比较好
2018-01-25 14:13:47 321
原创 lintCode. 96 链表划分
题目本身难度不到,只想讲一些关于链表的操作。这里看了几篇博客,写得好的使用了一个小技巧在新链表list的头部多分配了一个节点的空间,从而简化了接下来对于链表的操作,这又什么好处呢?最后返回的的时候,返回list->next就行,然而由于这个新链表具有自己的数据空间因此,就可以在这个新链表上直接操作,省略了通过判断,从而给新链表赋值的过程,简化了操作,这个确实是个很好的小技巧。思路:我首先的
2018-01-24 21:01:42 421
原创 STL之路 - 入门介绍篇
1、基本介绍: STL:C++的程序库,建立的数据结构与算法的一套标准 核心思想:复用性的提升,复用性必须建立在某种标准之上2、STL六大组件: (1)容器(container):各种数据结构,如vector,list,deque,set,map(2)算法(algorithm):常用算法,如sort,erase(3)迭代器(iterator):扮演容器与算法之间的胶合剂
2018-01-24 14:11:12 498
原创 Linux之路之计算机概论
本篇只是对《鸟哥私房菜》第一篇的一个总结。记得计组老师说过一句话,特别经典。计算机(硬件+软件)是干啥的,分为以下几件事:输入数据 -> 分配数据空间 -> 处理数据 -> 输出数据 就我理解而言,计算机本质就是对数据的处理以及再加工,而处理和加工的规则有我们写的程序决定,各个硬件负责具体操作,相互分工和协作。就好像你脑子里有一个想法,想把箱子从这里搬到那里,然后你的脚动起来,
2018-01-23 23:18:15 191
原创 lintCode. 627 最小的回文串
大概是脑子开窍了,想到了一个O(n)的算法解题思路:首先你得知道ASCII码,我用的是C++,C++字符编码是按照ASCII码来的,java是Unicode,不过一般字符是连续编码的,所以用其它语言的同学注意一下。 使用一个标志数组,大小是52,分别对应的是26个小写和大写字母。那么怎么通过字符找到对应的数组位置呢?首先判断一下是小写字母还是大写字母;小写字母:index =
2018-01-23 14:58:05 236
原创 网站建设之Dreamweaver站点
1、设置站点的本地版本:(1)创建站点:【站点】->【新建站点】,在对话框中填写信息(2)导入/导出站点:【站点】->【管理站点】,选择标记或者待选框导入或是导出(3)管理站点:【站点】->【管理站点】->【编辑当前选定的站点】,通过对话框修改2、命名文件和文件夹请遵循这些命名文件和文件夹的一般准则:网站中的文件和文件夹名称不应包含空格或任何
2018-01-22 23:30:47 779
原创 网站建设之使用Dreamweaver进行Web开发概述
1、熟悉Dreamweaver的工作区,设置自己喜欢的格式2、使用Dreamweaver建立站点: 在 Dreamweaver 中,术语“站点”指属于某个网站的文档的本地或远程存储位置。利用 Dreamweaver 站点,您可以组织和管理所有Web文档,将站点上传到Web服务器、跟踪和维护您的链接以及管理和共享文件。您应定义一个站点以充分利用Dreamweave
2018-01-22 22:06:18 3401
原创 网站建设之Dreamweaver入门使用
1、Dreamweaver CC介绍:Abode公司用于网站设计与开发的工具,总之功能强大。支持同时使用其它Adobe工具、完整的CSS样式支持,集成的编码环境,支持FLV视频,跨平台2、入门教程:https://helpx.adobe.com/cn/dreamweaver/user-guide.html3、快捷操作:在当前文档中查找:Ctrl + F(在 Windows 上)
2018-01-22 16:26:28 7730 1
原创 LintCode. 44 最小子数组
参考简书上,六尺帐篷的解题思路,如有侵权,请联系我删除原文链接:点击打开链接题目描述:给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。注意事项子数组最少包含一个数字样例给出数组[1, -1, -2, 1],返回 -3解题思路:从我们直观观察来看,很好找出来,就是从负的找起,然后看一下它的左右数,
2018-01-22 08:53:47 205
原创 查找算法之二分法
写这个的原因是因为写二分算法的时候脸被打的好疼,痛定思痛之后决定详细写一下关于二分查找算法!使用二分查找,必须满足一个很重要的点:数组是排序好的二分查找实际上就是一个递归查找左右子树的过程查找本身的过程就是一颗树,所以有二分查找树之说,这个树的每个根节点,都满足:左子树的值一个二分查找而言,通常需要三个标志量low middle highfront和last好说,是
2018-01-20 20:18:40 209
原创 lincode. 730 所有子集的和
参加了一位博主的思路,加上自己的一些理解点击打开链接题目描述:给一整数 n, 我们需要求前n个自然数形成的集合的所有可能子集中所有元素的和。样例给出 n = 2, 返回 6可能的子集为 {{1}, {2}, {1, 2}}. 子集的元素和为 1 + 2 + 1 + 2 = 6给出 n = 3, 返回 24可能的子集为 {{1}, {2}, {3}, {1, 2}, {1, 3}, {2,
2018-01-19 09:51:25 324
原创 lintcode. 28 搜索二维矩阵
这个问题主要在于算法时间题目描述:写出一个高效的算法来搜索 m × n矩阵中的值。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每行的第一个数大于上一行的最后一个整数。样例考虑下列矩阵:[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]给出 target = 3,返回 true解决思路:直接暴力求解的话,复杂度O(m*n)。
2018-01-18 21:44:16 158
原创 lintCode. 445 余弦相似度
重要的事情说三遍,数学要学好,数学要学好,数学要学好QAQ这个题主要是:向量余弦公式的应用以及C++ 标准数学库的使用向量余弦公式:具体参见博客(引用):点击打开链接第二个是C++ 里面的数学函数pow(double x, double y): result = x^y; //话说被一篇文章坑了,它的结果是result = xy,pow求的是x的y次方,所以这个还是看C++ referen
2018-01-18 09:21:57 235
原创 lintcode 684. 缺少的字符串
今天状态不是很好,一直想睡觉,晚上还是好好睡,不要去研究哲学命题(QAQ)题目描述:给出两个字符串,你需要找到缺少的字符串您在真实的面试中是否遇到过这个题?Yes样例给一个字符串 str1 = This is an example, 给出另一个字符串 str2 = is example返回 ["This", "an"思路:用vector将字符串分割,以空格为单元,将原字符串和匹配串按空格分割,分别
2018-01-17 22:27:23 394
原创 lintcode 69. 二叉树的层次遍历
晚上好好睡觉,要不然早上一起来写代码特困。。。而且效率贼低。。。给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)样例给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]样例给一棵二叉树 {3,9,20,#,#,
2018-01-17 10:26:38 234
原创 lintcode 632. 二叉树的最大节点
描述:在二叉树中寻找值最大的节点并返回。您在真实的面试中是否遇到过这个题?样例给出如下一棵二叉树: 1 / \ -5 2 / \ / \0 3 -4 -5 返回值为 3 的节点。思路:肯定递归啦QAQ,但是注意不要踩访问空指针的坑,比如一开始我就踩了几个先上代码
2018-01-11 21:52:38 375
原创 lintcode 12. 带最小值操作的栈
实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和min 操作,所有操作要求都在O(1)时间内完成。注意事项如果堆栈中没有数字则不能进行min方法的调用您在真实的面试中是否遇到过这个题?Yes样例如下操作:push(1),pop(),push(2),p
2018-01-09 23:26:52 343
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人