【Linux学习工具篇】之vim编辑器和gcc编译器

在这里插入图片描述

在这里插入图片描述

📃博客主页: 小镇敲码人
💚代码仓库,欢迎访问
🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏
🌏 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧月,独傲天下百坚强。 男儿应有龙腾志,盖世一意转洪荒。 莫使此生无痕度,终归人间一捧黄。🍎🍎🍎
❤️ 什么?你问我答案,少年你看,下一个十年又来了 💞 💞 💞


【Linux学习工具篇】之vim和gcc

  • vim
    • vim的安装
    • vim的三种模式
      • 正常模式
      • 底行模式
      • 插入模式
    • vim的配置
    • 给普通用户添加sudo
  • Linux编译器gcc与g++
    • gcc完成翻译的过程
      • 编译器和语言的自举过程
      • 预处理阶段
      • 编译阶段
      • 汇编阶段
      • 链接阶段
      • 对动静态库的理解
        • 动态库
        • 静态库
        • 动静态库的比较
      • 常见的三种目标文件
      • include文件和库文件
      • 动态链接和静态链接

前言:上篇博客我们介绍了apt镜像源文件的配置以及apt的使用,今天这篇博客让我们来学习Linux上的编辑器vim和编译器gcc/g++。

vim

vim是一种Linux上常见的多模式编辑器。它是vi的升级版,兼容所有vi的操作。增加了一些新特性,如代码补全、编译及错误跳转

vim的安装

使用apt install -y vim可以直接在Linux下安装vim,但是注意需要root权限或者sudo

vim的三种模式

vim不仅仅只有三种模式,它一共有12种模式。这里我们只介绍三种:正常模式(又叫命令模式)、底行模式、插入模式。

正常模式

正常模式也叫做命令模式。用于导航、编辑、复制和粘贴文本,以及执行各种命令。在正常模式下,按键被解释为命令,而不是直接插入文本。

一般我们使用vim [文件名]就会进入vim的页面,默认就是正常模式。

还可以vim [文件名] +行号默认打开就光标就会跳到该行。否则光标就会在上次退出的时候的位置。

正常模式下的命令集:

Shift + $:光标定位到当前行的最右侧结尾处。
Shift + ^:光标定位到当前行的最左侧结尾处。
Shift + g:光标定位到文本的最后一行最左侧结尾处。
n + Shift + g:光标定位到第n行开始处,注意n不要长按,比如想跳转到第二行开始处,按一个2,再按Shift+g就会跳转到第二行开始处了。
gg:光标定位到文本的最开始。
h/j/k/l:分别对应光标左移、下移、上移、右移。快速记忆小技巧:h在最左边->左移,l在最右边->右移,j(jump):一般跳都是向下跳->下移,k(king):王都是高高在上的->上移。
   背景知识:Vim的前身Vi是作为terminal friendly的编辑器而设计出来的,保证在Unix的文字终端上能正常工作是非常重要的性质。但早期Unix的文字终端只能传输ASCII 127以内的字符,不包括需要用控制键的上下左右(那个时候的键盘还没有标准的上下左右键)。因此,设计师选择了HJKL这四个字母键作为移动键,以适应当时的硬件限制。
w:按照`单词`在行内进行移动(后)。
b:按照`单词`在行内进行移动(前)。
Shift + ww:多界面切换。
Shift + zz = ZZ:保存并退出vim。
n+yy:复制当前行/多行。
n+p:在下一行进行粘贴/多行。
u:撤销上一次的操作。
ctrl+r:对上一次的撤销进行撤销。
n+dd:删除(剪切)当前行(多行)。
Shift+` = ~:当前光标所指的字符(如果是英文字符)进行大小写快速切换。
n+r:替换当前光标所在字符为n,注意要同时按。
Shift+r = R:替换模式。进入替换模式,可任意将光标所在字符替换为你想替换的字符。
n+x:删除从当前光标起的n个字符(右侧)。先按要删除的字符数,再按x。
n+Shift+x:删除从当前光标起的n个字符(左侧)。先输入要删除的字符数,再输入X(Shift+x)。
Shift+3 = #:高亮要查找的函数名或者变量名。输入n跳到下一查找到的函数名。

正常模式下批量化注释:

  1. ctrl v。进入可视块模式。可视块模式允许用户选择矩形区域内的文本,然后对这个选定的文本块进行复制、删除、替换等操作。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. hjkl进行区域选择。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  3. Shift+i=I进入插入模式,并输入//

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  4. 最后按键盘左上角Esc键退出插入模式。就批量化注释完成。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正常模式下批量化去注释:

  1. ctrl v进入可视块模式。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. hjkl选择区域。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  3. d删除选择区域的内容。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正常模式转插入模式:Shift + i/o/a等价于I/O/A,模式切换成功vim下面会出现插入/Insert的字样。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正常模式转底行模式:Shift + ; 等价于:。当页面最低部出现:代表已经切换为底行模式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

底行模式

通过冒号(:)进入,用于执行各种高级命令,如保存文件、退出编辑器、全局替换文本等。

底行模式常见的命令集:

w:保存。
q:退出,不保存更改。
wq:保存并退出
wq!:强制保存并退出。(! 通常用于覆盖某些安全性或确认提示。)
w!:强制保存。
q!:强制退出。
vs filename:vim支持同时打开文件,光标在哪哪个界面我们就正在编辑哪个界面。
正常模式下:ctrl+ww:光标多界面切换。
set nu:显示文件的行号。
n:在冒号后输入一个数字,光标会自动跳转到该行。
/要搜索的字符:如果没有搜索到满意的字符,可以输入n跳转到下一查找的字符,/是从前往后查找。
?要搜索的字符:?与/唯一的区别是?是从后往前查找。
  • 底行模式要退出进入命令模式,直接按键盘左上角的Esc即可。底行模式不可直接进入插入模式。

插入模式

用于输入文本,类似于普通文本编辑器的行为。在正常模式下,可以通过特定的命令切换到插入模式。

插入模式也不能直接切换到底行模式,它可以切换到正常模式,和底行模式一样,插入模式下按Esc键即可。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Shift+Insert:可以帮助我们在插入模式下粘贴内容。这种太复杂,我们后续会介绍在配置文件中配置,让vim支持鼠标右键复制粘贴。

但是原生的vim使用起来很不方便,没有语法高亮和代码补全,这些我们都可以自己去配置文件里面配置。

vim的配置

  1. 首先打开文件/etc/vim/vimrc,这个是系统中公共的配置文件,修改它会对所有的用户生效。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    除了这个文件在每个用户的家目录下还有文件.vimrc,在这个文件里面配置只对该用户生效。如果没有可以自己创建。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 常见的配置项。建议配置到文件~/.vimrc中。参考博客

    syntax on               " Set syntax highlighting
    set number              " Set the line number
    set tabstop=4           " Set an indent to account for 4 spaces
    set autoindent          " Set up automatic indentation
    set mouse=a             " Set mouse is always available, set mouse= (empty) cancel
    set cc=80               " Column 80 highlighted, set cc=0 cancellation
    set cursorline          " Settings to highlight the current row
    set cindent             " Format C language
    set st=4                " Set the width of the soft tab to 4 spaces
    set shiftwidth=4        " The width automatically indented when setting a new line is 4 spaces
    set sts=4               " Set the number of spaces inserted when the Tab key is pressed in insertion mode to 4
    set ruler               " Show the status of the last line
    set showmode            " The status of this row is displayed in the lower left corner.
    set bg=dark             " Show different background tones
    set hlsearch            " Enable Search Highlight
    set laststatus=2        " Always display the status bar
    set backspace=2
    set mouse=v
    
    • 介绍一下最后一个set backspace=2,backspace的模式有三种,只有设成2我们才能在插入模式下任意使用删除键,否则默认有些情况是不能使用删除键的,即使你在插入模式下。

    • set mouse=v:支持鼠标右键复制粘贴 。

    • 复制粘贴即可,保存并退出配置文件即可启用。

效果图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

给普通用户添加sudo

sudo是一个在Linux系统中用于执行特权命令的超级用户工具,其全称为“superuser do”的简写。以下是关于sudo的详细解释:

  • sudo允许系统管理员授权普通用户执行部分或全部root命令,而无需直接登录为root用户。

  • 这样可以减少root登录,从而提高系统的安全性。

    它的授权机制依赖于/etc/sudoers文件。

  1. 一般情况下,如果没有给普通用户添加sudo的权限,他是无法使用sudo的。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. root用户下,打开文件/etc/sudoers

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

打开后找到类似行,增加username ALL=(ALL:ALL) ALLusername是你要增加sudo的用户名。保存即配置成功。

  1. 更改完成后,强制保存退出即可。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 效果图。现在普通用户可以使用sudo了。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    不用sudo,就会报权限不够的错误:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Linux编译器gcc与g++

这两个编译器在博客C/C++程序预处理与环境已经介绍了很多,今天我们来介绍一些我们之前没有介绍的知识。

gcc完成翻译的过程

gcc完成编译分为四个阶段:预处理、编译、汇编、连接。

编译器和语言的自举过程

想弄清楚程序翻译的过程,我们需要知道编译器和语言的自举过程,是先诞生某个语言,还是先诞生用某个语言写的编译器。结论:**是先有编程语言的设计和规范,然后才有用该语言编写的编译器。**原因如下:

  1. 编译器的作用:首先我们都知道,编译器(gcc,g++)是一种软件,它的功能是将高级语言(javaC/C++)编写的代码翻译成机器语言(计算机能够理解并且执行的代码)。编译器使得程序员可以使用更高级、更易读的语言,而不需要直接处理复杂难懂的机器语言。

  2. 编译器与编程语言的依赖作用:从理论上分析,即使一个编程语言没有解释这种语言的编译器,这种语言的设计文档和规范可以存在,但如果没有编译器或解释器,它就不能被用于实际的编程任务。所以实际中,为了使编程语言能够被实际使用,通常需要一个编译器或解释器来执行用该语言编写的代码。

  3. 真实的发展过程:一种编程语言在创建之初,会先使用用其它编程语言编写的编译器来编译和解释它,我们称其为编译C语言的编译器V1版本。然后我们用C语言写一个编译器,用V1去编译它形成软件V2。后面我们有了更好的方案,又可以去在V2源代码的基础上修改,使用V2编译形成V3编译器,这是语言和编译器的自举过程。

    下面以汇编语言和汇编语言编译器的自举过程来直观的感受一下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

预处理阶段

预处理阶段要做的事情:头文件展开、宏替换、去注释、条件编译。

预处理指令:gcc -E test.c -o test.i

之前没有叙述过-E选项的作用:-E选项是告诉编译器,从现在开始进行程序的翻译过程,预处理完成后就停下来。

预处理完成后,还是C语言。

编译阶段

  1. 编译阶段要做的事情:检查代码的规范性,是否有语法错误,检查无误后,将C语言翻译成汇编语言。为什么不是直接翻译成机器语言呢?**在已有的编译工具链中,汇编器是负责将汇编语言翻译成机器语言的工具。如果编译器直接将C语言翻译成机器语言,那么就需要重新设计整个编译工具链,这将大大增加开发成本和复杂度。**总之就是这样设计可以充分利用已有的资源,将汇编语言翻译成机器语言这个工作已经有前人做过,但是将C语言或者其他的高级语言直接翻译为机器语言,这个难度比先将C语言翻译为汇编语言再让汇编器将汇编语言翻译成机器语言要大的多。

  2. 编译指令:gcc -S test.i -o test.s

    • -E选项的作用:从现在开始进行程序的翻译,当编译工作做完就停下来。
  3. 编译工作完成,我们的代码已经被翻译为汇编语言了。

汇编阶段

  1. 汇编阶段要做的事情:它的主要工作是将汇编语言翻译为二进制语言,一些细节不再赘述。

  2. 指令:gcc -c test.s -o test.o

    • -c选项的作用:从现在开始进行程序的翻译,当汇编工作做完就停下来。
    • 生成的test.o文件不是可执行文件,它通常是一个可重定向的二进制目标文件。这个文件还不能直接执行,因为它通常只包含了程序的机器指令部分,而缺少了程序的入口点、内存布局、与其他程序或库的链接信息等必要信息。

链接阶段

  1. 链接阶段要做的事情:生成可执行文件。

  2. 指令:gcc test.o -o test

对动静态库的理解

动静态库在在不同的操作系统中,后缀不一样。在Linux操作系统中,动态库的后缀是.so,静态库的后缀是.a;而在Windows操作系统中,动态库的后缀是.dll,静态库文件的后缀是.lib

动态库
  1. 概念:动态库(也称为共享库)在程序运行时被加载。这意味着,虽然程序在编译时指定了要使用的库,但库中的代码并不会被复制到最终的可执行文件中。相反,程序会包含对库中函数的引用,并在运行时通过操作系统的加载器(如Windows的LoadLibrary或Linux的dlopen)来加载所需的库。— 动态库相当于是编译器告诉你库中函数的地址,然后可执行程序执行的时候,去调用相应的函数。
静态库
  1. 概念:静态库(通常以.a为后缀)包含了一组编译好的目标文件(.o文件),这些目标文件中包含了程序的代码和数据。在编译阶段,链接器会将静态库中的目标文件与程序的其他部分进行链接,生成最终的可执行文件。
动静态库的比较

下面一张表格,详细介绍动静态库的优缺点:
以下是一个总结动态库(共享库)和静态库优缺点的表格:

动态库(共享库)静态库
优点1. 多个程序可以共享同一个库文件,节省磁盘空间。1. 程序运行时无需外部库文件,减少了运行时的依赖。
2. 库更新时,只需替换库文件,无需重新编译使用了该库的程序。2. 避免了动态链接可能带来的性能开销(尽管现代系统已大大减少了这种差异)。
3. 便于调试和版本控制,因为库文件是独立的。3. 程序更加独立,不依赖于外部库文件的路径和版本。
4. 增加了代码的复用性和模块化。
缺点1. 程序运行时需要库文件的存在,如果库文件丢失或损坏,程序将无法运行。1. 程序体积大,因为整个库都被包含在内。
2. 动态链接可能引入一些性能开销,尽管现代系统已对此进行了优化。2. 如果库需要更新,必须重新编译所有使用了该库的程序。
3. 可能存在版本兼容性问题,不同版本的程序可能需要不同版本的库。
4. 在某些情况下,动态库的加载可能会增加程序的启动时间。

常见的三种目标文件

  1. 可重定位目标文件。

    这种文件就是C语言程序经过汇编生成的文件,它有如下的特点。典型的可重定位目标文件就是我们C语言程序经过汇编阶段后生成的.o文件。

    • 包含二进制代码和数据。
    • 它可以和其它的可重定向目标文件在链接时期合并,以创建一个可执行文件。
    • 可重定位文件中的代码和数据是相对地址,而不是绝对地址。这意味着它们的加载地址可以在链接时进行调整,以便适应最终的内存布局。
  2. 可执行目标文件

    这种文件是C语言完成编译后生成的。也包含二进制代码和数据。

    • 可执行目标文件是程序的最终形式,可以被操作系统加载并运行。
  3. 共享目标文件。

    共享目标文件是动态库的一种,它是一种特殊的可重定位目标文件。

    • 可以在加载或运行时被动态地加载进内存并链接。

    • 共享目标文件通常用于实现动态链接库(DLL)或共享库(.so文件),这些库可以在多个程序之间共享,以减少磁盘空间的使用并提高代码的复用性。

  • 在Linux下使用readelf -a filename可以查看目标文件的ELF格式。该指令还有一些其它的选项可以用来查看不同的内容。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

include文件和库文件

  1. include文件

    也被称为头文件,在C/C++中使用#include这个预处理指令被包含进来。

    • 在C/C++等编程语言中,头文件通常用于声明函数、宏、变量和数据类型等,而不包含实际的实现代码。头文件的主要目的是提供接口或协议,使得其他源文件可以引用这些声明并与之交互。

    • Linux中头文件,通常在路径/usr/include中。

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 库文件

    库文件是一种目标文件。静态库是可重定位目标文件,动态库是共享目标文件,上面已经具体介绍过了。

    • 尽管头文件提供了函数和变量的声明,但实际的实现代码仍然需要某种形式的存储和分发。这就是库文件的作用所在。头文件主要用于提供声明和接口,而库文件则用于存储和实现这些声明所对应的代码。因此,在软件开发中,我们需要同时使用头文件和库文件来满足不同的需求和目标。

    • Linux中一般/usr/lib/usr/lib64/lib/lib64都包含库文件。

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

动态链接和静态链接

  1. 动态链接,gcc/g++编译器默认就是动态链接。

    直接一步完成编译链接的过程:gcc -o mybin mytest

    使用ldd 可执行文件可以查看它依赖的库:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

.so结尾,所以默认是动态链接。

  1. 静态链接,需要使用选项-static

    指令:gcc -o mybin-static mytest.c -static

    ldd mybin-static

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 本人知识、能力有限,若有错漏,烦请指正,非常非常感谢!!!
  • 转发或者引用需标明来源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901286.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter使用js对入参使用MD5加密

新增前置处理器JSR223 PreProcessor 注意: 加密的js文件需要放到jmtere的bin目录下,不需要使用给包围,如下图即可(这里不是真实的加密方法,需要自己引入加密算法) 脚本中不要使用let需要使用var 可以先尝试最简单的脚本在使用复杂的脚本 load方法用来加载js文件,不同的jmet…

qt 滚动条 美化

qt QScrollBar 滚动条分为竖直与水平滚动条,两者设置上类似,但也有一些不同,下面主要讲述美化及注意事项。 一、竖直滚动条 竖直滚动条分为7个部分: sub-line、 up-arrow 、sub-page、 hanle、 add-line、 dow-arrow、 add-pag…

SpringBoot最佳实践之 - 项目中统一记录正常和异常日志

1. 前言 此篇博客是本人在实际项目开发工作中的一些总结和感悟。是在特定需求背景下,针对项目中统一记录日志(包括正常和错误日志)需求的实现方式之一,并不是普适的记录日志的解决方案。所以阅读本篇博客的朋友,可以参考此篇博客中记录日志的…

使用JUC包的AtomicXxxFieldUpdater实现更新的原子性

写在前面 本文一起来看下使用JUC包的AtomicXxxxFieldUpdater实现更新的原子性。代码位置如下: 当前有针对int,long,ref三种类型的支持。如果你需要其他类型的支持的话,也可以照葫芦画瓢。 1:例子 1.1:普…

构建中小企业设备管理平台:Spring Boot应用

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

Android 开发 调节声音 SeekBar自定义样式

效果图 xml布局 mipmap/seekbar图片随意一张图都可以&#xff0c;这里我的图就不贴出来了 <SeekBarandroid:id"id/seekBar"android:layout_marginLeft"8dp"android:layout_width"377dp"android:layout_height"8dp"android:layou…

沈阳乐晟睿浩科技有限公司抖音小店领域的强者

在当今数字化浪潮的推动下&#xff0c;电子商务以其便捷性、高效性和广泛的覆盖面&#xff0c;成为了推动经济发展的新引擎。而抖音小店&#xff0c;作为短视频平台上的新兴电商形态&#xff0c;更是凭借其庞大的用户基础、精准的内容推送机制以及独特的购物体验&#xff0c;迅…

方形件组批优化问题

在中国制造 2025 目标背景之下&#xff0c;发展环境保护型、资源节约型的智能制造业已成为制造行业的当务之急。为了应对客户提出的各式各样的产品需求、订单组批难且产品质量 要求高的问题&#xff0c;使用数学模型辅助企业对定制化产品进行组批优化具有重要意义。本文通 过…

2024.7最新子比主题zibll7.9.2开心版源码+授权教程

授权教程&#xff1a; 1.进入宝塔搭建一个站点 绑定 api.zibll.com 域名 并上传 index.php 文件 2.设置伪静态 3.开启SSL证书&#xff0c;找一个能用的域名证书&#xff0c;将密钥(KEY)和证书(PEM格式)复制进去即可 4.在宝塔文件地址栏中输入 /etc 找到 hosts文件并打开&a…

hcia复习篇

计算机网络&#xff1a; 云技术&#xff1a; 云储存---将数据通过计算机网络传输并储存在第三方服务器。&#xff08;百度网盘&#xff09; 云计算---分布式计算。&#xff08;即共享硬件资源&#xff09; 计算机技术&#xff1a; 文字、图片、视频等---抽象文字。 抽象语言…

【Nginx系列】499错误

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Java应用程序的测试覆盖率之设计与实现(一)-- 总体设计

一、背景 作为测试,如何保证开发人员提交上来的代码都被测试覆盖到,是衡量测试质量的一个重要指标。 本系列文章将要说一说,如何搭建一套测试覆盖率的系统。 包括以下内容: jacoco agent采集执行覆盖率数据jacoco climaven集成jacoco:jacoco-maven-pluginant集成jacoco:…

Linux: network: wireshark IO图的一个问题

今天遇到一个问题&#xff0c;发现wireshark画的IO图&#xff0c;前几秒没有数据&#xff0c;但是根据Raw的pcap看&#xff0c;是有包的&#xff0c;这就迷惑了。 经同事提醒&#xff0c;这个IO在设置了多个画图filter的时候&#xff0c;可能导致开始前几秒没有输出。如下图 这…

HexForge:一款用于扩展安全汇编和十六进制视图的IDA插件

关于HexForge HexForge是一款用于扩展安全汇编和十六进制视图的IDA插件&#xff0c;在该工具的帮助下&#xff0c;广大研究人员可以方便地直接从 IDA Pro 界面数据解码、解密或执行安全数据审计任务。 功能介绍 1、从 IDA 的反汇编或十六进制视图复制原始十六进制&#xff1b;…

安康旅游指南:基于SpringBoot的网站开发实践

第一章 绪论 1.1 研究现状 时代的发展&#xff0c;我们迎来了数字化信息时代&#xff0c;它正在渐渐的改变着人们的工作、学习以及娱乐方式。计算机网络&#xff0c;Internet扮演着越来越重要的角色&#xff0c;人们已经离不开网络了&#xff0c;大量的图片、文字、视频冲击着我…

spring整合使用xml方式整合Druid数据源连接池

1.普通的JDBC数据库连接使用 DriverManager 来获取&#xff0c;每次向数据库建立连接的时候都要将 Connection加载到内存中&#xff0c;再验证用户名和密码(得花费0.05s&#xff5e;1s的时间)。需要数据库连接的时候&#xff0c;就向数据库要求 一个&#xff0c;执行完成后再断…

测试造数,excel转insert语句

目录 excel转sql的insert语句一、背景二、直接上代码 excel转sql的insert语句 一、背景 在实际测试工作中&#xff0c;需要频繁地进行测试造数并插入数据库验证&#xff0c;常规的手写sql语句过于浪费时间&#xff0c;为此简单写个脚本&#xff0c;通过excel来造数&#xff0…

用更多的钱买电脑而不是手机

如果&#xff0c;我们对自己的定义是知识工作者&#xff0c;那么在工作、学习相关的电子设备投入上&#xff0c;真的别舍不得花钱。 需要留意的是&#xff0c;手机&#xff0c;对于大部分在电脑前工作的人&#xff0c;不是工作设备。在我看来&#xff0c;每年投入到电脑的钱&…

Go语言Linux环境搭建以编写第一个Go程序

目录 文章目录 目录Go语言入门1、说明2、CentOS7安装Go3、编写第一个程序3.1、编写程序3.2、运行程序3.3、生成二进制文件4、编写第一个web程序4.1、编写代码4.2、运行程序4.3、测试访问4.4、生成二进制配置Vim-go语法高亮1)、下载和设置Vundle.vim(vim安装插件的工具)2)、…

[Linux网络编程]05-TCP状态和端口复用,shutdown函数(主动方建立/关闭连接状态,被动方建立/关闭连接状态,2MSL时长,TCP其他状态)

一.TCP状态图表示 netstat -apn | grep client 查看客户端网络连接状态 netstat -apn | grep port 查看端口的网络连接状态 二.主动方&#xff0c;被动方TCP连接状态 1. 主动发起连接请求端&#xff1a; CLOSE – 发送SYN – SEND_SYN – 接收 ACK、SYN – SEND_SYN – 发送 A…