• 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++ 服务器端开发的同学,可以参考下。
    服务器端开发需看书箱

  • 相关阅读:
    broncho a1 hack指南-准备硬件
    嵌入式GUI ftk0.1发布
    ASP.net页面防刷新
    C#反射入门教程(转)
    万物生萨顶顶
    [转载内容]C# win程序中主窗体菜单的权限控制
    VB.net技巧更新(一)
    XML与dataset里相互读取操作
    操作EXCEL代码(c#完全版)
    [转载内容]动态创建菜单,menustrip,根据权限显示菜单,控制菜单可用,反射,给窗体传值,反射对象传值,public static Object CreateInstance ( Type type, params Object[] args )
  • 原文地址:https://www.cnblogs.com/qianggezhishen/p/7349503.html
Copyright © 2020-2023  润新知