wifi 万能钥匙面试题目

1 . 使用linux c++,实现一个client和server,要求对功能做一些简单的封装,设计成几个简单的类,使用Makefile进行依赖管理;
2 . client使用连接池技术管理与服务器的通信,主线程间隔1s从连接池中取到一个连接,发送到server端,请求的格式为json,其中只有一个key为id;
3 . server使用epoll+多线程进行设计,工作线程取到client的请求后,响应一段protobuf格式的内容,形如:value:xxx,其中,xxx的值为id+1;
4 . client读到响应后,将响应的内容反序列化,并打印到日志文件,日志格式自定义(日志库可以使用开源的,如果没用过的话,可以网上了解);
5 . client和server相关的配置通过配置文件进行设计,配置文件可以是纯文本形式,也可以是json格式。


通过这道题目可以很好的训练自己的基于Linux的C++服务器编程功底,本人因为是嵌入式出身,但一直想转型互联网的Linux C++服务器方向,因为没有相关经验,所以当时面试官先拿了这道题来考考自己的快速学习能力,如果你也想试一试自己的水平,不防可以试一试。


本人花了一天的时间写出了程序的初稿,给出了完成实现,具体是研究了该小项目需要利用的相关技术(比如:socket多线程编程,socket连接池,epoll机制,Json序列化及反序列化,protobuf序列化与反序列化,日志库等)。由于时间仓促,写出来后,面试官说还是有些小问题,我今天就share我的代码 github上的socket编程小项目,让大家一起来看看,希望能与大家共同进步,也希望大牛们能提出自己的见解,给出自己的完整实现。
因为之前很少接触这块东西,中途碰到了许多搭建环境及配开源工具的问题,本人用到了如下的开源工具:

  1. protobuf (google的一种高效且极具兼容性的二进制数据传输、交换格式)
  2. jsoncpp (json 序列化及反序列化的C++工具,当时我还不知道什么是(反)序列化)
  3. log4cplus (日志比较全面的C++开源工具)
    需要先安装这些工具,具体安装过程可以参见其他网上,这里就是jsoncpp安装稍需注意,请参见jsoncpp安装方法

现在我列下自己的代码分布情况,源码可以先去我的github上下载。该小项目,总共分为客户端(ClientMain.cpp, ClientSocket.cpp, ConnectionPool.cpp)+服务器端(ServerMain.cpp, ServerSocket.cpp),其中 ClientSocket及ServerSocket皆继承Socket.cpp,代码风格不是很好,朋友们也可以给出自己的建议。

我的运行结果如下:
这里写图片描述


我说说做该小项目的几点感受:

  1. 发现互联网的新技术很多很新,是真的很能锻炼人。
  2. 如果可以重来,我当时应该不会选择传统行业,工作后在转型会比较痛苦。
  3. 自己是嵌入式出身,如果想转互联网,很多之前学的东西感觉都没什么大的用处,有一种抛弃一切,重新开始的感觉。
  4. 平时有时间可以多关注互联网技术,特别是些开源的技术。

最后,我附上一个连接,如果有想转型Linux C++ 服务器端开发的同学,可以参考下。
服务器端开发需看书箱

转载于:https://www.cnblogs.com/qianggezhishen/p/7349503.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值