LINUX 精通 1——2.1.1 网络io与io多路复用select/poll/epoll

LINUX 精通 1

day12 20240509

算法刷题: 2道高精度 耗时 107min

课程补20240430 耗时:99 min

day 13 20240512 耗时:200min

课程链接地址

前言

  1. 工作5-10年 够用

  2. 费曼:不要直接抄,自己写;不要一个截图

    总之自己总结一个心得,以后回来还能更新不断

    实事求是骗不了自己的心吧,这个技术还是比较纯粹,让我找回了从前学习的感觉, 比科研这个乌烟瘴气的东西好多了

    与阿里云合作了,>60篇,有专家博主的认证

    即使以后工作还能交流

  3. 学完了:

    简历面试前给老师看,可以了投

    问老师能拿到多少薪资,作为参考

    offer选择

零声linux c/c++如何学

  1. 切记:不要2倍速看, 每天看一点点,养成习惯,慢就是快

    😆 和拉小提琴的老师说的话一摸一样,这才是真正学一样东西的规律,而不是像现在科研环境,都被赶鸭子上轿,被折磨的非要搞出划时代的东西,搞笑呢,那不怪有造假 每天一点点不会磨灭对一件事情的热情,反而越来越想要做,会上瘾尤其是一旦有正向反馈以后 就像看历史讲座一样,我喜欢历史

  2. 课程能不能写到简历

    1. 项目做到上线

    2. 如何写?

      1. 名字自行命名 不要写课程里的一模一样的

        比如:图床 (大量的cv存图)用到这个

        用课上的技术,解决现实的具体问题

        but我做轨迹预测貌似没啥关系, 总之就可以搞一个变种,在课程项目的外面包一层壳, 问gpt

        1. 存储车辆轨迹数据:将每辆车的历史轨迹数据以键值对的形式存储在KV存储中。每个键可以是车辆ID或其他唯一标识符,而值则是该车辆的历史轨迹数据。
        2. 查询相关上下文信息:除了轨迹数据外,还可以将与轨迹预测有关的上下文信息存储在KV存储中。这些上下文信息可以包括道路状况、天气情况、交通流量等。通过相应的键来查询特定上下文信息。
        3. 轨迹预测模型训练:使用存储在KV存储中的历史轨迹数据和相关上下文信息作为训练集,构建轨迹预测模型。模型可以根据当前车辆状态和环境条件,预测出未来的行驶路径。
        4. 实时轨迹预测:当有新的实时输入(例如传感器数据)时,将其与相关的上下文信息一起查询,并输入到训练好的模型中进行实时预测。根据预测结果,可以调整车辆的行驶策略和决策。
        5. 数据更新和删除:当有新的轨迹数据生成或某些数据过期时,需要及时将其更新或从KV存储中删除,以保持存储数据的准确性和实时性。
  3. 简历

    1. 最多3个,2-3个项目够了

    2. 语言,语法本身不是重点,重点是用技术解决具体问题,什么问题用什么合适的语言

      为了应付面试可以看八股C++,从项目出发:比如项目功能里用了什么vector什么特性,虚表怎么继承,说自己理解,别全背,是用八股来提取自己项目的重点

    3. 参照大纲写你熟练 掌握 了解技术点

    4. 然后要在业务项目里 细节写你的那些功能用到了这些技术点。光写一堆技术点,你没实现过没用

      没技术点只有业务场景,就是产品经理

      只有技术没业务,没法解决什么问题

  4. 怎么看 好多啊!

    第一遍看好多好多,多看几遍+笔记整理,就这些东西+提取细节自己薄弱的地方,跟以前上学一样

    1. 第一章:先不用看

      什么时候看:因为后面工程里覆盖了这里的知识点

      因为有的知识点在压根无code,or不够,看了也没用,比如设计模式,git使用,后面都用到了,再回头看

      理论 老师喜欢用source insight, gdb调比较笨重,vscode可以。 书上不是用于开发,是原理,强调逻辑定义等。 开发是工业界,落地

      1. 红黑树:能用在哪里,三种? 作业
        1. 数据库系统:许多数据库系统使用红黑树来实现索引结构,如B+树。红黑树提供了快速的插入、删除和查找操作,并保持数据有序。
        2. C++ STL中的map和set容器:STL(标准模板库)中的map和set容器通常基于红黑树实现。这些容器支持高效的查找操作,并保持元素按照键值有序。
        3. 路由表:网络路由器通常使用红黑树来存储路由表信息。通过使用红黑树,可以高效地进行IP地址匹配以确定数据包的最佳转发路径。
        4. 计算机图形学:在计算机图形学中,红黑树可用于空间分区(如二维范围查询)和光线追踪等算法中。
        5. 任务调度器:操作系统中的任务调度器可以使用红黑树来管理任务队列,以便高效地选择下一个要执行的任务。

      开发 2-5

    2. 第二章:网络开发

      要做笔记(犯困走神的时候), 就是写技术博客,以后再次总结

      费曼plan,重在参与嘛,很不错,督促自己,就想去学呀

      细节+模棱两可的问题问老师, 发截图给老师

      以后9.1 kv存储 自行命名写简历

    3. 第三章:基础组件

      可以用api调,轮子:线程池,日志等,类似英语的基础语法,必须掌握

      看完混沌,不知道怎么用,只是自己可以实现

      1. 对于在职 拆解公司的项目:反推出哪些模块用了这些功能,面试可以说出来,即使轮子不需要你写
      2. 对于在校:9.5 魔兽世界, 连的不是魔兽server 是零声的server
    4. 第四章 中间件

      开起来就是一个线程,不是api 用网络和它交互

      每种掌握一个就ok了

      看9.2 图床 存我喜欢的东西——小鸟各种小鸟,还有风景,还有有意思的图

    5. 第五章:framework开源框架

      自选3-4个 行业相关的,其他选看

      5.1游戏的 skynet

      9.3 即时通讯 是一个万金油

      使用场景有什么:和其他人聊天, 比如boss聊天;游戏聊天区

      可以自己开发一个上线,**加自己的巧思——树洞,心灵树洞?**随机匹配陌生人聊天? 无心理负担聊天

      运维——部署、测试、性能分析 6-8

    6. 第六章 云原生

    7. 第七章 性能分析

    8. **第八章 分布式架构 **

      多台

第1章 2.1.1 网络io与io多路复用select/poll/epoll

这个在入门课里讲过啊,but我云里雾里的第8节

有的地方可以快进,大部分开1.25正好,1.5也行稍微有点快 脑子来不及反应

引入

网络应用,底层都是网络

  1. 使用微信,发送文字,视频,如何通过网络IO实现
  2. 使用抖音,视频资源如何到达手机的app上
  3. 使用github,gitlab.0voice.com上,git clone为什么能到本地
  4. 为什么共享单车扫了以后就能开锁
  5. 为什么能通过手机远程操作你家的空调

有意思啊,能解决实际需求

具体

client通过网络连接server,类似水管,但是具体内容不限的

网络是连接client和server的fd(file descriptor) :在计算机编程中,socketfd是指套接字描述符(socket file descriptor)。套接字描述符是一个整数值,用于标识操作系统内核中打开的套接字(socket)对象。它可以用来进行对网络通信的读写操作以及其他相关的操作。通过使用套接字描述符,程序可以与网络上的其他主机进行通信。

fd对应的userinfo可以改

在/share下
mkdir 20404	
cd 20404	
mkdir 2.1.1-network-io
touch networkio.c

或者直接在本地ftp里操作

开发环境搭建:
  1. 编写代码:代码编辑器(记事本也行),老师用source insight太卡了,我喜欢用vscode而且里面可以直接命令行调试,不用再额外开一个xshell
  2. 编译:linux下gcc/g++
  3. 运行:Ubuntu
  4. 终端工具ssh:xshell,putty,crt,mobaxterm,vscode里
  5. linux文件与windows映射,samba在装linux时候自带的,回去自己看入门课程的第一节笔记
编写:
配置
  1. linux在应用层里网络通信的实现,不论什么语言实现,底层都是socket无其他方法

  2. 老师敲代码为什么有提示:因为加载了内核源码 01:27:29处

    1. soureinsight里新建project然后synchronize files

    2. vscode成功啦啦啦啦啦

      这个include不要自己找,代码里放在问题上,点快速修复可以看到含头文件的路径复制过去

      ctrl+shift+p——>c++配置json
      "includePath": [
          "${workspaceFolder}/**",
          "/usr/include/**"
      ],
      

      VSCODE中C/C++ 自动提示、补全 配置_vscode c语言代码提示-优快云博客

      【c++代码提示】VScode c++ 代码自动补全/智能提示设置_vscode c++ 提示-优快云博客

code
  1. // 创建socket
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    
  2. // 绑定本地端口
    struct sockaddr_in servaddr;
    servaddr.sin_family = AF_INET; 
    servaddr.sin_addr.s.addr = htons(INADDR_ANY); // 默认0.0.0.0 绑本地地址;htons转成网络字节序
    

    本地网卡

    ifconfig
    
    ens33     Link encap:Ethernet  HWaddr 00:0c:29:31:b3:43  
              inet addr:192.168.243.128  Bcast:192.168.243.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe31:b343/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:353041 errors:0 dropped:0 overruns:0 frame:0
              TX packets:223361 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:238434200 (238.4 MB)  TX bytes:81289772 (81.2 MB)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:298113 errors:0 dropped:0 overruns:0 frame:0
              TX packets:298113 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1 
              RX bytes:57946571 (57.9 MB)  TX bytes:579465
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值