面试官:说说你对 linux 用户管理的理解?相关的命令有哪些?
面试官:说说你对 linux 用户管理的理解?相关的命令有哪些?
一、是什么Linux是一个多用户的系统,允许使用者在系统上通过规划不同类型、不同层级的用户,并公平地分配系统资源与工作环境
而与 Windows 系统最大的不同, Linux 允许不同的用户同时登录主机,同时使用主机的资源
既然是多用户的系统,那么最常见的问题就是权限,不同的用户对于不同的文件都应该有各自的权限
例如,小 A 希望个人文件不被其他用户读取,而如果不对文件进行权限设置,共享了主机资源的小 B 也可以读取小 A 的个人文件,这是不合理的
这里面涉及到用户与用户组的概念
二、用户与用户组Linux 以 “用户与用户组” 的概念,建立用户与文件权限之间的联系,保证系统能够充分考虑每个用户的隐私保护,很大程度上保障了 Linux 作为多用户系统的可行性
从文件权限的角度出发,“用户与用户组” 引申为三个具体的对象:
文件所有者
用户组成员
其他人
每一个对象对某一个文件的持有权限是不同的
文件所有者当一个用户创建了一个文件,这个用户就是这个文件的文件所有者。文件所有者对文件拥有最高权限,同时排他性地拥有该文件 ...
面试官:说说你对操作系统的理解?核心概念有哪些?
面试官:说说你对操作系统的理解?核心概念有哪些?
一、是什么操作系统(Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序,同时也是计算机系统的内核与基石
简单来讲,操作系统就是一种复杂的软件,相当于软件管家
操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务,
操作系统的类型非常多样,不同机器安装的操作系统可从简单到复杂,可从移动电话的嵌入式系统到超级电脑的大型操作系统,在计算机与用户之间起接口的作用,如下图:
许多操作系统制造者对它涵盖范畴的定义也不尽一致,例如有些操作系统集成了图形用户界面,而有些仅使用命令行界面,将图形用户界面视为一种非必要的应用程序
二、核心概念操作系统的核心概念都是对具体物理硬件的抽象,主要有如下:
进程(线程):进程(线程)是操作系统对CPU的抽象
虚拟内存(地址空间):虚拟内存是操作系统对物理内存的抽象
文件:文件是操作系统对物理磁盘的抽象
shell:它是一个程序,可从键盘获取命令 ...
面试官:说说你对输入输出重定向和管道的理解?应用场景?
面试官:说说你对输入输出重定向和管道的理解?应用场景?
一、是什么linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0、1、2:
STDIN 是标准输入,默认从键盘读取信息
STDOUT 是标准输出,默认将输出结果输出至终端
STDERR 是标准错误,默认将输出结果输出至终端
对于任何linux命令的执行会有下面的过程:
一条命令的执行需要键盘等的标准输入,命令的执行和正确或错误,其中的每一个双向箭头就是一个通道,所以数据流可以流入到文件端(重定向或管道)
简单来讲,重定向就是把本来要显示在终端的命令结果,输送到别的地方,分成:
输入重定向:流出到屏幕如果命令所需的输入不是来自键盘,而是来自指定的文件
输出重定向:命令的输出可以不显示在屏幕,而是写在指定的文件中
管道就是把两个命令连接起来使用,一个命令的输出作为另一个命令的输入
两者的区别在于:
管道触发两个子进程,执行 | 两边的程序;而重定向是在一个进程内执行。
管道两边都是shell命令
重定向符号的右边只能是Linux文件
重定向符号的优先级大于管道
二、命令重定向常见 ...
面试官:说说你对 shell 的理解?常见的命令?
面试官:说说你对 shell 的理解?常见的命令?
一、是什么 Shell 是一个由c语言编写的应用程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言
它连接了用户和Linux内核,让用户能够更加高效、安全、低成本地使用 Linux 内核
其本身并不是内核的一部分,它只是站在内核的基础上编写的一个应用程序,它和 QQ、微信等其它软件没有什么区别,特殊的地方就是开机立马启动,并呈现在用户面前
主要作用是接收用户输入的命令,并对命令进行处理,处理完毕后再将结果反馈给用户,比如输出到显示器、写入到文件等,同样能够调用和组织其他的应用程序,相当于一个领导者的身份,如下图:
那么shell脚本就是多个 Shell 命令的组合并通过 if 条件分支控制或循环来组合运算,实现一些复杂功能,文件后缀名为.sh
常用的 ls 命令,它本身也是一个 Shell 脚本,通过执行这个 Shell 脚本可以列举当前目录下的文件列表,如下创建一个hello.sh脚本
12345#!/bin/bash# 执行的命令主体lsecho "hello world&q ...
面试官:说说 linux 系统下 文本编辑常用的命令有哪些?
面试官:说说 linux 系统下 文本编辑常用的命令有哪些?
一、是什么Vim是从 vi 发展出来的一个文本编辑器,代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方
而vim 可以说是程序开发者的一项很好用的工具
二、使用基本上 vi/vim 共分为三种模式,分别是:
命令模式(Command mode)
输入模式(Insert mode)
底线命令模式(Last line mode)
命令模式Vim 的默认模式,在这个模式下,你不能输入文本,但是可以让我们在文本间移动,删除一行文本,复制黏贴文本,跳转到指定行,撤销操作,等等
移动光标常用的命令如下:
h 向左移动一个字符
j 向下移动一个字符
k 向上移动一个字符
i 向右移动一个字符
或者使用方向键进行控制
如果想要向下移动n行,可通过使用 “nj” 或 “n↓” 的组合按键
搜索常见的命令如下:
/word:向光标之下寻找一个名称为 word 的字符
?word:向光标之上寻找一个字 ...
面试官:说说什么是进程?什么是线程?区别?
面试官:说说什么是进程?什么是线程?区别?
一、进程操作系统中最核心的概念就是进程,进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位
操作系统的其他所有内容都是围绕着进程展开的,负责执行这些任务的是CPU
进程是一种抽象的概念,从来没有统一的标准定义看,一般由程序、数据集合和进程控制块三部分组成:
程序用于描述进程要完成的功能,是控制进程执行的指令集
数据集合是程序在执行时所需要的数据和工作区
程序控制块,包含进程的描述信息和控制信息,是进程存在的唯一标志
二、线程线程(thread)是操作系统能够进行运算调度的最小单位,其是进程中的一个执行任务(控制单元),负责当前进程中程序的执行
一个进程至少有一个线程,一个进程可以运行多个线程,这些线程共享同一块内存,线程之间可以共享对象、资源,如果有冲突或需要协同,还可以随时沟通以解决冲突或保持同步
举个例子,假设你经营着一家物业管理公司。最初,业务量很小,事事都需要你亲力亲为。给老张家修完暖气管道,立马再去老李家换电灯泡——这叫单线程,所有的工作都得顺序执行
后来业务拓展了,你雇佣了几个工人,这样,你的物业公司就 ...
面试官:说说你对 TypeScript 中类的理解?应用场景?
面试官:说说你对 TypeScript 中类的理解?应用场景?
一、是什么类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础
类是一种用户定义的引用数据类型,也称类类型
传统的面向对象语言基本都是基于类的,JavaScript 基于原型的方式让开发者多了很多理解成本
在 ES6 之后,JavaScript 拥有了 class 关键字,虽然本质依然是构造函数,但是使用起来已经方便了许多
但是 JavaScript 的class依然有一些特性还没有加入,比如修饰符和抽象类
TypeScript 的 class 支持面向对象的所有特性,比如 类、接口等
二、使用方式定义类的关键字为 class,后面紧跟类名,类可以包含以下几个模块(类的数据成员):
字段 : 字段是类里面声明的变量。字段表示对象的有关数据。
构造函数: 类实例化时调用,可以为类的对象分配内存。
方法: 方法为对象要执行的操作
如下例子:
1234567891011121314class Car { // 字段 engine: ...
面试官:说说 typescript 的数据类型有哪些?
面试官:说说 typescript 的数据类型有哪些?
一、是什么typescript 和 javascript几乎一样,拥有相同的数据类型,另外在javascript基础上提供了更加实用的类型供开发使用
在开发阶段,可以为明确的变量定义为某种类型,这样typescript就能在编译阶段进行类型检查,当类型不合符预期结果的时候则会出现错误提示
二、有哪些typescript 的数据类型主要有如下:
boolean(布尔类型)
number(数字类型)
string(字符串类型)
array(数组类型)
tuple(元组类型)
enum(枚举类型)
any(任意类型)
null 和 undefined 类型
void 类型
never 类型
object 对象类型
boolean布尔类型
123let flag:boolean = true;// flag = 123; // 错误flag = false; //正确
number数字类型,和javascript一样,typescript的数值类型都是浮点数,可支持二进制、八进制、十进制和十六进制
123let num:nu ...
面试官:说说你对 TypeScript 装饰器的理解?应用场景?
面试官:说说你对 TypeScript 装饰器的理解?应用场景?
一、是什么装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上
是一种在不改变原类和使用继承的情况下,动态地扩展对象功能
同样的,本质也不是什么高大上的结构,就是一个普通的函数,@expression 的形式其实是Object.defineProperty的语法糖
expression 求值后必须也是一个函数,它会在运行时被调用,被装饰的声明信息做为参数传入
二、使用方式由于typescript是一个实验性特性,若要使用,需要在tsconfig.json文件启动,如下:
123456{ "compilerOptions": { "target": "ES5", "experimentalDecorators": true }}
typescript装饰器的使用和javascript基本一致
类的装饰器可以装饰:
类
方法/ ...
面试官:说说你对 TypeScript 中函数的理解?与 JavaScript 函数的区别?
面试官:说说你对 TypeScript 中函数的理解?与 JavaScript 函数的区别?
一、是什么函数是 JavaScript 应用程序的基础,帮助我们实现抽象层、模拟类、信息隐藏和模块
在 TypeScript 里,虽然已经支持类、命名空间和模块,但函数仍然是主要定义行为的方式,TypeScript 为 JavaScript 函数添加了额外的功能,丰富了更多的应用场景
函数类型在 TypeScript 类型系统中扮演着非常重要的角色,它们是可组合系统的核心构建块
二、使用方式跟javascript 定义函数十分相似,可以通过funciton 关键字、箭头函数等形式去定义,例如下面一个简单的加法函数:
1const add = (a: number, b: number) => a + b
上述只定义了函数的两个参数类型,这个时候整个函数虽然没有被显式定义,但是实际上 TypeScript 编译器是能够通过类型推断到这个函数的类型,如下图所示:
当鼠标放置在第三行add函数名的时候,会出现完整的函数定义类型,通过: 的形式来定于参数类型,通过 => 连接参数和 ...