网络编程专业大学生自荐书范文
第一篇:计算机编程自荐书
尊敬的领导:
您好!
首先感谢您在百忙之中能抽出时间来阅读我的自荐书!为一位满腔热情的中职生开启一扇希望之门。
我的性格活泼开朗,是个不服输的人。两年前,我带着美好的憧憬走进了中专的校园,我刻苦学习,力求向上,一直凭着“没有最好,只有更好”的准则为之奋斗,掌握了有关电子技术、plc编程,计算机应用等相关的专业知识,能熟练操作计算机办公软件,并考取了“全国计算机信息高新技术”资格证书,我还利用课余时间广泛涉猎了大量书籍,不断地充实自己。养成了严谨的学风和端正的学习态度,培养了朴实、稳重的性格特点。
现在,我以满腔的热情准备投身社会这个大熔炉中,我知道存在有很多艰难困苦,但我相信通过中专学习所掌握和获取的知识和技能以及我对生活的热爱能使我战胜它们!我要在新的起点、新的层次上、以新的姿态展现新的风貌和热情。面对当今激烈的社会竞争,我自知理论知识有限,但我相信我有着不甘落后和不断学习的毅力,有对事业的热情与执着,更有一颗真挚的心和拼搏进取的决定,这些这些会让我不断进步和取得成功。
希望贵企业能给我一个发展的平台,我会好好珍惜并全力以赴,为实现自己的人生价值而奋斗,为贵企业的发展贡献力量。“吃得苦中苦,方为人上人”,我相信我一定会是尽责的员工。
最后,再次感谢您阅读我的自荐信。祝贵企业事业欣欣向荣,业绩蒸蒸日上!也祝您身体健康,万事如意!
此致
敬礼
第二篇:网络编程实习报告
广东应届生实习报告网在线编辑整理本文。
[实习目的]
通过理论联系实际,巩固所学的知识,提高处理实际问题的能力,并为自己能顺利与社会环境接轨做准备。[实习任务]linux下网络服务器开发;本文总结了我对linux下网络服务器模型的认识。[实习内容]一.循环服务器1.循环服务器在同一个时刻只可以响应一个客户端的请求,对多个客户程序的处理是采用循环的方式进行;2.udp循环服务器的实现非常简单:udp服务器每次从套接字上读取一个客户端的请求,处理,然后将结果返回给客户机;2.1.算法如下:socket(...);
bind(...);
while(1)
{
recvfrom(...);
process(...);
sendto(...);
}3.tcp循环服务器的实现也不难:tcp服务器接受一个客户端的连接,然后处理,完成了这个客户的所有请求后,断开连接;3.1.算法如下:
socket(...);
bind(...);
listen(...);
while(1)
{
accept(...);
while(1)
{
read(...);
process(...);write(...);
}
close(...);
}3.2.tcp循环服务器一次只能处理一个客户端的请求.只有在这个客户的所有请求都满足后,服务器才可以继续后面的请求.这样如果有一个客户端占住服务器不放时,其它的客户机都不能工作了.因此,tcp服务器一般很少用循环服务器模型的.二.并发服务器1.为了弥补循环tcp服务器的缺陷,人们又想出了并发服务器的模型。并发服务器的思想是每一个客户机的请求并不由服务器直接处理,而是服务器创建一个子进程来处理;2.使用并发服务器可以使服务器进程在同一个时刻有多个子进程和不同的客户程序连接、通信;在客户程序看来,服务器可以同时并发地处理多个客户的请求;3.算法如下:socket(...);
bind(...);
listen(...);
while(1)
{
accept(...);
if(fork(..)==0)
{
close(...);while(1)
{
read(...);
广东应届生实习报告网在线编辑整理本文。process(...);
write(...);
}
close(...);
exit(...);
}
close(...);
}4.tcp并发服务器可以解决tcp循环服务器客户机独占服务器的情况,改善了对客户程序的响应速度;不过也同时带来了一个不小的问题:为了响应客户机的请求,服务器要创建子进程来处理,而创建子进程是一种非常消耗资源的操作,这明显增加了系统调度的开销;5.为了解决创建子进程带来的系统资源消耗,人们又想出了多路复用i/o模型.5.1.该模型一般用函数select和相关的四个宏定义:intselect(intfd,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout)
voidfd_set(intfd,fd_set*fdset)
voidfd_clr(intfd,fd_set*fdset)
voidfd_zero(fd_set*fdset)
intfd_isset(intfd,fd_set*fdset)5.2.一般的来说当我们在向文件读写时,进程有可能在读写时候阻塞,直到一定的条件满足.比如我们从一个套接字读数据时,可能缓冲区里面没有数据可读(通信的对方还没有发送数据过来),这个时候我们的读调用就会等待(阻塞)直到有数据可读.如果我们不希望阻塞,我们的一个选择是把socket设置为非阻塞模式来实现;intsocketfd;socketfd=socket(af_inet,sock_stream,0);fcntl(socketfd,f_setfl,o_nonblock);通过设置socket为非阻塞模式,可以实现“轮循”多个socket,当企图从一个没有数据等待处理的非阻塞socket读取数据时,函数立即返回,但是这种“轮循”会使cpu处于忙等待方式,降低了性能,select函数解决了这个问题;5.3.在我们调用select时进程会一直阻塞直到以下的一种情况发生.1)有文件可以读.2)有文件可以写.3)超时所设置的时间到;5.4.算法如下:初始化(socket,bind,listen
while(1)
{设置监听读写文件描述符(fd_*);
调用select;
如果是倾听套接字就绪,说明一个新的连接请求建立
建立连接(accept);
加入到监听文件描述符中去;
否则说明是一个已经连接过的描述符
进行操作(read或者write);}
多路复用i/o
广东应届生实习报告网在线编辑整理本文。可以解决资源限制的问题.着模型实际上是将udp循环模型用在了tcp上面.这也就带来了一些问题.如由于服务器依次处理客户的请求,所以可能会导致有的客户会等待很久。三.i/o模型1.网络服务器模型根据i/o模型的不同实现而来的;2.i/o模型分为同步i/o和异步i/o;同步i/o又包括阻塞i/o、非阻塞i/o、信号驱动i/o、多路复用i/o;可根据不同的要求利用不同的i/o模型实现不同是网络服务器。[实习心得]通过近几个月的实习,基本上掌握了linux下c语言网络编程的一些算法和技巧,提高了自己的能力。专业:计算机网络技术班级:03631学号:63103089姓名:吕亮亮——xx.05.23 
第三篇:网络编程实习报告
[实习目的]
通过理论联系实际,巩固所学的知识,提高处理实际问题的能力,并为自己能顺利与社会环境接轨做准备。[实习任务]linux下网络服务器开发(基于c语言);本文总结了我对linux下网络服务器模型的认识。[实习内容]一.循环服务器1.循环服务器在同一个时刻只可以响应一个客户端的请求,对多个客户程序的处理是采用循环的方式进行; 2. udp循环服务器的实现非常简单:udp服务器每次从套接字上读取一个客户端的请求,处理, 然后将结果返回给客户机;2.1.算法如下(udp服务器): socket(...);
bind(...);
while(1)
{
recvfrom(...);
process(...);
sendto(...);
}3. tcp循环服务器的实现也不难:tcp服务器接受一个客户端的连接,然后处理,完成了这个客户的所有请求后,断开连接;3.1. 算法如下(tcp服务器):
socket(...);
bind(...);
listen(...);
while(1)
{
accept(...);
while(1)
{
read(...);
process(...);write(...);
}
close(...);
}3.2. tcp循环服务器一次只能处理一个客户端的请求.只有在这个客户的所有请求都满足后, 服务器才可以继续后面的请求.这样如果有一个客户端占住服务器不放时,其它的客户机都不能工作了.因此,tcp服务器一般很少用循环服务器模型的.二. 并发服务器1. 为了弥补循环tcp服务器的缺陷,人们又想出了并发服务器的模型。并发服务器的思想是每一个客户机的请求并不由服务器直接处理,而是服务器创建一个子进程来处理;2.使用并发服务器可以使服务器进程在同一个时刻有多个子进程和不同的客户程序连接、通信;在客户程序看来,服务器可以同时并发地处理多个客户的请求;3.算法如下(tcp服务器):socket(...);
bind(...);
listen(...);
while(1)
{
accept(...);
if(fork(..)==0)
{
close(...);while(1)
{
read(...);
process(...);
write(...);
}
close(...);
exit(...);
}
close(...);
}4. tcp并发服务器可以解决tcp循环服务器客户机独占服务器的情况,改善了对客户程序的响应速度;不过也同时带来了一个不小的问题:为了响应客户机的请求,服务器要创建子进程来处理,而创建子进程是一种非常消耗资源的操作,这明显增加了系统调度的开销;5. 为了解决创建子进程带来的系统资源消耗,人们又想出了多路复用i/o模型.5.1.该模型一般用函数select和相关的四个宏定义:intselect(intfd,fd_set*readfds,fd_set*writefds,fd_set*exceptfds,structtimeval*timeout)
voidfd_set(intfd,fd_set*fdset)
voidfd_clr(intfd,fd_set*fdset)
voidfd_zero(fd_set*fdset)
intfd_isset(intfd,fd_set*fdset)5.2. 一般的来说当我们在向文件读写时,进程有可能在读写时候阻塞,直到一定的条件满足.比如我们从一个套接字读数据时,可能缓冲区里面没有数据可读(通信的对方还没有发送数据过来),这个时候我们的读调用就会等待(阻塞)直到有数据可读.如果我们不希望阻塞,我们的一个选择是把socket设置为非阻塞模式来实现;int socketfd;socketfd=socket(af_inet,sock_stream,0);fcntl(socketfd,f_setfl,o_nonblock);通过设置socket为非阻塞模式,可以实现“轮循”多个socket,当企图从一个没有数据等待处理的非阻塞socket读取数据时,函数立即返回,但是这种“轮循”会使cpu处于忙等待方式,降低了性能,select函数解决了这个问题;5.3. 在我们调用select时进程会一直阻塞直到以下的一种情况发生.1)有文件可以读.2)有文件可以写.3)超时所设置的时间到;5.4.算法如下(多路复用i/o模型):初始化(socket,bind,listen);
while(1)
{ 设置监听读写文件描述符(fd_*);
调用select;
如果是倾听套接字就绪,说明一个新的连接请求建立
建立连接(accept);
加入到监听文件描述符中去;
否则说明是一个已经连接过的描述符
进行操作(read或者write);}
多路复用i/o可以解决资源限制的问题.着模型实际上是将udp循环模型用在了tcp上面.这也就带来了一些问题.如由于服务器依次处理客户的请求,所以可能会导致有的客户会等待很久。 三.i/o模型1.网络服务器模型根据i/o模型的不同实现而来的;2. i/o模型分为同步i/o和异步i/o;同步i/o又包括阻塞i/o、非阻塞i/o、信号驱动i/o、多路复用i/o;可根据不同的要求利用不同的i/o模型实现不同是网络服务器。[实习心得] 通过近几个月的实习,基本上掌握了linux下c语言网络编程的一些算法和技巧,提高了自己的能力。专业:计算机网络技术 班级:03631 学号:63103089 姓名:吕亮亮——xx.05.23
第四篇:网络编程实习作业
网络编程实习作业
一. 实习内容:
? 了解插口(socket)实现原理。
? 在某一种平台(linux,unix系列或windows系列)下进行网络客户机-服务器编程。
二. 主要参考书目:
? w. richard stevens, "unix network programming networking apis: scokets and xti (volume 1,second edition) ",清华大学出版社 prentice-hall international, inc. 或其中文版 “unix网络编程(第1卷,第2版)” 经典读物,目前的最新版是第三版
? douglas comer,《用tcp/ip进行网际互连 第3卷:客户机-服务器编程和应用(第2版)》 或其英文版 internetworking with tcp/ip vol iii: client-server programming and application (second edition)以下简称《客户机-服务器编程》
三. 实习题目:
1:编写daytime服务的udp客户机和服务器的实现。
基本要求:
当服务器端收到客户端的请求后,将当前daytime返回给客户端,客户端收到该回应后,将收到的daytime显示到输出中。
(其中在linux或unix环境中,当前daytime的获得参考函数time()和ctime())
2:熟悉http协议的请求和响应格式,编写一个简单的http服务器。题目描述参考《自上而下计算机网络》(第三版 作者james f. kurose)第二章课后编程作业1。
基本要求:
1 正确解析http请求,实现简单的get请求回应。
2 模拟一个对象(如:文件index.html)的get回应(如:回应一个字符串),对于其他的对象,则根据http响应格式回应对象不存在信息。3 通过浏览器可检测自己的程序。如:输入,查看其响应结果。
4 对http请求的处理必须采用多进程实现,即主进程负责等待请求连接,每当收到一个请求后,产生一个子进程对该请求做单独处理,主进程继续等待新请求,子进程在处理完其请求后结束自己。详细要求参考课本要求。(多进程编程参考函数fork())
要求:
源程序部分带有必要的注释,备有一份文档说明各个程序中的思路和关键技术。注意,只能使用c语言编写。可以是windows或者linux下可执行,二种环境选择一种即可。
评分标准
90% 以上 :在程序说明文档中,可以体现出自己对本程序所用到的技术有较深刻的理解。
程序有较好的可读性(关键部分的注释比较详细)。
80% :符合要求,程序说明的比较详细,思路比较清楚。
70% :只有程序没有说明文档的,
70% - 60% :缺少说明文档
60% 以下 :程序或说明文档完全和别人的一样 (抄袭于被抄袭者一样处理)。
注:
1 作业包括程序部分(.c, .cpp, .h等源码和 .exe等可执行文件,不要 .obj 等其他文件)和程序说明文档,文件大小最好不要超过1m。
2 程序说明要体现出你所用到的关键技术,要说清楚自己定义函数的功能及实现,要有关键部分的流程图。
3 要按时交作业,晚交的要相应的扣分。
4 请将程序打成一个包,包名统一采用“学号_姓名”形式,然后发到
network_tju@163.com
邮件的title也是“学号_姓名”
请一定将学号放在前面
5截至日期:2014年4月20日
(注:1. 以邮箱接收到的时间戳为准。 2. 在提交作业时,请最好选择发送并保存邮件,避免由于投递失败而导致作业无法按时完成。(就是避免死无对证)3. 杜绝抄袭,请尽早开始着手这项作业)
第五篇:c++ 面试题(服务器编程、网络编程方便)
c++ 面试题 - 专注于服务器编程、网络编程 c++ 面试题
1.类成员指针
class test
{
public:
int fun(int) const;
int fun(int);
static int fun(int);
int itemp;
}
<!--[if !supportlists]-->1.1<!--[endif]-->非静态成员函数指针定义:
int (test::*pfun)(int) = &test::fun;
int (test::*pfunconst)(int)const = &test::fun;
使用:
test a;
const test b;
(a.*pfun)(2) 或 (a.*pfunconst)(2);
(b.*pfunconst)(2);
不能用(b.*pfun)(2);
<!--[if !supportlists]-->1.2<!--[endif]-->非静态成员变量int test::*pint = &test::itemp;
(a.*pint) = 3;
<!--[if !supportlists]-->1.3<!--[endif]-->静态成员函数指针int (*pfun)() = &test::fun;
或 int (*pfun)() = test::fun; 都正确;(注:定义无域操作符)使用:
(*pfun)() 或 pfun() 都正确;
2.非成员函数指针和静态成员函数一致。
3.非成员函数和静态成员函数上不允许修饰符。例如 void fun() const; void fun() volatile;但非静态 成员函数允许const、volatile等修饰符。
4.变量修饰符
auto:指定数据存储在栈中。局部变量默认为auto。该修饰符不能用于成员变量和全局变量。
static: 局部变量表示存储在静态空间,全局变量表示不允许外部引用。
volatile:表示该变量可能随时改变,不要做任何假设优化。
mutale: 去除成员变量的const属性。
extern:全局变量默认为extern属性,表示可被外部引用,此时与static相对。
extern int a =2; 表示定义一个可被外部引用的变量。
extern int a; 表示引用外部变量。
5.数据类型隐式转换
短数据->长数据 (eg: float -> double)
有符号->无符号 (eg: int -> unsigned int )ps: 所以 int(-1)>unsigned int(1);
低精度->高精度 (eg: int -> float)
6.memcpy 有“防重叠”覆盖机制,strcpy 没有。
7.float表示
共计32位,折合4字节
由最高到最低位分别是第31、30、29、……、0位
31位是 符号位,1表示该数为负,0反之。
30-23位,一共8位是指数位。
22-0位,一共23位是尾数位。
每 8位分为一组,分成4组,分别是a组、b组、c组、d组。
每一组是一个字节,在内存中逆序存储,即:dcba
8.不能在类的声明中初始化类常量,而只能在构造函数初始化列表来初始化
9.类中的枚举常量不占用对象的存储空间
10.有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达,可以附加返回值。
11.赋值函数,应当用“引用传递”的方式返回string 对象。如果用“值传递”的方式,虽然功能仍然正确,但由于return 语句要把 *this 拷贝到保存返回值的外部存储单元之中,增加了不必要的开销,降低了赋值函数的效率。
12.对于非内部数据类型的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象在消亡之前要自动执行析构函数。如果用free 释放“new 创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。如果用delete 释放“malloc 申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差。
13.如果用new 创建对象数组,那么只能使用对象的无参数构造函数,delete时如果对象没有析构函数,则delete和delete[]是功能相同的。
14.只能靠参数而不能靠返回值类型的不同来区分重载函数。编译器根据参数为每个重载函数产生不同的内部标识符。并不是两个函数的名字相同就能构成重载。全局函 数和类的成员函数同名不算重载,因为函数的作用域不同。
15.关键字inline
必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。定义在类声明之中的成员函数将自动地成为内联函数。
以下情况不宜使用内联:
(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
(2)如果函数体 内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。
16.只有静态常量整型数据成员才可以在类中初始化,普通成员只能在初始化列表或函数内初始化,常量成员只能在初始化列表。成员对象初始化的次序完全不受它们在 初始化表中次序的影响,只由成员对象在类中声明的次序决定。
17.拷贝构造函数和赋值函数非常容易混淆,常导致错写、错用。拷贝构造函数是在对象被创建时调用的,而赋值函数只能被已经存在了的对象调用。
18.不想编写拷贝构造函数和赋值函数,又不允许别人使用编译器生成的,则只需将拷贝构造函数和赋值函数声明为私有函数,不用编写代码。
19.“const t”和“t const”总是都被允许的,而且是等效的。
注意在常量指针(const pointer)中,“const”永远出现在“*”之后。
例如:
int *const p1 = q; //指向int 变量的常量指针
int const* p2 = q; //指向int 常量的指针
const int* p3 = q; //指向int 常量的指针
20.一个常见的微妙问题是,一个函数风格的宏并不遵守函数参数传递的规则。
21.没有引用数组,但可有指向数组的引用,并且保留数组的边界。
22.左值拥有保存值的位置,而右值则没有相关地址,只是简单值。
23.负索引是可以的,如p[-2]或(-2)[p]都是可以的(p必然不能是数组名),但必须保持不越界。
sum=p()+q()+r();不能保证p(),q(),r()调用的顺序。
逗号运算符","可以保证求值顺序.result= ( p(),q(),r() );是先求p(),q(),然后将r()赋给result
24.在if的条件里声明变量,且可在真假分支里面使用。
const int * const * p;p是个指针,指向常指针的,常指针指向一个常量int。
25.不能用空白初始化列表来规定默认的对象初始化.
class a;
a a(); //会警告,看起来像函数声明
a *p=new a(); //ok
a *p=new a;//ok
26.可以写一句只有数字的代码,如1234;(void)0;可以编译执行,相当于nop。
27.给函数指针赋值时可以对函数名取地址也可以不取,通过函数指针调用函数时可以用*也可不用。
28.static_cast可以转换基本数据类型(int->char)、void*和有类型指针、基类和派生类指针的转换(多重继承也行,它可重新计算偏移地址),但是不能转换如(int*->char*等)。
29.dynamic_cast主要用于执行"安全的向下转型",reinterpret_cast可执行任何转换,const_cast执行去 const转换。
30.将取地址运算符用到完全限定的类成员名(包括变量和函数),就能获得指向成员的地址。使用形式为"x::*"来声明一个指向类x成员的指针。注意声明成员 函数指针的时候不能像普通函数指针可以省略&或*的使用,但静态成员函数则除外,它和普通函数一致。成员指针和普通指针不一样,并非指向一个内存 区域,而是相当于一个结构的偏移量,当它和具体的对象结合就能指向特定对象的特定成员。
31.当把派生类对象赋给基类对象的时候会产生切割现象,即针对派生类的数据和行为将产生切割。
32.多维数组的第1个元素是数组而非普通类型。
33.在含有单参数构造函数的类中注意隐式转换。如string s="hello";
34.函数对象是重载函数调用运算符的类对象。
35.引用需要用左值进行初始化,但指向常量的引用除外,编译器将创建一个临时左值。如const int c=12;//ok 一般情况下编译器产生的临时对象的生命期在它所在的最大表达式范围内,但用临时对象初始化常量对象的引用时会让编译器保证临时对象和引用生命周期一样。
36.可以将基类的成员指针(变量或函数)安全的转换为指向派生类成员的指针,但反之则不安全。
37.函数参数的传递是采用拷贝构造函数而非赋值操作。对未初始化的对象赋值可能会出现意外,如类中含有未初始化指针。
38.声明但不定义私有的拷贝构造和赋值运算将会关闭类的复制操作。并且赋值运算、拷贝构造函数和析构函数不会被继承,对派生类重载赋值运算时需要调用基类的赋 值运算。
39.在构造函数里对成员变量初始化,比较好的方式是使用初始化列表。在初始化列表中静态成员和数组不能被初始化。
类的初始化顺序是虚拟基类的成员->非虚基类成员->类自身成员,和初始化列表的顺序无关。 含有虚拟基类和不含的类在成员布局上不一样,含有虚拟基类的类将虚拟基类的数据放在最后面。另外如b:virtual a,c:virtual a,d:b,c;(均是虚继承)则d的构造函数将对a初始化一次(即使在初始化列表没有显式初始化a),b,c将不再对a初始化。
所有静态数据(全局变量和静态存储变量)在使用前如未初始化其值都为0.全局变量可以存储在静态初始化区和未初始化区。
40.rvo返回值优化,是指在函数返回中执行拷贝初始化到直接初始化(使用带非对象参数的构造函数)的转换,nrv和rvo类似,但使用命名局部变量来保存返 回值。p160
41.重载、覆盖和隐藏的区别
重载的特征:在同一个类,函数名相同,参数不同,virtual可有可无。
覆盖的特征:在两个类(基类和派生类),函数名和参数都相同, 且必须有virtual关键字。
隐藏的特征:基类函数名和派生类函数名相同参数不同,且不管是否有关键字。或函数名、参数均相同,但基类 函数没有virtual(有的话就是覆盖)。
不能覆盖而只能隐藏基类非虚函数。
42.相同类型的所有对象公用一个虚函数表,在单继承下不管有多少个虚函数都只有一个虚函数表指针。覆盖就是在为派生类构造虚函数表时用派生类的函数地址替换基 类成员函数地址的过程。
43.使用常量类成员可能在对类对象赋值的时候产生问题。
44.有时候我们可能会看到 if (null == p) 这样古怪的格式。不是程序写错了,是程序员为了防止将 if (p == null) 误写成 if (p = null),而有意把p 和null 颠倒。