精华内容
下载资源
问答
  • linuxc
    万次阅读
    2020-08-30 15:48:26


    正文

    算数运算符:七种

    除(/),求余(%)

    关系运算符:六种

    逻辑运算符:三种

    与(&&) 或(||) 非(!)

    位操作运算符:六种

    与(&) 或(|) 非(~) 位异或(^) 左移(<

    更多相关内容
  • Linux c下整数大小比较

    千次阅读 2022-04-12 11:53:36
    一个Linux c下整数比较大小的一个小知识点


    1. demo

    今天分享一个Linux c下整数比较大小的一个小知识点,代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define INT_COMPARE(a, b)                \
            if(a > b){                       \
                printf( #a ">" #b "\n");     \
            }else if(a < b){                 \
                printf( #a "<" #b "\n");     \
            }else{                           \
                printf( #a "=" #b "\n");     \
            }                                
    
    
    int main()
    {
        //Case 1
        int a = -1;
        unsigned int b = 2;
        INT_COMPARE(a, b);
    
        //Case 2
        short c = -1;
        unsigned short d = 2;
        INT_COMPARE(c, d);
    
        //Case 3
        signed char e = -1;
        unsigned char f = 2;
        INT_COMPARE(e, f);
    
        //Case 4
        long g = -1;
        unsigned long h = 2;
        INT_COMPARE(g, h);
    
        return 0;
    }
    

    测试硬件条件:
    Intel X86_64
    ubuntu 20.04
    大家猜猜看,各个结果是什么?

    对于case1,大家应该在学校参加c语言校招面试题时,经常遇到这个题目吧,反正我当年是做过这个题:
    当 int 和 unsigned int 比较时 int 会被转化为 unsigned int ,-1的值是将会是0xFFFFFFFF。
    那我们简单的测试一下:

    #include <stdio.h>
    
    int main()
    {
        int a = -1;
        printf("a = %x\n", (unsigned int)a);
    
        return 0;
    }
    
    

    在这里插入图片描述
    0xFFFFFFFF是unsigned int的最大值,当然是 a >b;

    那么对于其它的下面几个情况呢,让我们先来了解c标准中的整数提升。

    2. 整数提升

    让我们来看看C标准的类型转化:
    C语言则允许在表达式中混合使用基本类型。在单个表达式中可以组合整数、浮点数,甚至是字符。当然,在这种情况下C编译器可能需要生成一些指令将这些操作数转换成相同的类型,使得硬件可以对表达式进行计算。

    当类型转换出现在表达式时,可以将任何等级低于int(如:short 和 char)和unsigned int的类型转换为int(只要该类型的所有值都可以用int类型表示)
    如有必要会被转换成unsigned int(如果short与int的大小相同,unsigned short就比int大,这种情况下,unsigned short会被转换成unsigned int),目前我们常用的x86_64和ARM体系架构(支持linux系统) int 都比 short 大,因此可以忽略。

    C99允许每个整数类型具有“整数转换等级”。
    下面按从最高级到最低级的顺序排列。
    (1)unsigned long long
    (2)long long
    (3)unsigned long
    (4)long
    (5)unsigned int
    (6)int
    short和char类型没有列出,是因为它们已经被升级到 int 或 unsigned int。

    类型转换时首先对两个操作数进行整数提升。如果这时两个操作数的类型相同,过程结束。否则,依次尝试下面的规则,一旦遇到可应用的规则就不再考虑别的规则:
    (1) 如果两个操作数都是有符号型或者都是无符号型,将整数转换等级较低的操作数转换为等级较高的操作数的类型;
    (2) 如果无符号操作数的等级高于或等于有符号操作数的等级,将有符号操作数转换为无符号操作数的类型。
    (3) 如果有符号操作数类型可以表示无符号操作数类型的所有值,将无符号操作数转换为有符号操作数的类型。
    (4) 否则,将两个操作数都转换为与有符号操作数的类型相对应的无符号类型。

    说了这么多,那么我们就来针对上面的case 2 ,3 ,4 来解答一下:
    case 2 , 3

    short c = -1;
    unsigned short d = 2;
      
    signed char e = -1;
    unsigned char f = 2;
    

    short c 和 unsigned short d 都被转化为int 类型,实际比较是 (int) -1 和 (int) 2 进行比较,因此 c < d。
    signed char e 和 unsigned char f 都被转化为int 类型,实际比较也是 (int) -1 和 (int) 2 进行比较,因此 e < f。

    这里为什么单独char单独加上signed,因为 C标准规定char 为 Implementation Defined。
    C标准表示char类型可以带符号也可以不带符号,由具体的编译器、处理器或其两者共同决定。
    大部分体系架构 char 默认是带符号的。但是ARM体系架构 char 是不带符号的。

    因此你使用了char类型,那么要保证在带符号和不带符号的情况下代码都没问题。如果不确定,请使用signed char 或 unsigned char明确表明它是哪个类型。

    case 4

    long g = -1;
    unsigned long h = 2;
    

    long g 和 unsigned long h 比较,long g 将被转化为 unsigned long ,因此和case 1情况一样,g > h。

    那么我们测试一次我们结果是否正确吧:
    可见结果正确。
    在这里插入图片描述

    3. 有符号数和无符号数之间的转化

    同样字长的有符号数和无符号强制转换的结果保持位值不变,只是改变了解释这些位的方式。
    因此C语言有条规则:处理同样字长的有符号数和无符号之间的相互转化,数值可能会变,但是位模式不变,即保存在内存中那个数值的二进制没有变化,只是解释的时候位代表的意义会不一样了。
    注意这里我标明了是同样字长的有符号数和无符号。

    4. linux内核中的 指针 和 unsigned long 有什么关系

    1.指针的来源
    方便引用一个内存地址。
    给定一个内存地址,CPU就可以取出该地址的数据。
    给定一个内存地址,CPU就可以写入该地址一个值。

    2.指针的定义:
    指针的本质其实也是一个数据类型,和char, short, int 等一样都属于c语言中的基本类型,所以大小也确定了(与它是什么类型无关),32位系统为4个字节,64为系统为8个字节。
    无论指针什么类型(大小以确定),它存放的都是一个地址,只不过这个地址存放不同数据类型而已。
    指针变量与其它变量(如int)相似,也有两个方面即:值 和 类型(所指向的数据类型)
    值:表示某个对象的地址(位置)。
    类型:表示那个地址(位置)上所存储对象的类型。

    备注:指针的强制类型转换不会改变真实的指针,只是告诉编译器以新的数据类型来看待被指向的数据。

    3.字长和数据类型
    在支持Linux的体系结构中,能够由机器一次完成处理的数据称之为字,指明了指针数据的 nominal size。虚拟地址是以这样的一个字来编码,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。即:对于一个字长位n的机器,虚拟地址的范围位 0 ~ 2n-1 ,程序最多访问2n个字节。

    处理器通用寄存器的大小和他的字长是相同的。long类型总是等于机器的字长,也等于指针的大小。
    但是long和int 大小没办法保证一样。比如:
    Linux支持的64位体系架构 long 8个字节,int 4个字节。
    Linux支持的32位体系架构 long 4个字节,int 4个字节
    因此不要假设 long 和 int 长度相等,也不要假设指针和int 长度相等。
    备注:上面只是讨论支持Linux的体系架构

    4.Linux内核为什么常用unsigned long来替代指针?
    因为指针也是一种基本类型,所以大小是确定的,32位系统下为4个字节,由于地址的值不能为负,所以指针的值的范围为 0 - (2^32-1),与unsigned long大小,值的范围一样。
    所以32位系统下指针的最大寻址范围为2^32-1,即4G(所以32位系统虚拟地址为0 - 4G)。
    64位系统下大小为8个字节,与unsigned long大小,值的范围一样。
    可见指针与unsigned long 大小,值的范围也一样。(但意义不一样,只是值一样)

    小结:指针与unsigned long 大小一样,值的范围也一样。
    (当linux内核只关心这个地址的值,用于去运算、查找、对比,而不是关心通过这个地址去访问内存,这个时候,内核经常用unsigned long来替代指针)。

    总结

    这篇文章主要描述了Linux c下整数大小比较,以及linux内核中的 指针 和 unsigned long有什么关系。

    参考资料

    c primer plus
    c 语言程序设计
    深入理解计算机系统
    Linux内核设计与实现
    Linux环境编程:从应用到内核
    为什么Linux内核常常用unsigned long来代替指针
    聊聊C语言和指针的本质

    展开全文
  • 001 - Linux C/C++ 开发环境搭建

    千次阅读 2021-06-03 16:46:13
    Linux C/C++ 开发环境搭建 文章目录Linux C/C++ 开发环境搭建引言编译调试工具项目构建工具集成开发环境(IDE)Qt CreatorVisual Studio CodeCLion 引言 Windows 下 C/C++ 开发可以直接用宇宙第一 IDE Visual Studio...

    Linux C/C++ 开发环境搭建

    引言

    Windows 下 C/C++ 开发可以直接用宇宙第一 IDE Visual Studio;但是 Linux 下就不能用了

    以 Ubuntu 为例搭建 Linux C/C++ 开发环境

    编译调试工具

    编译器

    sudo apt update
    sudo apt install gcc g++
    

    调试器

    sudo apt install gdb
    

    走两步

    来个经典的 HelloWorld

    C 版本

    #include<stdio.h>
    int main()
    {
       printf("Hello World From C!\n");
       return 0;
    }
    

    编译运行

    gcc hello.c -o hello_c
    ./hello_c
    

    C++ 版本

    #include<iostream>
    int main()
    {
        std::cout << "Hello World From CXX" << std::endl;
        return 0;
    }
    

    编译运行

    g++ hello.cpp -o hello_cpp
    ./hello_cpp
    

    项目构建工具

    sudo apt install make cmake
    

    Make

    make 是一个构建工具,它解释 Makefile 中的规则。在 Makefile 文件中描述了整个工程所有文件的编译顺序、编译规则。

    Makefile 有自己的书写格式、关键字、函数。而且在 Makefile 中可以使用系统 shell 提供的任何命令来完成想要的工作。但是 Makefile 的编写难度较高。

    CMake

    CMake是一个跨平台的构建工具,可以用简单的语句来描述所有平台的安装、编译过程。他能够输出各种各样的 Makefile 或者 project 文件,能测试编译器所支持的 C++ 特性。CMake 的组态档取名为 CMakeLists.txt

    Cmake 并不直接构建出最终的软件,而是产生标准的构建档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的构建方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和其他类似系统的区别之处。

    CMake 可以脱离 IDE 构建项目,目前大部分常用的 IDE 直接支持 CMake

    CMake介绍和简单使用

    《CMake 安装》

    《CMake 管理多项目》

    集成开发环境(IDE)

    Linux 下常用的 C/C++ IDE 还是比较多的;我这里主要介绍一下 qtcreator、vscode、clion;强烈推荐使用 CLion

    Qt Creator

    本文介绍单独安装

    与 Qt 一起安装请参考《Linux 安装 QT》

    下载

    https://download.qt.io/archive/qtcreator/

    01

    选择所需的版本下载即可;这里下载的是qt-creator-opensource-linux-x86_64-4.4.1.run

    安装

    chmod +x qt-creator-opensource-linux-x86_64-4.4.1.run
    ./qt-creator-opensource-linux-x86_64-4.4.1.run
    

    一直下一步就行

    02

    导入之前的CMake项目

    文件 -> 打开文件或项目 -> 选择 CMakeLists.txt

    03

    然后就可以编译运行了

    Visual Studio Code

    下载

    https://code.visualstudio.com/#alt-downloads

    04

    Ubuntu 当然是下载 deb

    安装

    安装 vs code

    sudo dpkg -i code_1.52.1-1608136922_amd64.deb
    

    安装插件

    • Chinese
    • CMake
    • CMake Tools
    • C/C++
    05

    导入之前的CMake项目

    文件 -> 打开文件夹 -> 选择 CMakeLists.txt 所在文件夹

    如下图,点击状态栏 Kit,选择合适的编译工具

    06

    CLion

    下载

    https://www.jetbrains.com/clion/download/#section=linux

    安装

    直接解压到需要安装的路径即可

    请支持正版 http://www.520xiazai.com/soft/jetbrains-2020-pojie.html

    创建桌面快捷方式;注意将 ${clion_install_path}替换为自己实际安装路径

    jetbrains-clion.desktop

    [Desktop Entry]
    Name=CLion
    Exec=${clion_install_path}/bin/clion.sh %f
    Icon=${clion_install_path}/bin/clion.svg
    Type=Application
    

    导入之前的CMake项目

    open -> 选择 CMakeLists.txt -> OK -> Open As Project

    07

    由于个人水平有限,文中若有不合理或不正确的地方欢迎指出改正

    若文中个人文章链接打不开,请在站内寻找同名文章

    文章可能更新不及时,请以个人博客处文章为准

    展开全文
  • Linux C程序设计王者归来 有详细的Linux学习步骤对于初学者或中级或高级都适用,希望爱好Linux学者下载学习。
  • Linux C/C++ 学习路线

    万次阅读 多人点赞 2019-07-04 20:41:56
    一、秋招 Linux C/C++ offer 情况 二、Linux C/C++ 方向的一些思考 三、计算机基础知识的梳理 四、C++ 方向的深入学习路线 五、项目 + 亮点 + 面试的一些思考 六、总结 前言 Linux C/C++ 从零基础到大神的学习路线,...

    一、秋招 Linux C/C++ offer 情况

    二、Linux C/C++ 方向的一些思考

    三、计算机基础知识的梳理

    四、C++ 方向的深入学习路线

    五、项目 + 亮点 + 面试的一些思考

    六、总结

    前言

    Linux C/C++ 从零基础到大神的学习路线,自己的真实学习路线,干货很多,建议收藏,认真阅读。
    
    在校期间,我一直走的都是 Linux C/C++ 学习路线,历经暑期实习、秋招决战、校招期间投的大部
    分岗位都是 Linux C/C++ 后台方向,对于这个方向,有着自己的理解。
    
    从接触 C++ 到我现在正式工作,大概有 2 年多的时间,对于这个方向的学习路线、以及学习编程的
    方法摸索出来了一些,看完本文,希望对于正在走 Linux C/C++ 路上的同学能有所帮助。
    

    一、秋招 Linux C/C++ offer 情况

    本人就读于双非院校、非科班本科学生,专业是偏硬件的(学校课程只有一门 C 语言与编程相关,
    其余的课程跟编程一点点的关系都没有),在校期间也没拿过什么大的奖项。
    
    计算机基础为零,大二上学期接触 C 语言,大二一年学了 C 语言和数据结构,大三在学校的实验
    室开始学习计算机基础和学习 C++ 方向,一路自学编程,始终相信自己,也是拿到了大厂 offer。
    

    秋招 offer 情况:

    腾讯 后台开发工程师(实习转正)
    百度 手百 feeds 流,软件研发工程师
    美团 后台开发 (C++ 方向面试)
    作业帮 后台开发工程师
    好未来 后台开发工程师
    迅雷 后台开发工程师
    盛大游戏 C++ 开发工程师
    
    2017 年暑期实习腾讯,2018 年初实习百度,校招拿了十几个 Linux C/C++ 方向的 offer,
    最终的选择也很玄学,去了自己想去的公司,从事自己喜欢的岗位,现在在编程的路上越
    走越远。
    

    二、Linux C/C++ 方向的一些思考

    1、

    对于方向的抉择,很多人都选择了 Java 或者 Python 方向,Java 或者 Python 方向确实学的人多,
    岗位需求很多,入门能比 Linux C/C++ 方向容易一些,但是往深了学,各有各的难度,先敲定了方
    向,再深入学习。
    
    Linux C/C++ 方向,国内真正掌握的人,其实是极少数,这个方向的学习人数也是相对比较少的,入
    门一般首选 C 语言或者 Python,C、C++ 在编程排行榜也是经久不衰的,排名靠前,如果喜欢,有兴
    趣,走这个方向是可以的。
    
    Linux C/C++ 方向,国内很多大公司都有招聘这个方向的岗位,BAT 都有,尤其腾讯,底层架构都是 
    C++ 写的,百度核心搜索很多模块也是 C++ 写的,阿里云也在招聘 C++ 方向的工程师,这个方向,
    学的不错的,根本不用担心找工作的问题,如果学的一般的,其实哪种语言就都比较难找了,毕竟都
    知道it行业是技术竞争,优胜劣汰。
    
    Linux C/C++ 的效率是比 Java、Python 快一些的,更偏向于底层,能直接操作内存,对于编程思维、
    逻辑能力的提升是有帮助的;其实学习这个方向,是有一点枯燥的,不像 Python 爬虫、Java、前端能
    做出一些有趣的东西,小程序开发出一些产品,都能很快用于实战,获得编程的乐趣,进一步刺激自己
    学习。
    
    C++ 方向没有那么多有趣的东西可以做,在很长的一段时间内,要靠自己的兴趣去坚持学习。
    

    2、

    我在大三的时候,用 C++ 写过五子棋、内存监控工具、压缩工具、以及实现一些比较复杂的数据结构,
    实现网络编程的并发模型;当你学习 Linux C/C++ 方向到一定程度的时候,你会找到这个方向的乐趣,
    跟其他方向完全不一样的乐趣。
    
    不过,前期真的很难,有一段时间极其痛苦,是要经过很长一段时间的学习,才能有一定的效果,如果对
    这个方向,真的没有啥兴趣,最好选择走前端、Java、Python 等是最好的选择。但是如果你已经是从业L-
    inux c/c++开发几年了,那就继续吧,技术提升没你想的那么难!
    
    Linux C/C++ 方向,入门稍微难一点,一旦选择了要走 C++ 方向的,在心态上面,要做好准备,一定不能
    有畏难心里,做好接触底层、复杂逻辑的分析、以及具备面向过程 + 面向对象的思想;就是退一步讲,我
    学习了 Linux C/C++ 方向,具备了编程思维和熟悉了 C++ 语言,以后去公司上班了,也能很快的上手 Jav-
    a、Python 等方向(我说的上手指的是语言基础很快的学习,要想深入,还得花大把的时间),这也是c/c++
    的优势所在。
    
    按照目前身边人找工作的情况,普遍来说,Java、Python、前端、数据分析、测试方向都要比 C++ 好找一些
    ,更容易找到工作,虽然我是走的 Linux C/C++ 方向,但是对于对底层没有兴趣,对 C 语言没有兴趣的人,
    不建议走这个方向。
    

    3、

    我一路走过来,真的很痛苦,在校期间都想过放弃这个方向,曾经想学个 Java 可能会好一些(身边学习
     Java 的人还是挺多的),每当快放弃的时候,又想到都学了这么长时间了,再坚持坚持,就这样一路走
     过来了;我是觉得自己真的挺幸运的,有时候,真的不一定非要头铁 C++ 方向,要看整个市场行情,顺
     势而为,选择好方向,在深入!
    
    对于 Java 还是 C++ 方向的选择,没有哪个方向一定好找工作,没有哪个方向一定工资待遇高,互联网这
    行,尤其是靠技术说话的,这些都取决于你自身的技术能力。
    
    选择走 C++ 方向的,一定要走 Linux C/C++,面向网络编程,学会 Linux 至关重要!
    
    大厂特别喜欢考察计算机基础知识,对于基础掌握的如何,在很大程度上将决定你是否能进入大厂,一定
    要重视基础知识的学习;秋招准备:基础 + 算法 + 项目,加上自己的方向(C++、Java、Python、前端等
    ),其中每个环节都得准备到位,才能最大程度上拿到大厂 offer,意识很重要,有了意识,再看具体的学
    习路线。
    

    三、计算机基础知识的梳理

    计算机基础:数据结构 + 算法、操作系统 + 计算机网络、数据库 + Linux、C 语言
    
    工作必备工具:Linux + Git + Sql
    
    不管你是学习什么方向的,Java、Python、前端、测试、运维等等,这些基础都不
    能忽视,有时间的话,一定要打扎实了,有了扎实的功底,在这行才能走的更远更快!
    

    1、常用数据结构与算法:

    平衡二叉树
    红黑树
    B-树
    KMP算法
    栈/队列
    布隆过滤器
    靠前的数据结构一定要非常的熟练,对于树、图复杂的数据结构,最起码的掌握定义、原理、部分实现,我就记得:
    我在面试的时候,手写过红黑树的旋转算法,对于图的一些最短路径算法也是当面手写过,头条的面试基本上就是全
    程算法,难度不低。
    
    冒泡
    插入
    选择
    快排
    希尔
    堆排
    归并
    桶排
    基数
    计数
    字符串常见算法
    数组常见算法
    递归算法
    
    一定要保证掌握基础算法 + 常见算法。
    
    在算法方面的要求上,C++ 方向对于算法的要求明显更高,算法功底一定要扎实!
    
    2、操作系统:很常问的一些技术点,堆和栈、内存分区、虚拟内存 + 物理内存、
    进程 + 线程 + 协程、死锁、分片机制、五大组件、中断和系统调用 、同步和异步
    等等问题。
    
    对于操作系统的理解,对于这些基础的计算机知识的掌握是必须深入学习,要花很
    大的功夫去理解清楚这些,工作中,对于真实线上系统的稳定性、对于底层技术的
    理解是有帮助的,操作系统是面试中常见问题之一。
    
    3、计算机网络:OSI 七层模型和 TCP/IP 四层体系结构,TCP 三次握手与四次挥手、
    常见的网络协议(网桥、ARP、IP、ICMP、TCP、UDP、DNS、DHCP)、TCP 粘包、
    流量控制 + 拥塞控制、数字签名原理、http + https,http 的状态码,https 的安全机制,
    网络安全、输入 www.baidu.com 背后发生了什么等等问题。
    
    其实工作中,有时就会出现,网络抖动、网络延迟,网络拥塞的情况,此时就需要具备一
    定的网络知识,及时的解决问题,计算机网络是面试中常见问题之一。
    
    4、数据库:数据库作为存储数据的地方,其不同的数据结构、与应用的场景不一样,采取
    不同的数据库,对于 mysql 基本操作、写 sql 的优化、表的设计、索引优化、如何更快的查
    询、底层数据结构的设计原理等等问题。
    
    常见的设计模式、主要是学习设计模式的思想、单例模式是必须写代码实现的,其他设计模
    式理解思想,作为了解内容,后台开发工程师与 mysql 打交道挺多的,也是面试常见问题之一。
    
    5、Linux系统
    
    Linux是所有学c/c++同学都绕不开的坎,我整理了Linux方面需要掌握的技术点,不知道怎么学习的同学可以借鉴一下。
    
    系统命令工具
    
    进程间通信设施状态 ipcs
    虚拟内存统计工具 vmstat
    Linux系统运行时长 uptime
    CPU平均负载和磁盘活动 iostat
    监控,收集和汇报系统活动 sar
    监控多处理器使用情况 mpstat
    监控进程的内存使用情况 pmap
    进程监控工具 atop
    控制台的流量监控工具 vnstat
    系统进程状态 ps
    详细网络流量分析 tcpdump
    内存使用状态 free
    系统管理员调优和基准测量工具 nmon
    密切关注Linux系统 glances
    查看系统调用 strace
    网络参数工具
    
    Linux网络统计监控工具 netstat
    显示和修改网络接口控制器 ethtool
    网络数据包分析利刃 tcpdump
    监控并帮助你调试网络 bmon
    获取实时网络统计信息 iptraf
    显示主机上网络接口带宽使用情况 iftop
    网络流量和 ip 流量分布 ntopng
    
    日志监控工具
    
    实时网络日志分析器 GoAccess
    
    多窗口之下日志监控 MultiTail
    日志分析系统 LogWatch/Swatch
    参数监控工具
    
    监控apache网络服务器整体性能 apachetop
    ftp 服务器基本信息 ftptop
    IO监控 iotop
    电量消耗和电源管理 powertop
    监控 mysql 的线程和性能 mytop
    系统运行参数分析 htop/top/atop
    工作基本上离不开 Linux,也是面试常见问题之一。
    

    6、C 语言

    C 语言是我学习编程的第一门语言,是面向过程的语言,对于 C 语言中的数组、函数、指针、
    内存对其模式、大小端问题、野指针、内存泄露、static、register、define、typedef、struct、
    union 等一些关键字的考察。
    
    我一直把 C 语言当做基础,不是方向,在 C 语言这里学到了很多编程的思想,对于 Linux C/
    C++ 方向,C 语言是基本功,也是必定考察的地方,当初我也是因为特别喜欢 C,走上了 C++
     的道路。所以c语言其实对于所有语言的编程者来说都是值得学习和借鉴的。
    
    C 语言可以学,C 语言是基础,不是方向,但是选择走 C++ 就是要选择的方向了,要谨慎选择!
    
    对于上面的每一个模块,其实都能单拿出来,写的更为具体一些,但是个人比较懒,就写出大纲
    来给大家借鉴一些吧。
    

    四、C/C++ Linux方向的深入学习路线

    1、C++ 基础
    
    C++ 是面向对象的语言,一定要理解清楚面向对象的思想,先把 C++ 的基础知识点打牢,刚从面向过程中转变过来,一定一定要适应面向对象的写法。
    
    在学习面向对象的时候,也要考虑如何用面向过程去实现面向对象(其实也就是结构体中有一个成员是函数指针),对于 C++ 的基础知识,我简单罗列如下:
    
    1、const的用法
    
    2、引用的用法
    
    3、#define用法
    
    4、构造函数
    
    5、析构函数
    
    6、拷贝构造
    
    7、new、delete 和 malloc、free 的区别
    
    8、访问限定符 public、private、protected
    
    9、深拷贝和浅拷贝
    
    10、友元函数
    
    11、static
    
    12、内联函数
    
    13、继承、虚继承
    
    14、钻石继承问题
    
    15、同名覆盖问题
    
    16、虚函数表
    
    17、虚指针
    
    18、虚函数、纯虚函数
    
    19、接口
    
    20、多态
    
    21、重写
    
    22、重载
    
    23、函数重载
    
    24、运算符重载
    
    25、流类库和文件
    
    2、C++ 进阶
    
    函数模板、类模板,C++ 中对于异常的处理,对于继承和多态底层的理解,对于 virtual 底层的理解等。
    
    对于 C++ 中 boost 库八大智能指针的掌握与理解,其核心是理解并且剖析过相应的源码, <scoped_ptr/shared_ptr/weak_ptr>
     这三个是最核心的智能指针,理解清楚智能指针的本质是,内存的申请与释放全部交给了对象管理,以避免人为疏忽,造成内
     存泄露。
    
    何为c/c++Linux方向的深入学习,就是在掌握上述前提技术基础之上的进阶学习。
    
    如果对上述技术觉得自己还有所不足的同学,推荐大家一个免费学习课程
    
    链接:https://ke.qq.com/course/417774?flowToken=1010788
    
    主要讲的就是c/cLinux方向的技术分享
    
    针对上面,从基础到 C++,我列出来的都是非常重要的知识点,当然了,也不可能全部列到,有很多技术问题,很多细节,
    我可能没有考虑到,没有写到,这个还需要在学习的时候,认真看看视频、看看书,把相应的知识都学到位,基础打扎实一些。
    

    五、项目 + 亮点 + 面试的一些思考

    1、
    
    项目:对于暑期找实习,或者秋招找工作,除了基础跟方向,接下来就是项目的准备了,对于 C++ 方向,很多人不
    知道要准备什么项目?其实项目不在于有多大、有多难,在于项目是否是自己真正做的,自己是否完全消化了,项目
    中是否有什么亮点?
    
    C++ 方面的实战项目,以数据结构 + 网络编程 + 实用工具为主;数据结构方面:可以实现红黑树、B+ 树,又或者用
    图解决什么实际问题,这些复杂的数据结构实现可以作为项目的。
    
    1.对于项目这块,面试的常见问题有:
    
    a、做这个项目的背景是什么?
    
    b、项目中具体有哪些模块,都是怎么实现的?
    
    c、项目中你的技术亮点有哪些?
    
    d、项目中有什么难点,你是怎么解决的?
    
    e、要是重新做这个项目,你这个项目有什么不足,你会进行哪些改进?
    
    2.亮点:找实习或者找工作,必须的有自己的亮点,我觉得在那么多基础知识中,数据结构 + C 语言就是我的亮点之一,
    只要问到关于这 2 个方面的问题,尽量回答全面清楚一些,还有就是自己对于 Linux 内核数据结构的剖析也是亮点之一,
    总之,一定要找到自己的亮点,与别人不一样的地方,这个就是面试的加分项。
    
    搜索引擎的底层原理、通讯的底层原理,对于这些底层的实现,有兴趣的可以了解看看,其实也没那么难,要是在面试
    的时候,能回答出对这些技术的了解,以及自己的一些思考,那就是加分项了。
    
    3、
    
    面试:春招实习、秋招决战,我不知道投了多少家公司,也不知道面试了多少场,基本上都是海投的,有了面试机会,
    就要抓住每一次,面试完多做总结、归纳、反思;其实面试很玄学,有自身实力的原因,也有运气的成分,相信自己,
    好好表现就好。
    
    对于面试,才开始我也是比较紧张的,但是当你面的多了,慢慢的就会调整过来,就会好很多,我现在把面试当做是
    ,这是一次近距离和优秀的人交流的机会,是一次学习进步的机会,有了这种心态,其实就好的多了。
    
    对于面试我也自我总结了一些面试题及回答经验,分析出题人出题的思路在哪里,毕竟我们不是要去死记面试题,重要
    是面试官考题的技术点在哪里?把技术点吃透,之后再问到类似的问题就不会慌了。
    

    六、总结

    推荐一些好的视频网站:b 站、牛客网、极客时间、51cto、腾讯课堂,网易云课程,基本上你所需要的视频资料都可以去找,实在不行上淘宝看看,我在b站也会日常更新,但是目前还不是很多。
    
    https://space.bilibili.com/437693511
    
    有兴趣的朋友可以看看
    
    我走的是 Linux C/C++ 路线,秋招投递这个岗位也很多,对于简历,面试方面觉得不好不足可以联系我,给你一定的指导吧,这个看时间。
    
    对于想走 Linux C/C++ 方向的同学,基本上按照上面的路线走,多实战操作。
    
    展开全文
  • Linux C : TCP/IP 和 网络编程

    千次阅读 2021-11-18 21:41:05
    创建socket; 绑定socket和端口号; 监听端口号; (UDP省略) 接收来自客户端的连接请求;(UDP省略) 从socket中读取字符; 发送消息回客户机。 客户端套接字编程步骤如下 创建socket; 连接指定计算机的端口;......
  • linux c 按行读取文件

    千次阅读 2020-10-06 19:25:25
    c中没有getline()这个函数,该函数只存在于c++中。 有些人说用gets,但是这个函数是不安全的,gets不知道字符串的大小,容易造成溢出的问题。 解决方案,使用fgets函数 其关键在于在读出n-1个字符之前,如遇到了...
  • linux c 延迟函数 sleep usleep 使用区别

    千次阅读 2020-10-06 19:36:13
    目录 函数 sleep 函数 usleep 区别 函数 sleep 头文件: #include <unistd.h> // 在gcc编译器中,使用的头文件因gcc版本的不同而不同 功 能: 执行挂起指定的秒数 语 法: unsigned sleep(unsigned ...
  • LinuxC编程实战电子书

    千次下载 热门讨论 2009-06-29 14:17:56
    本书共计4个压缩包(linuxC编程实战+.part1.rar,linuxC编程实战+.part2.rar,linuxC编程实战 +.part1.rar,Linux+C编程实战源代码.rar) 内容简介  《LinuxC编程实战》系统地介绍了在Linux平台下用C语言进行程序...
  • Windows下开发Linux C/C++项目

    千次阅读 2019-06-04 17:50:12
    一、Windows与Linux下皆可以编辑、编译、调试、运行 这是常规方法,以前我做的几个项目都是在Windows下使用Visual Studio进行编辑、编译、调试、运行,Windows下测试没什么问题了,然后在Linux下再编译、部署、运行...
  • Linux C程序获取本机可用IP地址 && Linux C程序获取system()函数的标准输出到char *缓冲中 方法一:使用pipe匿名管道 思路:fork一个子进程,并创建一个匿名管道,在子进程中执行shell命令,并将其标准输出...
  • Linux C读取文件内容

    千次阅读 2018-03-26 09:54:12
    #include &lt;stdio.h&gt;#include &lt;unistd.h&gt;#include &lt;sys/types.h&gt;#include &lt;sys/stat.h&...int read_file( char *filename, int *len, char *...
  • linux内核里面用一个名为jiffes的常量来计算时间戳。应用层有time、getdaytime等函数。今天需要在应用程序获取系统的启动时间,百度了一下,通过sysinfo中的uptime可以计算出系统的启动时间。 2、sysinfo结构 ...
  • Linux C中的open函数

    万次阅读 2019-06-13 11:31:40
    open函数属于Linux中系统IO,用于“打开”文件,代码打开一个文件意味着获得了这个文件的访问句柄。 int fd = open(参数1,参数2,参数3); int fd = open(const char *pathname,int flags,mode_t mode); 1....
  • Linux C函数手册.chm (chm版本)

    千次阅读 2020-04-05 11:21:18
    链接:https://pan.baidu.com/s/1fhA8_O5uggug9StAKSNCbQ 提取码:rfi2
  • linux C获取时间戳(精确到毫秒)

    万次阅读 2020-02-18 15:26:48
    最近有个需求,需要数据库程序统计一次sql查询的过程耗时多久,于是乎就需要程序获取当前时间戳,由于这个时间非常短,因此需要精确的毫秒,...这段程序,不需要任何额外的库,放到linux上gcc编译运行即可,非常好用~
  • Linux C高阶(7)异步处理框架C实现

    千次阅读 2019-12-13 17:24:48
    专注于嵌入式linux开发。问题或建议,请发邮件至hjhvictory@163.com。 更新:2019/12/13 内容目录(支持跳转) 引子数据 结构和接口实现 反思 引子 今天跟大家分享一个我在实际工作中运用得最多的框架:异步...
  • 六款常用的linux C/C++ IDE

    千次阅读 2019-11-01 11:11:30
    Linux 、Mac OS X 以及 Solaris;它易于安装且非常方便使用。 项目主页: vc mcv">http://www.netbeans.org/ #安装: sudo apt-get install netbeans 三、Code::Blocks Code::Blocks是一个开源、...
  • linux c remove 删除文件或目录函数

    千次阅读 2019-08-09 13:47:39
    头文件:#include <stdio.h> remove()函数用于删除指定的文件,其原型如下: int remove(char * filename); 【参数】filename为要删除的文件名,可以为一目录。如果参数filename 为一文件,则调用unlink()...
  • linux c 休眠函数sleep usleep

    千次阅读 2018-07-25 09:33:18
    需要包含头文件: #include &lt;sys/wait.h&gt; 举例: sleep(1); 休眠一秒 usleep(1000); 休眠一毫秒 usleep(1000*1000); 休眠一秒
  • Linux C API 参考手册

    千次阅读 2017-12-25 10:36:30
    https://www.gitbook.com/book/wizardforcel/linux-c-api-ref/details
  • Linux C 回调(callback)函数

    千次阅读 2019-06-13 15:02:20
    main.c实现callback函数do_notify(),将函数指针通过set_callabck()传递 # include # include # include # include # include # include "callback.h" void do_notify ( int ...
  • linux c产生随机数rand(),srand()

    万次阅读 2017-11-29 13:31:46
    在C语言中,rand()函数可以用来产生随机数,但是这不是...但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是void srand( int
  • 专注于嵌入式linux开发。问题或建议,请发邮件至hjhvictory@163.com。 更新日期:2020/1/15,转载请注明出处。 愿你有所收获… 图 二进制人生公众号 内容目录 前言用libghttp实现http get请求用libghttp实现...
  • linux c使用system调用shell脚本

    千次阅读 2017-08-05 12:48:47
    linux下man system可以看到返回值说明: 1.如果返回值等于-1就是system函数执行失败,准确的说是fork创建子进程失败。 2.shell执行最后一条语句的状态值放在返回值的低8位,使用WEXITSTATUS宏可以获得状态值。 3....
  • linux c网络编程用 htonl()函数

    千次阅读 2020-12-09 17:53:21
    htonl就是把本机字节顺序转化为网络字节顺序 h---host 本地主机 to 就是to 了 ...l 是 unsigned long 所谓网络字节顺序(大尾顺序)就是指一个数在内存中存储的时候“高对低,低对高”(即一个数的高位字节存放于低...
  • Linux C/C++实现https post/get请求

    千次阅读 2019-02-28 21:13:35
    Linux C/C++要实现https访问借助于libcurl工具,如果是实现自定义SSL证书通信校验的,可以通过C调用openssl来实现,也可以通过libcurl来。记得linux上提前安装好openssl库。 1.编译安装libcurl curl库的代码下载...
  • linux c printf 不能输出

    千次阅读 2018-12-20 20:09:02
    原因: 输出缓冲区的问题. unix上标准输入输出都是带有缓存的,一般...ANSI C中定义换行符'\n'可以认为是行刷新标志。所以,printf函数没有带'\n'是不会自动刷新输出流,直至缓存被填满。 解决方案: 方案1、在p...
  • linux C/C++常用开发工具汇总

    千次阅读 2018-10-30 10:15:20
    Windows/Linux 是   代码格式 AStyle http://astyle.sourceforge.net/ Windows 否   代码帮助 Doxygen http://www.doxygen.nl/ Windows/Linux 否...
  • Linux C中main函数中的参数argc和argv

    千次阅读 2018-09-28 14:03:36
    Linux C中main函数中的参数argc和argv 1、源码       2、运行结果    ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,584,041
精华内容 1,033,616
关键字:

linuxc

友情链接: EI-Gamal.zip