- 博客(116)
- 资源 (6)
- 收藏
- 关注
原创 Linux多线程编程之同步对象编程:线程信号量
在计算机版本中,信号以简单整数来表示。线程等待获得许可以便继续运行,然后发出信号,表示该线程已经通过针对信号执行P操作来继续运行。线程必须等到信号的值为正,然后才能通过将信号值减1来更改该值。完成此操作后,线程会执行V操作,即通过将信号值加1来更改该值。这些操作必须以原子方式执行,不能再将其划分成子操作,即,在这些子操作之间不能对信号执行其他操作。在P操作中,信号值在减小之前必
2014-08-31 11:02:16 624
原创 Linux多线程编程之同步对象编程:条件变量
使用条件变量可以以原子方式阻塞线程,直到某个特定条件为真为止。条件变量始终与互斥锁一起使用。使用条件变量,线程可以以原子方式阻塞,直到满足某个条件为止。对条件的测试是在互斥锁(互斥)的保护下进行的。如果条件为假,线程通常会基于条件变量阻塞,并以原子方式释放等待条件变化的互斥锁。如果另一个线程更改了条件,该线程可能会向相关的条件变量发出信号,从而使一个或多个等待的线程执行以下
2014-08-30 22:37:45 648
原创 Linux多线程编程:用同步对象编程之互斥锁使用
同步对象是内存中的变量,可以按照与访问数据完全相同的方式对其进行访问。不同进程中的线程可以通过放在由线程控制的共享内存中的同步对象互相通信。尽管不同进程中的线程通常互不可见,但这些线程仍可以互相通信。同步对象还可以放在文件中。同步对象可以比创建它的进程具有更长的生命周期。同步对象具有以下可用类型:■ 互斥锁■ 条件变量■ 读写锁■ 信号同步的作用包括以下方面:
2014-08-30 08:54:54 636
原创 Linux多线程编程之基础篇
1.多线程基础 Mutual exclusion lock(互斥锁) 用来锁定和解除锁定对共享数据访问的函数。 Condition variable(条件变量) 用来阻塞线程直到状态发生变化的函数。 Read-write lock(读写锁) 可用于对共享数据进行多次只读访问的函数,但是要修改共享数据则必须以独占方式访 问。Counting
2014-08-30 01:32:59 552
原创 操作系统考试题目
一、单项选择题 (每题1分,共20分)1. 关于操作系统的描述不正确的是(D)。A 管理资源的程序 B 管理用户程序执行的程序C 能使系统资源提高效率的程序 D 能方便用户编程的程序2. (D)不是基本的操作系统。A 批处理操作系统 B 分时操作系统 C 实时操作系统 D 网络操作系统3. (C
2014-08-29 17:32:32 4657
原创 simhash Java和Python版本的实现
绍下这个算法主要原理,为了便于理解尽量不使用数学公式,分为这几步:1、分词,把需要判断文本分词形成这个文章的特征单词。最后形成去掉噪音词的单词序列并为每个词加上权重,我们假设权重分为5个级别(1~5)。比如:“ 美国“51区”雇员称内部有9架飞碟,曾看见灰色外星人 ” ==> 分词后为 “ 美国(4) 51区(5) 雇员(3) 称(1) 内部(2) 有(1) 9架(3) 飞碟(5) 曾
2014-08-29 08:43:09 10153 1
原创 BitMap C++实现
1. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。2、 Bit Map的基本思想 我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这
2014-08-28 18:31:49 1564
原创 Trie树的C++实现
Trie—单词查找树Trie,又称单词查找树、前缀树,是一种哈希树的变种。应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。性质:1.根节点不包含字符,除根节点外的每一个节点都只包含一个字符。2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。3.每个节点的所有子节点包含的字符都不相同。优点:1.查询快。对于长度为m的键值,最
2014-08-28 11:12:38 663
原创 编程之美:精确表达浮点数
题目来自编程之美题目:举例:0.3333(3333) = 1/30.285714(285714) = 2/70.3(000) = 3/100.25 = 1/4思路:代码:
2014-08-27 15:29:44 687
原创 编程之美:1的数目
题目:写一个程序,让用户来决定Windows任务管理器(Task Manager)的CPU占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况:1. CPU的占用率固定在50%,为一条直线;2. CPU的占用率为一条直线,但是具体占用率由命令行参数决定(参数范围1~ 100);3. CPU的占用率状态是一个正弦曲线。首先什么是CPU占用率?在
2014-08-27 14:57:40 429
转载 九月腾讯,创新工场,淘宝等公司最新面试三十题(第171-200题)
九月腾讯,创新工场,淘宝等公司最新面试三十题(第171-200题)引言 曾记否,去年的10月份也同此刻一样,是找工作的高峰期,本博客便是最初由整理微软等公司面试题而发展而来的。如今,又即将迈入求职高峰期--10月份,所以,也不免关注了网上和我个人建的算法群Algorithms1-12群内朋友发布和讨论的最新面试题。特此整理,以飨诸位。至于答案,望诸位共同讨论与思考。
2014-08-26 16:25:31 936
原创 一致性哈希算法
一致性hash算法(consistent hashing)1 基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache ;hash(object)%N一切都运行正常,再考虑如下
2014-08-26 10:56:10 690
转载 把《编程珠玑》读薄
目录开篇啊哈!算法数据决定程序结构编写正确的程序编程中的次要问题程序性能分析粗略估算算法设计技术代码调优节省空间排序取样问题搜索堆字符串开篇具体化你的解决的问题。下面是A和B的对话。A:我该如何对磁盘文件进行排序?B:需要排序的内容是什么?文件中有多少条记录?每个记录的格式是什么?A:该文件包含至多10,000,000个记录,每条记录都是一个7位整数。B:如果文件那么
2014-08-25 08:50:49 650
转载 免费的编程中文书籍索引
语言无关类操作系统开源世界旅行手册鸟哥的Linux私房菜 (简体)Linux 系统高级编程The Linux Command Line (中英文版)WEB服务器Nginx开发从入门到精通 (淘宝团队出品)版本控制git - 简易指南Git 参考手册Pro GitGit MagicGotGitHubMercurial 使用教程HgI
2014-08-25 08:36:07 663
原创 把《编程珠玑》读薄
目录开篇啊哈!算法数据决定程序结构编写正确的程序编程中的次要问题程序性能分析粗略估算算法设计技术代码调优节省空间排序取样问题搜索堆字符串开篇具体化你的解决的问题。下面是A和B的对话。A:我该如何对磁盘文件进行排序?B:需要排序的内容是什么?文件中有多少条记录?每个记录的格式是什么?A:该文件包含至多10,000,000个记录,每条记录都是一个7位整数。B:如果文件
2014-08-25 01:08:05 605
原创 免费的编程中文书籍索引
语言无关类操作系统开源世界旅行手册鸟哥的Linux私房菜 (简体)Linux 系统高级编程The Linux Command Line (中英文版)WEB服务器Nginx开发从入门到精通 (淘宝团队出品)版本控制git - 简易指南Git 参考手册Pro GitGit MagicGotGitHubMercurial 使用教
2014-08-25 00:05:11 729
原创 C++内联使用技巧
内联的总结:使用条件:短小,调用频繁的函数内联的缺点:增加了编译的时间,不便于调试内联的优点:避免了函数调用带来的开销,同时为编译器进一步优化提供可能(调用间的优化编译器一般无能为力,但是内联后编译器可以进一步优化)。对于一些微小的方法内联(一般就是几条指令),可以减少最终的可执行文件(因为调用开销也需要一些指令的)内联不当的后果:造成代码膨胀,导致与性能相关的方负
2014-08-23 02:02:11 491
原创 多线程内存池实现
多线程的内存池是基于模板的类:[cpp] view plaincopytemplate typename POOLTYPE,typename LOCK> class MTMemoryPool { public: void* alloc(size_t size); void free(void* someE
2014-08-23 01:36:30 946
原创 多线程内存池
如果一个内存池需要线程同步了,估计和默认的内存操作也差不了多远了。现在对内存操作的优化只是在优化线程同步操作上面了。默认的lock和unlock可能实现得过于完美,因而要求更多的cpu周期。如果选择更原子的lock和unlock实现,还是可以加快内存操作的速度的。多线程内存池在实现上也就是在申请和释放外面包裹了一对加锁和解锁操作而已。如果我们采用模板编程,就可以实现一个功能强悍的模
2014-08-23 01:32:06 1000
原创 单线程内存池
c++ efficient 的第六章,看书笔记,顺便说下理解。对于一般直接 new 与delete 性能较差,可以自己管理写内存的申请与释放。版本0:class Rational{public: Rational(int a=0, int b =1 ): n(a),d(b){}private: int n; int d;};
2014-08-23 01:09:51 554
原创 临时对象
说个题外话#include using namespace std;class A{public: char a; char b; char c;public: A(char aa, char bb=97, char cc=97):a(aa),b(bb),c(cc){}};int main(){ A e=98; c
2014-08-23 01:06:26 522
原创 返回值优化
返回值优化,是一种属于编译器的技术,它通过转换源代码和对象的创建来加快源代码的执行速度。RVO = return value optimization。 class Complex//复数{ friendd Complex operator + (const Complex & , const Complex&);public: Conplex(
2014-08-23 00:58:15 611
原创 SQL Server 的事务和锁
最近在项目中进行压力测试遇到了数据库的死锁问题,简言之,如下的代码在 SERIALIZABLE 隔离级别造成了死锁:1234567891011121314SELECT @findCount=COUNT(id)FROM MyTable
2014-08-22 00:44:43 660
原创 sql存储过程总结
1. Sql存储过程概述在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。SQL Server 2000 不仅提供了用户自定义存储过程的功能,而且也提供了许多可作为工具使用的系统存储过程1.1概念存储过程
2014-08-22 00:34:12 600
原创 SQL Server 事务、异常和游标
SQL Server 事务、异常和游标Ø 事务在数据库中有时候需要把多个步骤的指令当作一个整体来运行,这个整体要么全部成功,要么全部失败,这就需要用到事务。 1、 事务的特点 事务由若干条T-SQL指令组成,并且所有的指令昨晚一个整体提交给数据库系统,执行时,这组指令要么全部执行完成,要么全部取消。因此,事务是一个不可分割的逻辑单元。
2014-08-22 00:31:32 617
原创 数据库(第一范式,第二范式,第三范式)
范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF)
2014-08-21 22:11:37 483
原创 Java线程面试题Top50
不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用
2014-08-21 21:08:44 621
原创 数据库完整性
数据库完整性数据库的完整性数据的正确性和相容性数据的完整性和安全性是两个不同概念数据的完整性防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据防范对象:不合语义的、不正确的数据数据的安全性保护数据库防止恶意的破坏和非法的存取防范对象:非法用户和非法操作实体完整性关系模型的实
2014-08-21 16:45:19 758
原创 数据库安全性
6 .什么是数据库中的自主存取控制方法和强制存取控制方法? 答:自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查用户的存取权限。防止不合法用户对数据库的存取。强制存取控制方法:每一个数据对象被(强制地)标以一定的密级,每一个用户也被(强制地)授予某一个级别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。
2014-08-21 16:11:49 671
原创 操作系统中堆和栈的区别
我们都知道数据结构中也有堆栈的概念,但他们与操作系统中的不同。栈(操作系统):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。堆则是存放在二级缓存中,生命周期由
2014-08-19 17:33:52 1734
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人