- 博客(53)
- 收藏
- 关注
原创 校招季——编程题目(15、16) 约瑟夫问题 最大子矩阵和
15. 约瑟夫问题(题目042)题目:n个人围成一圈,从第一个开始报数,第m个将被杀掉,最后剩下一个,其余人都将被杀掉。求最后剩下的人的序号。例如n=6,m=5,被杀掉的人的序号为5,4,6,2,3。最后剩下1号。解答:思路:如果要打印整个过程,有3种方法:1. 链表法:产生长度为n的循环链表,然后每遍历m次输出当前序号,并删除节点,直到链表中只有
2013-09-07 11:10:57
1396
原创 校招季——操作系统的存储管理
第3章 存储管理现在的存储器体系为分层存储器体系,操作系统的工作是将这个存储体系抽象为一个有用的模型并进行管理。3.1 无存储器抽象每个程序都直接访问物理内存。这种情况下,想在内存中同时运行两个程序是不可能的。这种系统中实现并行的一种方法是使用多线程来编程。运行多道程序的方法是操作系统将当前内存中内容保存到磁盘上,再读入下个程序,保证同时只有一个进程在运行。也可以在特殊硬件的
2013-09-03 20:47:18
1729
原创 校招季——编程题目(14) 逆序数
14. 逆序数(题目043)题目:计算一个全由大写字母组成的字符串的逆序数。解答:求逆序数和排序的思路是类似的,稳定的排序算法都可以用来计算逆序数。方法1:最直接的方法,采用冒泡排序和插入排序的思路,一共需要遍历(n-1)*(n-2)次,比较慢。方法2:利用归并排序的思想加速这个过程。一个序列的逆序数等于它的两个递归子过程产生的逆序数与合并过程产生的逆序数之和。在合
2013-09-03 20:28:08
1298
原创 校招季——编程题目(73) 回文数
73. 回文数题目:1. 测试一个数是不是回文数。2. 逆转一个数的二进制表示。解答:对于问题1,方法1:用itoa将这个数转换成字符串,再测试这个字符串是不是回文字符串。方法2:用两个mask从两端提取数字再比较:int mask1 = /* 和x同位数,略 */, mask2 = 10;for ( ; mask1
2013-08-31 10:52:52
929
原创 校招季——Python笔记四
四. 字典1. 字典是由键值对组成的,键和值间用冒号隔开,项之间用逗号隔开,整个字典由大括号表示。2. 字典可以用dict创建,需要一个映射关系的参数(其他字典或包含多个元组的序列),也可以用关键字参数来创建字典。>>> dict1 = {'age':42, 'name':'Sam', 'city':'New York'}>>> dic
2013-08-31 09:58:33
721
原创 校招季——Python笔记三
三. 字符串1. 字符串是不可变的。2. format类似于C语言printf中使用的格式化控制符,用法是fmt % tuple,只有元组和字典可以格式化多个值,序列只能格式化一个值。>>> fmt = "hello, %s, %s enough for ya? %d:%f">>> values = ("world", "hot
2013-08-29 21:43:17
841
原创 校招季——编程题目(12-13)
12. 快速求幂(题目047)题目:给定两个整数base和exp(非负整数),求base的exp次幂,要求O(lgN)的时间复杂度。解答:int FastPow(int base, int exp){ if (exp == 0) return 1; if (exp == 1) return base; in
2013-08-29 21:40:47
722
原创 校招季——编程题目(10-11)
10.最大子序列和题目:输入一个长度为n的序列,其中元素有正有负,求其中序列和最大的连续子序列,如果不存在序列和为正数的连续子序列,返回0。解答:方法一:思路:遍历所有子序列,求出序列和,找出其中和最大的那个。时间复杂度O(n3),空间复杂度O(1)。方法二:思路:先求出长度为n的辅助数组sum,其中sum[i]是data[0,i]的和,
2013-08-28 15:33:45
821
原创 校招季——Python笔记二
二. 列表和元组1. 有六种内建序列:列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。2. 列表可以修改,元组不可以。一般可用列表代替元组,除了用作字典的键。列表用[]标识。3. 通用的序列操作包括:索引、分片、加、乘、包含某序列。4. 序列的正序号从0开始向右,负序号从-1开始向左。
2013-08-28 15:21:04
725
原创 校招季——编程题目(8-9)
2013/08/18,后天就回本部准备校招了,争取今天能将题目总结到70题。8. 最大子序列和题目:输入一个长度为n的序列,其中元素有正有负,求其中序列和最大的连续子序列,如果不存在序列和为正数的连续子序列,返回0。解答:方法一:思路:遍历所有子序列,求出序列和,找出其中和最大的那个。时间复杂度O(n3),空间复杂度O(1)。方法二:思路:先求出长
2013-08-18 21:10:47
817
原创 校招季——Python笔记一
2013/08/15,第四天。开始学习《Python基础教程》一. 基础知识1. '/'执行普通除法,'//'执行整除,'%'执行求余,后两个也能用于浮点数,满足规律:p = q * t + r,其中p和t是被除数和除数,q和r是整除的商和余数。>>> 1/20.5>>> 1//20>>> -1//2-1>>> -1%2
2013-08-15 11:19:19
1012
原创 校招季——进程与线程的概念
2013/08/15,第四天。昨天总结完了《现代操作系统》的前几章,后面的部分看了一遍,实在不想记笔记了,太杂了。 第2章 进程与线程2.1 进程2.1.1进程模型一个进程就是一个正在执行程序的实例,包括程序计数器、寄存器和变量的当前值。理解进程的另一个角度是,用某种方法把相关的资源集中在一起。进程有存放程序正文和数据以及其它资源的地址空间,包括打开的文件、子进程
2013-08-15 09:40:33
1369
原创 校招季——编程题目(6-7)
2013/08/15,第四天6. 反转单词(题目007)题目:将字符串中的每个单词内的字母顺序倒转,其它字符不变解答:void ReverseString(char *s){ int n = strlen(s), start = -1, i; for (i = 0; i <= n; ++i) if (!isalpha(s[
2013-08-15 09:33:55
792
原创 校招季——编程题目(3-5)
2013/08/13,秋季校招准备工作第二天。3. 打乱数组题目:将一个长度为n的数组随机打乱。解答:思路:将数组内的每个元素与它所在位置到结尾之间的一个随机位置的元素交换:void Shuffle(int *data, int n){ int i; for (i = 0; i < n; ++i) Swap(&data
2013-08-13 23:31:41
771
原创 校招季——操作系统的概念
2013/08/12,秋季校招准备工作第二天。1 什么是操作系统操作系统是一种运行在内核态的软件,它执行两个基本独立的任务:为应用程序提供一个资源集的清晰抽象,并管理这些硬件资源。作为扩展机器的操作系统,任务是隐藏硬件的复杂特性,呈现给程序良好、清晰、优雅、一致的抽象。作为资源管理者的操作系统,任务是在相互竞争的程序之间有序地控制对处理器、存储器及其他I/O接口设备的分配。
2013-08-13 19:04:28
1060
原创 校招季——编程题目(1-2)
2013/08/12,秋季校招准备工作第一天。1. 与K有关的数题目:输入正整数K与N,求出不大于N的与K有关的数的数目。与K有关的意思是:是K的非0整数倍或数字中包含K(如123中包含12和23等)。解答:先判断i能否被K整除,如果不能的话,用mask依次取i中长度为len(K)的一段与K对比。1234567
2013-08-12 21:01:07
1029
原创 UNIX网络编程卷二 笔记 Posix共享内存区
第6章 Posix共享内存区6.1 共享内存区共享内存区是可用IPC形式中最快的,只有映射和解除映射需要进入内核的系统调用,映射后对共享内存区的访问和修改不再需要系统调用(内核只要负责好页表映射和处理页面故障即可),但通常需要同步手段。一个客户-服务器间传递文件数据的例子中,FIFO或消息队列等IPC方式需要4次内核-进程间的数据复制,每次都需要切换地址空间,开销很大;共享内
2013-08-09 11:02:08
1072
翻译 Using smart pointers for class members
1. Using smart pointers for class membershttp://stackoverflow.com/questions/15648844/using-smart-pointers-for-class-membersQuestion:I'm havingtrouble understanding the usage of smart pointers a
2013-08-06 23:28:45
942
原创 UNIX网络编程卷二 笔记 Posix信号量
第5章 Posix信号量5.1 概述Posix信号量分为两种:1. 有名信号量:使用Posix IPC名字标识。2. 内存信号量:存放在共享内存区中。Posix信号量不必在内核中维护(System V信号量由内核维护),由可能为路径名的名字来标识。5.2 基本操作三种基本操作:1. 创建(create):指定初始值。2. 等待(wait):如果
2013-08-06 11:58:10
1536
原创 UNIX网络编程卷二 笔记 读写锁和记录上锁
第4章 读写锁和记录上锁4.1 读写锁读写锁用于读取数据比修改数据更频繁的场景,它的分配规则如下:1. 没有线程持有写锁时,任意多的线程可以持有读锁。2. 仅当没有线程持有读锁或写锁时,才能分配写锁。当已有线程持有读锁时,另一线程申请写锁则会阻塞,若后续还有读锁的申请,此时有两种策略:1. 对后续的读锁请求都通过,可能会造成因读锁不断被分配,写锁申请始终阻塞
2013-08-06 11:56:20
1250
原创 UNIX网络编程卷二 笔记 互斥锁和条件变量
第3章 互斥锁和条件变量3.1 概述 默认情况下互斥锁和条件变量用于线程间同步,若将它们放在共享内存区,也能用于进程间同步。 对一个公共对象的访问若不能原子进行,就需要某种形式的同步。3.2 互斥锁 静态分配的互斥锁变量可以用常值PTHREAD_MUTEX_INITIALIZER初始化,动态分配和用于共享内存的互斥锁变量要用pthread_mutex_i
2013-08-04 10:39:39
1645
原创 UNIX网络编程卷二 笔记 Posix消息队列
第2章 Posix消息队列2.1 概述每个消息都是一个有优先级的记录,进程写入消息前,不需要有其它进程在等待消息。消息队列具有随内核的持续性。Posix消息队列与System V消息队列的两个主要区别:1. Posix读返回最高优先级的最早消息,System V返回指定优先级的最早消息。2. 向空队列放置一个消息时,Posix可以产生一个信号或启动一个线程。
2013-08-03 15:16:43
1173
原创 UNIX网络编程卷二 笔记 管道和FIFO
第1章 管道和FIFO1.1 pipeint pipe(intfd[2]); 创建一个单向、半双工管道,其中fd[0]用于读,fd[1]用于写。1.2 fork管道很少在单个进程内使用,一般用在两个有亲缘关系的进程间,父进程在pipe后fork,然后和子进程或子进程的后裔利用这个管道通信。pipe(fd);if ((pid =fork()) == 0){
2013-08-01 10:48:25
1867
原创 UNIX网络编程卷一 笔记 第7章 套接字选项
1 getsockopt和setsockopt函数套接字选项粗分为两大基本类型:一是启用或禁止某个特性的二元选项,二是取得并返回特定值的选项,参数都是以指针形式传入的。2 套接字状态下面的套接字选项是从监听套接字继承来的:SO_DEBUF、SO_DONTROUTE、SO_KEEPALIVE、SO_LINGER、SO_OOBINLINE、SO_RCVBUF、SO_RCVL
2013-07-12 17:07:01
911
原创 UNIX网络编程卷一 笔记 第六章 第6章 I/O复用
1 概述同时监视多个I/O条件,在其中任意一个就绪时通知进程,这样的能力称为I/O复用,由select和poll函数支持,较新的还有Posix中的pselect函数。(Linux中还多出了epoll)应用场合:1. 同时处理多个描述符时,必须用。2. 同时处理多个套接字时,比较少见。3. 既要处理监听套接字,又要处理已连接套接字。4.
2013-06-22 15:00:26
1143
转载 linux 异步I/O的实现
源地址:http://blog.youkuaiyun.com/zhang_shuai_2011/article/details/7678990知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上。预先知道这些数据的位置,所以预先发起异步IO读请求。等到真正需要用到这些数据的时候,再等待异步IO完成。使用了异步IO,在
2013-06-18 23:31:14
716
转载 Linux strace命令
源地址:http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html简介strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟
2013-06-18 23:28:31
585
原创 UNIX网络编程卷一 笔记 第四章 基本TCP套接字编程
1 socket函数int socket(int family, int type, intprotocol);其中family是协议族,type是套接字类型,protocol为某个协议组合,设为0的话是取family和type组合的系统默认值。常用的family值有:AF_INET(IPV4)、AF_INET6(IPV6)。常用的type值有:SOCK_STREA
2013-06-18 23:06:57
1220
原创 UNIX网络编程卷一 笔记 第五章 TCP客户/服务器程序示例
1 概述本章主要实现的程序模型:2 TCP回射服务器程序服务器与客户程序约定一个固定的端口,要比5000大,比49152小。fork后子进程第一件事就是关掉listenfd,父进程的第一件事是关掉connfd。在等待客户的read调用返回出错后,如果是因为被信号打断,要重新调用read。3 正常启动监听套接字处于LISTEN状态。
2013-06-18 23:05:53
1285
转载 linux signal 处理
源地址:http://blog.youkuaiyun.com/zhuixundelang/article/details/5979465linuxsignal 处理 说明:本文主要翻译自ULK 3rd chapter 11.主要受 http://blog.youkuaiyun.com/yunsongice 影响,故发表在csdn.另外,本文是最初版本,估计以后会有一个改进版本. 文中还有很多
2013-06-18 22:13:59
34627
原创 UNIX网络编程卷一 笔记 第三章 套接字编程简介
套接字编程简介1 套接字地址结构每个协议族定义的套接字地址结构均以sockaddr_开头。常用的几种套接字地址结构:1. IPV4:sockaddr_in。2. IPV6:sockaddr_in6。3. Unix域套接字:sockaddr_un。4. 数据链路:sockaddr_dl。为了能让不同的地址结构使用同一套处理函数,规定
2013-06-12 20:10:54
985
原创 UNIX网络编程卷一 笔记 第二章 传输层
传输层:TCP、UDP和SCTP1 概述UDP是一个简单的、不可靠的数据报协议,TCP是一个复杂、可靠的字节流协议。SCTP也是个可靠的传输协议,但它还提供消息边界等服务。2 UDP、TCP、SCTP应用进程往一个UDP套接字写入一个消息,该消息随后被封装到一个UDP数据报,它又被封装到一个IP数据报,然后发送。UDP不保证数据报是否到达、先
2013-06-12 19:22:48
1049
原创 UNIX网络编程卷一 笔记 第一章 简介
在设计网络应用时,确定总是由客户发起请求往往能简化协议和程序本身。许多公司也构建自己的广域网,这些私有的广域网既可以连接到因特网上,也可以不连接到因特网。TCP是一个没有记录边界的字节流协议,如果数据量很大,就不能确保一次read能返回服务器的整个应答,因此从TCP套接字读取数据时,总是需要把read编写在某个循环中,当read返回0或负值时终止。如果应用程序需要确定记
2013-06-06 10:26:21
855
转载 Unix下fork与pthread混用的问题
(先是来自云风的Blog)在 POSIX 标准中,fork 的行为是这样的:复制整个用户空间的数据(通常使用 copy-on-write 的策略,所以可以实现的速度很快)以及所有系统对象,然后仅复制当前线程到子进程。这里:所有父进程中别的线程,到了子进程中都是突然蒸发掉的。其它线程的突然消失,是一切问题的根源。我之前从未写过多进程多线程程序,不过公司里有 David Xu 同学(他
2013-04-25 15:42:37
1370
原创 C语言的类型转换
菜鸟的C语言感悟 之 类型转换1.1大端和小端 我们知道存储器是以字节为单位来存放数据的,每个字节有8位,因此1个字节最多可以表示256种不同的状态。256种状态对于常用的整数和浮点类型来说是远远不够的,因此这些类型的数据需要用多个字节来表示,如在32位环境下,int一般是4个字节,double一般是8个字节。对于跨越多字节的程序对象,我们必须建立一个规则:在存储器中如果排列
2013-04-23 22:27:59
1592
原创 C的代码是如何变成程序的
C的代码是如何变成程序的 C语言是一门典型的编译语言,源代码文件需要编译成目标代码文件才能运行。可以认为程序文件就是编译好的目标代码文件。以GCC的编译过程为例。GCC的翻译过程可以分成四个阶段:预处理器、编译器、汇编器、链接器,执行这四个阶段的程序一起构成了一个编译系统。图 1 GCC编译系统(取自《深入理解计算机系统》)1 预处理器
2013-04-07 22:00:25
10088
1
原创 Linux中判断文件是否存在
用access函数access的第一个参数是文件路径,第二个参数是测试的模式。常用的有R_OK:测试读权限,W_OK:测试写权限,X_OK:测试执行权限,F_OK:测试文件是否存在;
2013-03-27 11:01:35
906
转载 关于嵌入式的学习和职业发展
源地址:http://blog.youkuaiyun.com/coolbacon/article/details/8521841嵌入式,这是个术语。在我看来,嵌入式系统是:为了应用高度定制软件和硬件的计算机系统,满足一系列的特定应用需求。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。IEE
2013-03-25 23:54:37
850
原创 scanf和printf处理64位整型变量
昨天做编程马拉松21日的题目时,被它的各种求模给弄的快疯掉了,总是弄不对余数,后来想起来用long long,查了半天,找到了scanf和printf处理long long的格式,记录一下:long long x;scanf("%I64d",&x);printf("%I64d",x);
2013-03-24 23:08:55
1726
翻译 Google C++ Style Guide中英对照(三)
1 Naming 命名规则The mostimportant consistency rules are those that govern naming. The style of a nameimmediately informs us what sort of thing the named entity is: a type, avariable, a function, a cons
2013-03-19 10:35:22
9444
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人