摘要:导读:本文是酷壳网(CoolShell)陈皓收集的一些学习资源和文章,涉及的知识面可能比较泛,其主要目的在于分享,希望开发人员会喜欢。 Web开发 Javascript Garden,这是学习Javascript最好的网站了。http://bonsaiden.github.com/JavaScript-Garden,这个文档由两个StackOverflow的人写成:Ivo Wetzel(Wri...
阅读全文
11 2011 档案
摘要:开发 过去几年来,浏览器开发工具一直是Web开发者最得力的工具。它能够与Web浏览器和谐相处,允许我们在当前窗口中实时地操作DOM元素、CSS样式和JavaScript,以及获取一些其他的有用信息。 以前开发者使用Firefox的一个名叫Firebug的扩展,来开发和调试他们的网站。但是最近,各个浏览器都开发了一套它们自己的工具,并且每一个都有自己的优势和劣势。如今很难想像没有这些方便的工具,...
阅读全文
摘要:怎样在智能手机(以及其他移动设备)上将HTML5应用程序作为本地程序运行?虽然现在Web技术发展得相当快,但是想要在浏览器上运行一个几兆大小的应用程序还是非常困难的,因为浏览器的缓存是有限的。用户必须通过打开一个链接访问HTML5应用程序,而不能像访问本地应用程序一样,仅仅通过点击一个图标就能得到想要的结果,尤其是当移动设备脱机以后,用户几乎无法访问HTML5应用程序。 PhoneGap是一个用...
阅读全文
摘要:每个程序实质上都会链接到一个或者多个的库。比如使用C函数的程序会链接到C运行时库,GUI程序会链接到窗口库等等。无论哪种情况,你都会要决定是链接到静态库(static libary)还是动态库(dynamic libary)。 链接到静态库会使你的程序臃肿,并且难以升级,但是可能会比较容易部署。 而链接到动态库会使你的程序轻便,并且易于升级,但是会难以部署 最近写的.c文件比较大,先在决定生...
阅读全文
摘要:写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。 ...
阅读全文
摘要:一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automati...
阅读全文
摘要:已知链表的头结点head,写一个函数把这个链表逆序 ( Intel) Node * ReverseList(Node *head) //链表逆序 { if ( head == NULL || head->next == NULL ) // 否则下面的就错了,一定要注意一些特定条件的判断,边界问题狠重要,软件开发要注意对异常分支的处理 // 三个指针的方式结构比较清晰 Node *p1 =...
阅读全文
摘要:VIA和EMC都曾经笔过这个试题 输入N, 打印 N*N 矩阵 比如 N = 3,打印: 1 2 3 8 9 4 7 6 5 N = 4,打印: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 /*螺旋矩阵*/ #include <stdio.h> #include <conio.h> #define RIGHT 0 #define D...
阅读全文
摘要:找出两个字符串中最大公共子字符串,如"abccade"、"dgcadde"的最大子串为"cad" // 此题用for能控制循环,思路比下面的while更容易看懂 int GetCommon(char *s1, char *s2, char **r1, char **r2) { int len1 = strlen(s1); int len2 = strlen(s2); int maxle...
阅读全文
摘要:写一个函数,完成内存之间的拷贝。[考虑问题是否全面,是否考虑内存重叠问题] 返回void *支持链式操作,参数类型是void *以支持任意类型的指针,输入参数加上const修饰,最好加上assert对输入输出指针进行非NULL判断 void* memcpy( void *dest, const void *src, size_t count ) { char* pdest = static...
阅读全文
摘要:要求:不申请变量和空间 反转字符串 ,用一个函数实现。 异或^交换或者加减交换的典型应用! VIA 笔试题 基本思路:从 两头往中间做字符交换 。字符串最后一个字符是 '/0' ,表示结束,没有实际意义,可以将它 当作中间变量 ,等处理完成后,再将最后一个字符置 '/0' 即可 **********************************************************...
阅读全文
摘要:矩力集成2008年校园招聘笔试题:动态申请一个二维数组存储图像阵列 传统的解决方案是分配一个指针数组, 然后把每个指针初始化为动态分配的 ``列"。 以下为一个二维的例子: //typedef int (*arraypoiter)[ncolumns]; int **dynamic_alloc_arrays(unsigned int nrows,unsigned int ncolumns) ...
阅读全文
摘要:矩力集成2008年校园招聘笔试题:动态申请一个二维数组存储图像阵列 传统的解决方案是分配一个指针数组, 然后把每个指针初始化为动态分配的 ``列"。 以下为一个二维的例子: //typedef int (*arraypoiter)[ncolumns]; int **dynamic_alloc_arrays(unsigned int nrows,unsigned int ncolumns) ...
阅读全文
摘要:×××××××××××××××××××××××××××××××××× 统计一个字符串中所有字符出现的次数 基本思路:建立一个访问标志数组,初始化为访问次数0,每访问一次,将其增1: static int count[128]; 遍历字符串数组,每次读取一个字符
阅读全文
摘要:一语句实现x是否为2的若干次幂的判断 #define is2*n(x) ((x & (x - 1))? 0 : 1) int main(void) { int m = 512; cout << ((m & (m - 1)) ? false : true) << endl; //即当m中只有一位为1时,才为若干次幂值 //若有两个及以上1,则(m & (m - 1))不为0,输出0,表...
阅读全文
摘要:Baidu和EMC的笔势题:对任意输入的正整数N,编写C程序求N!的尾部连续0的个数,并指出计算复杂度。如:18!=6402373705728000,尾部连续0的个数是3。(不用考虑数值超出计算机整数界限的问题) 思路分析: 本题要用数学的方法来解决效率最高,连续K个0,则说明是10^K的倍数,即(2×5)^ K= 2^K× 5^K;待求的数为N*(N-1)(N-2)………1,由于每两个数至少...
阅读全文
摘要:2009腾迅校园招聘笔试题:不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen函数。函数接口声明如下:int strlen(const char *p); 思路分析: 在字符串中通常可以利用最后一个结束符’/0’,但此处参数为const,只读,那么我们不能打他的主意 函数运行过程中不占用内存基本不可能,除非都使用了寄存器。“不使用中间变量”只是说程序员不能显示的申请内...
阅读全文
摘要:华为笔试题:写一个程序, 要求功能:求出用1,2,5这三个数不同个数组合的和为100的组合个数。如:100个1是一个组合,5个1加19个5是一个组合。。。。 答案:最容易想到的算法是: 设x是1的个数,y是2的个数,z是5的个数,number是组合数 x+2*y+5*z = 100 求这个方程解的个数number 注意到0<=x<=100,0<=y<=50,0<=z=20,所以可以编程为:...
阅读全文
摘要:今天老大让我针对一个面试者出些嵌入式方面的面试题,主要是想对他的技术深度进一步了解。我就出了下面这些问题,每个问题背后都是考察一个嵌入式程序员应该具备的相关技能。当然这些只是我的个人理解,不一定正确。在此与大家分享,只是希望朋友们能够得到一点点启发:如何抓住每一个契机展现你的与众不同? 同样的技术问题,很多人可能都能够回答得对,但有些人只是知其然而不知所以然。其实面试官每一个问题背后通常都隐藏着...
阅读全文
摘要:思科和横河电机面试题。通过一次遍历找到单链表中倒数第n个节点,链表可能相当大,可使用辅助空间,但是辅助空间的数目必须固定,不能和n有关。 单向链表的特点是遍历到末尾后不能反向重数N个节点。因此必须在到达尾部的同时找到倒数第N个节点。 不管是顺数n个还是倒数n个,其实都是距离-标尺问题。标尺是一段距离可以用线段的两个端点来衡量,我们能够判断倒数第一个节点,因为他的next==NULL。如果我们用...
阅读全文
摘要:之前一直在写JQUERY代码的时候遇到AJAX加载数据都需要考虑代码运行顺序问题。最近的项目用了到AJAX同步。这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。 而异步则这个AJAX代码运行中的时候其他代码一样可以运行。 jquery的async:false,这个属性 默...
阅读全文
摘要:Linux内核的同步机制:等待队列 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在Linux2.4.21中,等待队列在源代码树include/linux/wait.h中,这是一个通过list_head连接的典型双循环链表,如下图所示。 在这个链表中,有两种数据结构:等待队列头(wait_queue_head_t)和等待...
阅读全文
摘要:前几天在看驱动的时候碰到了等待队列,上网去搜了一下,再结合代码看了一下,深有体会.在 kernel 里,wait_queue 的应用很广,举凡 device driver,semaphore 等方面都会使用到 wait_queue 来 implement。所以,它算是 kernel 里蛮 基本的一个数据结构。 首先,我们得明白,linux中的所有的进程都由task_struct这个结构管理。在生...
阅读全文
摘要:相信很多写程序的人都写过 socket 的程序。当我们 open 一个 socket 之后,接着去读取这个 socket,如果此时没有任何资料可供读取,那 read 就会 block 住。(这是没有加上 O_NONBLOCK 的情形),直到有资料可读取才会传回来。在 Linux kernel 里有一个数据结构可以帮助我们做到这样的功能。这个数据结构就是这里要跟各位介绍的 wait queue。在 ...
阅读全文
摘要:今天在看流量控制的代码时,特别留意了一下list_head的结构,发现它只有指针域,没有数据域,觉得有点困惑,一般的链表节点都包括两部分:数据域和指针域。linux里为何能这么用呢?股沟一下,原来是这么回事。在Linux内核链表中,不是在链表结构中包含数据,而是在数据结构中包含链表节点。 深入分析 Linux 内核链表 本文详细分析了 2.6.x 内核中链表结构的实现,并通过实...
阅读全文
摘要:最近因为工作关系,看了一些数学书。我以TAMU的两位教授所著的一本小书为例发表一些浅见。该书名为A First Course in Wavelets with Fourier Analysis(国内有电子工业出版社的影印版本)。 一、背景 傅立叶分析是所有理工科学生都多少知道一点的,傅立叶分析的主要内容有傅立叶级数、傅立叶变换等。傅立叶级数是所有学过工科高等数学课程的学生都知道的。而作为电子工...
阅读全文
摘要:《Linux内核设计与实现》 简称LKD,从入门开始,介绍了诸如进程管理、系统调用、中断和中断处理程序、内核同步、时间管理、内存管理、地址空间、调试技术等方面,内容比较浅显易懂,个人认为是内核新人首先必读的书籍。新人得有此书,足矣! 《深入理解Linux内核》 简称ULK,相比于LKD的内容不够深入、覆盖面不广,ULK要深入全面得多。 前面这两本,一本提纲挈领,一本全面深入...
阅读全文
摘要:Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。 在下文将对进程的 R、S、D、T、Z、X 六种状态做个说明。 PROCESS STATE CODES Here are the different values that the s, stat and state output specifiers (header "S...
阅读全文
摘要:1、/linux-2.6.30.4/arch/arm/include/asm/ 1.1、<asm/io.h>--->对应__raw__write()和__raw__read()等的使用 1.2、<asm/uaccess.h> ----> /* copy_to_user, copy_from_user */ 1.3、<asm/system.h>:系统头文件,定义了设置或修改描述符/中断门等的嵌...
阅读全文
摘要:一个进程在其生存期内,可处于一组不同的状态下,称为进程状态,如图5-21所示。进程状态保存在进程任务结构的state字段中。当进程正在等待 系统中的资源而处于等待状态时,则称其处于睡眠等待状态。在Linux系统中,睡眠等待状态分为可中断的和不可中断的等待状态。 (点击查看大图)图5-21 进程状态及转换关系 (1)运行状态(TASK_RUNNING)。当进程正在被CPU执行,或...
阅读全文
摘要:内核地址空间分布 直接映射区:线性空间中从3G开始最大896M的区间,为直接内存映射区,该区域的线性地址和物理地址存在线性转换关系:线性地址=3G+物理地址。 动态内存映射区:该区域由内核函数vmalloc来分配,特点是:线性空间连续,但是对应的物理空间不一定连续。vmalloc分配的线性地址所对应的物理页可能处于低端内存,也可能处于高端内存。 永久内存映射区:该区域可访问高端内存。访...
阅读全文
摘要:1、实物图 2、CPU接线图 3、实际硬件接图
阅读全文
摘要:readb(),readw(),readl()几个函数的区别联系: 功能: 从内存映射的I/O空间读取数据。 1、readb()从I/O读取8位数据(1字节); 2、readw()从I/O读取16位数据(2字节); 3、readl()从 I/O 读取 32 位数据(4字节). 原型: #include <asm/io.h> unsigned char readb (unsigne...
阅读全文
摘要:国外知名网站stackoverflow上有一个问题调查: 哪本书是对程序员最有影响、每个程序员都该阅读的书?这个调查已历时两年,目前为止吸引 了153,432人访问,读者共推荐出了478本书(还在增加),其中最火的一本 书《Code Complete》被顶了1306次。 如果你是个程序员,你一定有兴 趣看看这些书里你都看过几本,如果你一本没看过的话,我也不好说什么 ,也许你是个天才,但我相信大多...
阅读全文
摘要:技术出身,没有背景,缺少投资意识,全靠挣老实工资养家糊口,追求自己理想,即使不是HW,在其他公司,也一样有这样的喟叹蹉跎。只不过,同样的块垒,有了HW这样同样的借口而已。 ——————————————————————————- 作为一个老资格的潜水者,已经在这个论坛混迹很久了,基本都是游客的身份去看看,甚少发言。09年以来,这个论坛似乎越发活跃了,大量的小道消息,大量的桃色新闻,大量的离职宣言...
阅读全文
摘要:【问题】 Source Insight里输入中文,字间距相当的大。 【答案】 1.Options->Style Properties 2. 在左边Style Name下找到Comment Multi Line和Comment.在其右边对应的Font属性框下的Font Name中选“Pick…” 设置为宋体、常规、小四。确定,退回Style Properties界面,Size设...
阅读全文
摘要:一.RISC设计思想 ARM内核采用RISC体系结构。RISC是一种设计思想,其目标是设计出一套能在高时钟频率下单周期执行,简单而有效的指令集。RISC的设计重点在于由硬件执行的指令的复杂度,这是因为软件比硬件容易提供更大的灵活性和更高的智能。因此,RISC设计对编译器有更高的要求;相反,传统的复杂指令集的计算机(CISC)则更侧重于硬件执行指令的功能性,使CISC变得更复杂。 RISC设计思...
阅读全文
摘要:1.流水线结构 pipeline – MIPS 是最简单的体系结构之一,所以使大学喜欢选择 MIPS 体系结构来介绍计算体系结构课程。 – ARM has barrel shifter shifter是两面性的,一方面它可以提高数学逻辑运算速度,另一方面它也增加了硬件的复杂性。所以和可以完成同样功能的adder/shift register相比,效率更高,但...
阅读全文
摘要:多少年来,人们普遍有一种看法,认为软件工程应该和其它种类的工程一样:仔细的设计,精确的规划,然后进行开发 —— 严格按照设计说明书。就像修建一座桥梁,不是吗?这种开发方式的问题在于:软件,它是“软”的。它可以无限的延展。任何需要的时候你都可以大幅度的修改你的软件,人们也都是这么干的。 还有,因为软件可以被拿来对任何事物进行模型造型,你能要求软件开发人员去实现的可能的东西几乎是无...
阅读全文
摘要:程序员热衷于长时间地工作。我想说的是,你就承认吧,你的工作/老板并没有让你这样做,你自己要这样做而已。当然,我知道,也许并非所有程序员都喜欢长时间的编程。不过肯定的是,随着加班成为业内的普遍现象,至少一半的程序员必须喜欢加班,不是吗? 我早已听到以下这类借口。“不,不是那样的,我们只是喜欢炫酷的技术活,而且不想遗留未解决的问题。实际上,加班是一件好事,它让我们变得出色!” 我认为,你不能只...
阅读全文
摘要:1、Linux设备驱动分类: 1、字符设备: 字符设备指那些必须以串行顺序依次进行访问的设备,如触摸屏、磁带驱动器、鼠标等。 2、块设备: 块设备可以用任意顺序进行访问,以块为单位进行操作,如硬盘、软驱等。字符设备不经过系统的快速缓冲,而块设备经过系统的快速缓冲.但是,字符设备和块设备并没有明显的界限,如对于Flash设备,符合块设备的特点,但是我们仍然...
阅读全文
摘要:在Linux的ARM平台上的驱动设计需要遵循一个基本的模式,也就是说在你的驱动设计里面除了有些是关于你的硬件知识,但是有些东西是设计这个驱动的几个必须的模块: 1、内核驱动的加载函数(必须的) static int _ _init initialization_function(void) { ……………………….. } module_init(initialization_func...
阅读全文