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

  • 相关阅读:
    Mac终端配置,DIY你的Terminal (iTerm 2 + Oh My Zsh)
    Vue全局组件,Vue.use()引用注册,全局使用
    vue 打包npm run build报错Unexpected token: punc (() [static/js/0.739c7d2b56384f8c9c1d.js:7425,8]
    【转】搭建 vue2 vue-router2 webpack3 多入口工程
    【转】从零搭建 vue2 vue-router2 webpack3 工程
    web前后端开发不得不聊的安全问题
    10分钟熟练使用webpack
    vuejs之【router-link】大全(二)
    Vuejs之【内部指令】
    vuejs之【router-link】大全(一)
  • 原文地址:https://www.cnblogs.com/qianggezhishen/p/7349503.html
Copyright © 2011-2022 走看看