随笔分类 -  面试笔试

1

常见端口号
摘要:21/tcp FTP文件传输协议22/tcp SSH 安全登录、文件传送(SCP)和端口重定向23/tcp Telnet 不安全的文本传送25/tcp SMTP Simple Mail Transfer Protocol (E-mail)53/UDP DNS域名解析服务69/udp TFTP Trivial File Transfer Protocol79/tcp finger Finger80/tcp HTTP 超文本传送协议 (WWW)88/tcp Kerberos Authenticating agent110/tcp POP3Post Office Protocol (E-mail)1 阅读全文

posted @ 2012-11-10 13:59 linzuxin 阅读(216) 评论(0) 推荐(0)

Effective C++总结
摘要:条款1:View C++ as a federation of languages。视C++为一个语言联邦。分为四个部分:C、Object-Oriented C++(Class)、Template C++、STL条款2:Prefer consts, enums, inlines to #defines。尽量以const, enum, inline替代#define。记住:1.对于单纯常量,最好以const对象或enum替换#define 2.对于形似函数的宏(macros),最好改用inline函数替换#defineC语言用#define可以做到两点,第一,定义常量,如#define PI 3 阅读全文

posted @ 2012-10-30 17:04 linzuxin 阅读(187) 评论(0) 推荐(0)

等概率产生0和1(延伸)
摘要:1.有一个随机数发生器,能以概率p生成0,以概率1-p生成1,问如何做一个随机数发生器使得生成0和1的概率相等。2.用上面那个生成0和1的概率相等的随机数发生器,怎样做一个随机数发生器使得它生成的数在1...N之间均匀分布。第一题比较简单,可以用原发生器周期性地产生2个数,直到生成01或者10。由于生成01和10的概率均为p(1-p),故预先任意指定01为0(或1),10为1(或0)即可。即可等概率的产生0和1,但然,要考虑其他组合的不可用性,获取题目本身就隐含了这个bug或是缺陷吧。int Rand() { int i1 = rand(); int i2 = rand(); if(i1... 阅读全文

posted @ 2012-10-28 21:29 linzuxin 阅读(397) 评论(0) 推荐(0)

螺旋数组
摘要:题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:1234567891011 12131415 16则依次打印出数字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6,7, 11, 10。总结规律,找出通项公式这个太复杂了,还是老老实实输出方法:依次:按左-->右,上-->下,右-->左,下-->上的方向交替访问,如果遇到已经访问过的元素,那么就改变访问的方向。#include<iostream> using namespace std; int main() { const int 阅读全文

posted @ 2012-10-26 22:24 linzuxin 阅读(206) 评论(0) 推荐(0)

二分查找及其变形
摘要:二分查找常用来查找指定有序集合中元素的位置,思路和代码都比较简单,所以大家都很熟练。二分查找貌似很多公司在面试或笔试的时候都会多少涉及到,经常会让你在纸上直接写代码,所以平常只知道原理而从来不自己写的人,可能不会太快写出来,或是代码有点小漏洞,所以经常敲敲常见的数据结构和代码还是很必要的。经典二分查找的代码:int Find(int arr[], int key,int length) { assert(arr!=NULL&&length>0); int low=0,high=length-1,mid; while(low<=high) { mi... 阅读全文

posted @ 2012-10-26 19:59 linzuxin 阅读(222) 评论(0) 推荐(0)

socket的read和recv函数的区别
摘要:1、recv和send recv和send函数提供了和read和write差不多的功能.但是他们提供了第四个参数来控制读写操作。int recv(int sockfd,void *buf,int len,int flags)int send(int sockfd,void *buf,int len,int flags)前面的三个参数和read,write相同,第四个参数能够是0或是以下的组合_______________________________________________________________MSG_DONTROUTE:不查找路由表MSG_OOB:接受或发送带外数据MS. 阅读全文

posted @ 2012-10-26 19:31 linzuxin 阅读(326) 评论(0) 推荐(0)

linux的tcp服务端、客户端例子
摘要:TCP编程的服务器端一般步骤是:1、创建一个socket,用函数socket();2、设置socket属性,用函数setsockopt(); * 可选3、绑定IP地址、端口等信息到socket上,用函数bind();4、开启监听,用函数listen();5、接收客户端上来的连接,用函数accept();6、收发数据,用函数send()和recv(),或者read()和write();7、关闭网络连接;8、关闭监听;TCP编程的客户端一般步骤是:1、创建一个socket,用函数socket();2、设置socket属性,用函数setsockopt();* 可选3、绑定IP地址、端口等信息到soc 阅读全文

posted @ 2012-10-26 19:18 linzuxin 阅读(723) 评论(0) 推荐(0)

自己实现memcpy/strcpy/strcmp/strcat/strlen/strstr
摘要:字节拷贝函数:void * memcpy1(void *dest, const void *src, size_t n){ assert(dest!=NULL&&src!=NULL); //有效性检测 if(dest == src) return dest; else if(dest < src) { const char *c_src = static_cast<const char *>(src); char *c_dest = static_cast<char *>(dest); while (n--) *... 阅读全文

posted @ 2012-10-23 18:10 linzuxin 阅读(270) 评论(0) 推荐(1)

C++中的空类,默认产生哪些类成员函数?
摘要:class Empty { public: Empty(); // 缺省构造函数 Empty( const Empty& ); // 拷贝构造函数 ~Empty(); // 析构函数 Empty& operator=( const Empty& ); // 赋值运算符 Empty* operator&(); // 取址运算符 const Empty* operator&() const; // 取... 阅读全文

posted @ 2012-10-23 17:44 linzuxin 阅读(172) 评论(0) 推荐(0)

定义一个宏获取结构体中变量相对结构体开始的偏移量
摘要:#include <iostream> using namespace std; struct test{ int a; char b; int c; char d; }; #define find(type, var) (unsigned int)(&(((type *)(0))->var)) int main() { int a = find(test, a); //0 int b = find(test, b); //4 int c = find(test, c); //8 int d = find(test, d); //12 cout << a 阅读全文

posted @ 2012-10-22 14:26 linzuxin 阅读(218) 评论(0) 推荐(0)

继承和组合的区别
摘要:首先它们都是实现系统功能重用,代码复用的最常用的有效的设计技巧,都是在设计模式中的基础结构。相信大家已了解的,类继承允许我们根据自己的实现来覆盖重写父类的实现细节,父类的实现对于子类是可见的,所以我们一般称之为白盒复用。对象持有(其实就是组合)要求建立一个号的接口,但是整体类和部分类之间不会去关心各自的实现细节,即它们之间的实现细节是不可见的,故成为黑盒复用。 继承是在编译时刻静态定义的,即是静态复用,在编译后子类和父类的关系就已经确定了。而组合这是运用于复杂的设计,它们之间的关系是在运行时候才确定的,即在对对象没有创建运行前,整体类是不会知道自己将持有特定接口下的那个实现类。在扩展方面组合比 阅读全文

posted @ 2012-10-21 22:02 linzuxin 阅读(394) 评论(0) 推荐(0)

百度2013校园招聘笔试题(含自己整理的答案)
摘要:一:简答题(30)1:数据库以及线程发生死锁的原理及必要条件,如何避免死锁答:产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。产生死锁的四个必要条件:(1)互斥条件:一个资源每次只能被一个进程使用。(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。避免死锁:死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。死锁产生的前三个条件是死锁产生的必要条件, 阅读全文

posted @ 2012-10-07 17:35 linzuxin 阅读(162) 评论(0) 推荐(0)

典型递归算法例子-------Python实现
摘要:#!/usr/bin/python #coding=utf-8 ''' Created on 2012-9-25 @author: linzuxin ''' status = {} def factorial(n): ''' 输入一个数字,求其阶乘。status是一个hash,用来存储中间结果,避免重复计算 @param n: 要求的数字 @return: n的阶乘 ''' if n == 0 or n == 1: status[0] = 1 status[1] = 1 re... 阅读全文

posted @ 2012-09-26 16:56 linzuxin 阅读(275) 评论(0) 推荐(0)

0/1背包问题--Dynamic Programming
摘要:DP问题的特征:重复子问题存在最优子集背包问题属于经典的DP问题,而0/1背包问题是属于最简单的情况。0/1的意思是每种物品只有一件,要么放入背包中,要么不放问题定义:有N个物品,要放入容量为W的背包中,第i件物品重量为w(i),价值为v(i),问要怎样放才能在不超过背包容量的基础上,获得最大的价值。算法描述:需要用到递归的思想,定义A(i, j)为前i个物品中在容量为j的情况下所能达到的最大价值,则A(0,j) = 0,A(i,0) = 0(i <= N and j <= W).如果w(i) > j时,说明第i件物品不能放入背包中,价值不变,所以A(i, j) = A(i 阅读全文

posted @ 2012-09-25 22:28 linzuxin 阅读(204) 评论(0) 推荐(0)

C++运算符优先级
摘要:优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右()圆括号(表达式)/函数名(形参表).成员选择(对象)对象.成员名->成员选择(指针)对象指针->成员名2-负号运算符-表达式右到左单目运算符(类型)强制类型转换(数据类型)表达式++自增运算符++变量名/变量名++单目运算符--自减运算符--变量名/变量名--单目运算符*取值运算符*指针变量单目运算符&取地址运算符&变量名单目运算符!逻辑非运算符!表达式单目运算符~按位取反运算符~表达式单目运算符sizeof长度运算符sizeof(表达式)3/除表达式/表达式左到右双目运算符*乘表 阅读全文

posted @ 2012-09-21 21:25 linzuxin 阅读(164) 评论(0) 推荐(0)

模板函数和模板类
摘要:定义3个参数,第3个参数用于表示返回值类型template <typename T1,typename T2,typename T3> inline T3 const& max (T1 const& a, T2 const& b) { // if a < b then use b else use a return a < b ? b : a; } template <class Type>class TNumber{public:~TNumber(){}void SetItem(Type);Type GetItem();privat 阅读全文

posted @ 2012-09-21 21:01 linzuxin 阅读(119) 评论(0) 推荐(0)

浅析类的const成员函数,类的const对象
摘要:1.const数据成员:跟const常量一样,只是一个在类里,一个在类外而已,都必须初始化。2.const成员函数:即普通成员函数后再加const。它可以读取数据成员的值,但不能修改它们。若要修改时,数据成员前必须加mutable。以指定其可被任意更改。mutable是ANSI C++考虑到实际编程时,可能一定要修改const对象中的某个数据成员而设的。3.普通对象:可以调用任意成员函数。4.const对象:仅能调用const成员函数。 阅读全文

posted @ 2012-09-21 20:45 linzuxin 阅读(163) 评论(0) 推荐(0)

Java中new和newInstance的区别
摘要:1、类的加载方式不同 在执行Class.forName("a.class.Name")时,JVM会在classapth中去找对应的类并加载,这时JVM会执行该类的静态代码段。在使用newInstance()方法的时候,必须保证这个类已经加载并且已经连接了,而这可以通过Class的静态方法forName()来完成的。 使用关键字new创建一个类的时候,这个类可以没有被加载,一般也不需要该类在classpath中设定,但可能需要通过classlaoder来加载。2、所调用的构造方法不尽相同 new关键字能调用任何构造方法。 newInstance()只能调用无参构造方法。3、执 阅读全文

posted @ 2012-09-10 23:47 linzuxin 阅读(371) 评论(0) 推荐(0)

深入研究Java类加载机制
摘要:类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行。研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性。一、简单过程Java程序运行的场所是内存,当在命令行下执行:java HelloWorld命令的时候,JVM会将HelloWorld.class加载到内存中,并形成一个Class的对象HelloWorld.class。其中的过程就是类加载过程:1、寻找jre目录,寻找jvm.dll,并初始化JVM;2、产生一个Bootstrap Loader(启动类加载器);3、Bootstrap Loa 阅读全文

posted @ 2012-09-10 23:41 linzuxin 阅读(174) 评论(0) 推荐(0)

海量数据处理常见方法
摘要:所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化小:分而治之/hash映射,你不是说规模太大嘛,那简单啊,就把规模大化为规模小的,各个击破不就完了嘛。 至于所谓的单机及集群问题,通俗点来讲,单机就是处理装载数据的机器有限(只要考虑cpu,内存,硬盘的数据交互),而集群,机器有多辆,适合分布式处 阅读全文

posted @ 2012-09-05 23:17 linzuxin 阅读(205) 评论(0) 推荐(0)

1

导航