IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> GO面试题 -> 正文阅读

[C++知识库]GO面试题


一、go中,new 和 make 的区别

  • new 的作用是初始化一个指向类型的指针(*T)
  • new 函数是内建函数,函数定义: func (Type) *Type
  • 使用 new 函数来分配空间。传递给 new 函数的是一个 类型,不是一个值。返回值是指向这个新分配的零值的指针
  • make 的作用是 给slice 、map、 chan 初始化并且返回引用(T)
  • make 函数是内建函数,函数定义: func (Type,size IntegerType)Type
    • 第一个参数是类型,第二个参数是长度
    • 返回值是一个类型
      make(T,args)函数的目的与new(T)不同。它仅仅用于创建slice、map、channel,并且返回类型是T的一个初始化(不是零值)的实例。

二、go中,printf()、Sprintf()、Fprintf()函数的区别用法是什么?

  • 都是把格式好的字符串输出,知识输出的目标不一样。
  • printf(),是把格式字符串输出到标准输出(一般是屏幕,可以重定向)
  • Printf()是和标准输出文件(stdout)关联的,Fprintf()则没有这个限制
  • Sprintf()是吧格式字符串输出到指定字符串中,所以参数比Printf多一个char* 。那就是目标字符串地址
  • Fprintf()是吧格式字符串输出到指定文件设备中,所以参数比printf多一个文件指针FILE*,主要用于文件操作
  • Fprintf()是格式化输出到一个stream,通常是文件

三、go中数组与切片的区别

3.1 数组

  • 数组是具有固定长度且拥有零个或者多个相同数据类型元素的序列,数组的长度是数组类型的一部分,所以[3]int 和 [4]int 是两种不同的数组类型
  • 数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变
  • 数组是值传递
  • 数组是内置类型,是一组同类型数组的集合,他是值类型,通过从0开始的小标索引访问元素值。在初始化后长度是固定的,无法修改其长度。当作为方法的参数传入时将复制一份数组而不是引用同一指针。数组的长度也是其类型的一部分,通过内置函数len(array)获取其长度。
  • 数组定义:
var array [10]int

var array [5]int{1,2,3,4,5}

3.2 切片

  • 切片表示一个拥有相同类型元素的可变长度的序列。切片是一种轻量级的数据结构,它有三个属性:指针、长度和容量。
  • 切片不需要指定大小
  • 切片是地址传递
  • 切片可以通过数组来初始化,也可以通过内置函数make()初始化,初始化时 len = cap,在追加元素时如果容量 cap 不足时讲len 的2倍扩容
  • 切片定义:
var slice []type = make ([]type ,len )

四、go基本命令

  • go env # 用于查看 go 环境变量
  • go run # 用于编译并运行 go 源码文件
  • go build # 用于编译源码文件、代码包、依赖包
  • go get # 用于动态获取远程代码包
  • go install # 用于编译go 文件,并将编译结构安装到 bin、pkg 目录
  • go clean 用于清理工作目录,删除编译和安装遗留的目标文件
  • gobersion # 用于查看go 的版本信息

五、go 语言中的协程

  • 协程和线程都可以实现程序的并发执行
  • 通过channel 来进行协程间的通信
  • 只需要在函数调用前添加go 关键字即可实现 go 的协程,创建并发任务
  • 关键字 go 并非执行并发任务,而是创建一个并发任务单元

六、 进程、线程、协程之间的区别

  • 进程是资源的分配和调度的一个独立单元,而线程是 CPU 调度的基本单元
  • 同一个进程中可以包括多个线程
  • 进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束
  • 线程共享整个进程的资源(寄存器、堆栈、上下文),一个进程至少包括一个线程
  • 进程的创建调用fork 或者 vfork,而线程的创建调用 pthread_create
  • 线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源
  • 进程是资源分配的单位
  • 线程是操作系统调度的单位
  • 进程切换需要的资源最大,效率很低,线程切换需要的资源一般,效率一般,协程切换任务资源很小,效率高,多进程、多线程根据cpu 核数不一样可能是并行的 ,也可能是并发的。协程的本质就是使用当前进程在不同的函数代码中切换执行,可以理解为并行。协程是一个用户层面的概念,不同协程的魔性实现可能是单线程,也可能是多线程。
  • 进程拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度。(全局变量保存在堆中,局部变量以及函数保存在栈中)
  • 线程拥有自己独立的站和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是这样的)
  • 协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度
  • 一个应用程序一般对应一个进程,一个进程一般有一个主线程,还有若干的辅助线程,线程之间是平行运行的,在线程里面可以开启协程,让程序在特定的时间内运行。
  • 协程和线程的区别是:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU 的能力。
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:01:39  更:2021-11-18 11:02:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:48:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码