一、有哪些经典的 Linux 面试题?
软件测试被问到的Linux命令知识点,90%都在这里了!
一、文件和目录
查看路径
pwd
显示当前目录的路径
which
查看命令的可执行文件所在路径, Linux 下,每一条命令其实都对应一个可执行程序,在终端中输入命令,按回车的时候,就是执行了对应的那个程序, which 命令本身对应的程序也存在于 Linux 中。
总的来说一个命令就是一个可执行程序。
浏览和切换目录
ls
列出文件和目录,它是 Linux 最常用的命令之一。
【常用参数】
- -a 显示所有文件和目录包括隐藏的
- -l 显示详细列表
- -h 适合人类阅读的
- -t 按文件最近一次修改时间排序
- -i 显示文件的 inode ( inode 是文件内容的标识)
cd
cd 是英语 change directory 的缩写,表示切换目录。
cd / --> 跳转到根目录
cd ~ --> 跳转到家目录
cd .. --> 跳转到上级目录
cd ./home --> 跳转到当前目录的home目录下
cd /home/lion --> 跳转到根目录下的home目录下的lion目录
cd --> 不添加任何参数,也是回到家目录
[注意] 输入cd /ho + 单次 tab 键会自动补全路径 + 两次 tab 键会列出所有可能的目录列表。
du
列举目录大小信息。
【常用参数】
- -h 适合人类阅读的;
- -a 同时列举出目录下文件的大小信息;
- -s 只显示总计大小,不显示具体信息。
浏览和创建文件
cat
一次性显示文件所有内容,更适合查看小的文件。
cat cloud-init.log
【常用参数】
- -n 显示行号。
less
分页显示文件内容,更适合查看大的文件。
less cloud-init.log
【快捷操作】
- 空格键:前进一页(一个屏幕);
- b 键:后退一页;
- 回车键:前进一行;
- y 键:后退一行;
- 上下键:回退或前进一行;
- d 键:前进半页;
- u 键:后退半页;
- q 键:停止读取文件,中止 less 命令;
- = 键:显示当前页面的内容是文件中的第几行到第几行以及一些其它关于本页内容的详细信息;
- h 键:显示帮助文档;
- / 键:进入搜索模式后,按 n 键跳到一个符合项目,按 N 键跳到上一个符合项目,同时也可以输入正则表达式匹配。
head
显示文件的开头几行(默认是10行)
head cloud-init.log
【参数】
- -n 指定行数 head cloud-init.log -n 2
tail
显示文件的结尾几行(默认是10行)
tail cloud-init.log复制代码
【参数】
- -n 指定行数 tail cloud-init.log -n 2
- -f 会每过1秒检查下文件是否有更新内容,也可以用 -s 参数指定间隔时间 tail -f -s 4 xxx.log
touch
创建一个文件
touch new_file复制代码
mkdir
创建一个目录
mkdir new_folder复制代码
【常用参数】
- -p 递归的创建目录结构 mkdir -p one/two/three
文件的复制和移动
cp
拷贝文件和目录
cp file file_copy --> file 是目标文件,file_copy 是拷贝出来的文件cp file one --> 把 file 文件拷贝到 one 目录下,并且文件名依然为 file
cp file one/file_copy --> 把 file 文件拷贝到 one 目录下,文件名为file_copy
cp *.txt folder --> 把当前目录下所有 txt 文件拷贝到 folder 目录下
【常用参数】
- -r 递归的拷贝,常用来拷贝一整个目录
mv
移动(重命名)文件或目录,与cp命令用法相似。
mv file one --> 将 file 文件移动到 one 目录下
mv new_folder one --> 将 new_folder 文件夹移动到one目录下mv *.txt folder --> 把当前目录下所有 txt 文件移动到 folder 目录下mv file new_file --> file 文件重命名为 new_file
文件的删除和链接
rm
删除文件和目录,由于 Linux 下没有回收站,一旦删除非常难恢复,因此需要谨慎操作
rm new_file --> 删除 new_file 文件
rm f1 f2 f3 --> 同时删除 f1 f2 f3 3个文件
【常用参数】
- -i 向用户确认是否删除;
- -f 文件强制删除;
- -r 递归删除文件夹,著名的删除操作 rm -rf 。
ln
英文 Link 的缩写,表示创建链接。
学习创建链接之前,首先要理解链接是什么,我们先来看看 Linux 的文件是如何存储的:
Linux 文件的存储方式分为3个部分,文件名、文件内容以及权限,其中文件名的列表是存储在硬盘的其它地方和文件内容是分开存放的,每个文件名通过 inode 标识绑定到文件内容。
Linux 下有两种链接类型:硬链接和软链接。
硬链接
使链接的两个文件共享同样文件内容,就是同样的 inode ,一旦文件1和文件2之间有了硬链接,那么修改任何一个文件,修改的都是同一块内容,它的缺点是,只能创建指向文件的硬链接,不能创建指向目录的(其实也可以,但比较复杂)而软链接都可以,因此软链接使用更加广泛。
这个部分暂时不展开。
二、用户与权限
用户
Linux 是一个多用户的操作系统。在 Linux 中,理论上来说,我们可以创建无数个用户,但是这些用户是被划分到不同的群组里面的,有一个用户,名叫 root ,是一个很特殊的用户,它是超级用户,拥有最高权限。
sudo
以 root 身份运行命令
useradd + passwd
- useradd 添加新用户
- passwd 修改用户密码
这两个命令需要 root 用户权限
userdel
删除用户,需要 root 用户权限
su
切换用户,需要 root 用户权限
群组的管理
Linux 中每个用户都属于一个特定的群组,如果你不设置用户的群组,默认会创建一个和它的用户名一样的群组,并且把用户划归到这个群组。
groupadd
创建群组,用法和 useradd 类似
groupdel
删除一个已存在的群组
groups
查看用户所在群组
usermod
用于修改用户的账户。
【常用参数】
- -l 对用户重命名。需要注意的是 /home 中的用户家目录的名字不会改变,需要手动修改。
- -g 修改用户所在的群组,例如 usermod -g friends lion修改 lion 用户的群组为 friends 。
- -G 一次性让用户添加多个群组,例如 usermod -G friends,foo,bar lion 。
- -a -G 会让你离开原先的群组,如果你不想这样做的话,就得再添加 -a 参数,意味着append 追加的意思。
chgrp
用于修改文件的群组。
chown
改变文件的所有者,需要 root 身份才能运行。
【常用参数】
- -R 递归设置子目录和子文件, chown -R lion:lion /home/frank 把 frank 文件夹的用户和群组都改为 lion 。
文件权限管理
chmod
修改访问权限。
【常用参数】
- -R 可以递归地修改文件访问权限,例如 chmod -R 777 /home/lion
其中 drwxr-xr-x 表示文件或目录的权限。让我们一起来解读它具体代表什么?
- d :表示目录,就是说这是一个目录,普通文件是 - ,链接是 l 。
- r :read 表示文件可读。
- w :write 表示文件可写,一般有写的权限,就有删除的权限。
- x :execute 表示文件可执行。
- - :表示没有相应权限。
现在再来理解这句权限 drwxr-xr-x 的意思:
- 它是一个文件夹;
- 它的所有者具有:读、写、执行权限;
- 它的群组用户具有:读、执行的权限,没有写的权限;
- 它的其它用户具有:读、执行的权限,没有写的权限。
现在理解了权限,我们使用 chmod 来尝试修改权限。chmod 它不需要是 root 用户才能运行的,只要你是此文件所有者,就可以用 chmod 来修改文件的访问权限。
chmod 640 hello.c
# 分析
6 = 4 + 2 + 0 表示所有者具有 rw 权限
4 = 4 + 0 + 0 表示群组用户具有 r 权限
0 = 0 + 0 + 0 表示其它用户没有权限
对应文字权限为:-rw-r-----
用字母来分配权限
- u :user 的缩写,用户的意思,表示所有者。
- g :group 的缩写,群组的意思,表示群组用户。
- o :other 的缩写,其它的意思,表示其它用户。
- a :all 的缩写,所有的意思,表示所有用户。
- + :加号,表示添加权限。
- - :减号,表示去除权限。
- = :等于号,表示分配权限。
chmod u+rx file --> 文件file的所有者增加读和运行的权限
chmod g+r file --> 文件file的群组用户增加读的权限
chmod o-r file--> 文件file的其它用户移除读的权限
chmod g+r file --> 文件file的群组用户增加读的权限,其它用户移除读的权限
chmod go-r file --> 文件file的群组和其他用户移除读的权限
chmod +x file --> 文件file的所有用户增加运行的权限
chmod u=rwx,g=r,o=- file --> 文件file的所有者分配读写和执行的权限,群组其它用户分配读的权限,其他用户没有任何权限
三、查找文件
locate
搜索包含关键字的所有文件和目录。后接需要查找的文件名,也可以用正则表达式。
安装 locate
yum -y install mlocate --> 安装包updatedb --> 更新数据库复制代码locate file.txtlocate fil*.txt
[注意] locate 命令会去文件数据库中查找命令,而不是全磁盘查找,因此刚创建的文件并不会更新到数据库中,所以无法被查找到,可以执行 updatedb 命令去更新数据库。
find
用于查找文件,它会去遍历你的实际硬盘进行查找,而且它允许我们对每个找到的文件进行后续操作,功能非常强大。
find <何处> <何物> <做什么>
- 何处:指定在哪个目录查找,此目录的所有子目录也会被查找。
- 何物:查找什么,可以根据文件的名字来查找,也可以根据其大小来查找,还可以根据其最近访问时间来查找。
- 做什么:找到文件后,可以进行后续处理,如果不指定这个参数, find 命令只会显示找到的文件。
根据文件名查找
find -name "file.txt" --> 当前目录以及子目录下通过名称查找文件
find . -name "syslog" --> 当前目录以及子目录下通过名称查找文件
find / -name "syslog" --> 整个硬盘下查找syslog
find /var/log -name "syslog" --> 在指定的目录/var/log下查找syslog文件find /var/log -name "syslog*" --> 查找syslog1、syslog2 ... 等文件,通配符表示所有
find /var/log -name "*syslog*" --> 查找包含syslog的文件
[注意] find 命令只会查找完全符合 "何物" 字符串的文件,而 locate 会查找所有包含关键字的文件。
根据文件大小查找
find /var -size +10M --> /var 目录下查找文件大小超过 10M 的文件
find /var -size -50k --> /var 目录下查找文件大小小于 50k 的文件
find /var -size +1G --> /var 目录下查找文件大小查过 1G 的文件
find /var -size 1M --> /var 目录下查找文件大小等于 1M 的文件
根据文件最近访问时间查找
find -name "*.txt" -atime -7
--> 近 7天内访问过的.txt结尾的文件
仅查找目录或文件,根据类型查找
find . -name "file" -type f
--> 只查找当前目录下的file文件
find . -name "file" -type d
--> 只查找当前目录下的file目录
软件仓库
Linux 下软件是以包的形式存在,一个软件包其实就是软件的所有文件的压缩包,是二进制的形式,包含了安装软件的所有指令。Red Hat 家族的软件包后缀名一般为 .rpm ,Debian 家族的软件包后缀是 .deb 。
Linux 的包都存在一个仓库,叫做软件仓库,它可以使用 yum 来管理软件包, yum 是 CentOS 中默认的包管理工具,适用于 Red Hat 一族。可以理解成 Node.js 的 npm 。
yum 常用命令
- yum update | yum upgrade 更新软件包
- yum search xxx 搜索相应的软件包
- yum install xxx 安装软件包
- yum remove xxx 删除软件包
四、文本操作
grep
全局搜索一个正则表达式,并且打印到屏幕。简单来说就是,在文件中查找关键字,并显示关键字所在行。
基础语法
grep text file # text代表要搜索的文本,file代表供搜索的文件
常用参数
- -i 忽略大小写, grep -i path /etc/profile
- -n 显示行号,grep -n path /etc/profile
- -v 只显示搜索文本不在的那些行,grep -v path /etc/profile
- -r 递归查找, grep -r hello /etc ,Linux 中还有一个 rgrep 命令,作用相当于 grep -r
sort
对文件的行进行排序。
基础语法
sort name.txt # 对name.txt文件进行排序
实例用法
为了演示方便,我们首先创建一个文件 name.txt ,放入以下内容:
ChristopherShawnTedRockNoahZacharyBella
执行 sort name.txt 命令,会对文本内容进行排序。
常用参数
- -o 将排序后的文件写入新文件, sort -o name_sorted.txt name.txt ;
- -r 倒序排序, sort -r name.txt ;
- -R 随机排序, sort -R name.txt ;
- -n 对数字进行排序,默认是把数字识别成字符串的,因此 138 会排在 25 前面,如果添加了 -n 数字排序的话,则 25 会在 138 前面。
wc
word count 的缩写,用于文件的统计。它可以统计单词数目、行数、字符数,字节数等。
基础语法
wc name.txt # 统计name.txt
实例用法
[root@lion ~]# wc name.txt 13 13 91 name.txt
- 第一个13,表示行数;
- 第二个13,表示单词数;
- 第三个91,表示字节数。
常用参数
- -l 只统计行数, wc -l name.txt ;
- -w 只统计单词数, wc -w name.txt ;
- -c 只统计字节数, wc -c name.txt ;
- -m 只统计字符数, wc -m name.txt 。
uniq
删除文件中的重复内容。
基础语法
uniq name.txt # 去除name.txt重复的行数,并打印到屏幕上
【注意】它只能去除连续重复的行数。
常用参数
- -c 统计重复行数, uniq -c name.txt ;
- -d 只显示重复的行数, uniq -d name.txt 。
cut
剪切文件的一部分内容。
基础语法
cut -c 2-4 name.txt # 剪切每一行第二到第四个字符
常用参数
- -d 用于指定用什么分隔符(比如逗号、分号、双引号等等) cut -d , name.txt ;
- -f 表示剪切下用分隔符分割的哪一块或哪几块区域, cut -d , -f 1 name.txt 。
五、重定向 管道 流
在 Linux 中一个命令的去向可以有3个地方:终端、文件、作为另外一个命令的入参。
命令一般都是通过键盘输入,然后输出到终端、文件等地方,它的标准用语是 stdin 、 stdout 以及 stderr 。
- 标准输入 stdin ,终端接收键盘输入的命令,会产生两种输出;
- 标准输出 stdout ,终端输出的信息(不包含错误信息);
- 标准错误输出 stderr ,终端输出的错误信息。
重定向
把本来要显示在终端的命令结果,输送到别的地方(到文件中或者作为其他命令的输入)。
输出重定向 >
> 表示重定向到新的文件, cut -d , -f 1 notes.csv > name.csv ,它表示通过逗号剪切notes.csv 文件(剪切完有3个部分)获取第一个部分,重定向到 name.csv 文件。
我们来看一个具体示例,学习它的使用,假设我们有一个文件 notes.csv ,文件内容如下:
Mark1,951/100,很不错1Mark2,952/100,很不错2Mark3,
953/100,很不错3Mark4,954/100,很不错4Mark5,955/100,很不错5Mark6,956/100,很不错6
执行命令:cut -d , -f 1 notes.csv > name.csv 最后输出如下内容:
Mark1Mark2Mark3Mark4Mark5Mark6
【注意】使用 > 要注意,如果输出的文件不存在它会新建一个,如果输出的文件已经存在,则会覆盖。因此执行这个操作要非常小心,以免覆盖其它重要文件。
输出重定向 >>
表示重定向到文件末尾,因此它不会像 > 命令这么危险,它是追加到文件的末尾(当然如果文件不存在,也会被创建)。
再次执行 cut -d , -f 1 notes.csv >> name.csv ,则会把名字追加到 name.csv 里面。
Mark1Mark2Mark3Mark4Mark5Mark6Mark1Mark2Mark3Mark4Mark5Mark6
我们平时读的 log 日志文件其实都是用这个命令输出的。
输出重定向 2>
标准错误输出
cat not_exist_file.csv > res.txt 2> errors.log
- 当我们 cat 一个文件时,会把文件内容打印到屏幕上,这个是标准输出;
- 当使用了 > res.txt 时,则不会打印到屏幕,会把标准输出写入文件 res.txt 文件中;
- 2> errors.log 当发生错误时会写入 errors.log 文件中。
输出重定向 2>>
标准错误输出(追加到文件末尾)同 >> 相似。
输入重定向 <
< 符号用于指定命令的输入。
cat < name.csv # 指定命令的输入为 name.csv
虽然它的运行结果与 cat name.csv 一样,但是它们的原理却完全不同。
- cat name.csv 表示 cat 命令接收的输入是 notes.csv 文件名,那么要先打开这个文件,然后打印出文件内容。
- cat < name.csv 表示 cat 命令接收的输入直接是 notes.csv 这个文件的内容, cat命令只负责将其内容打印,打开文件并将文件内容传递给 cat 命令的工作则交给终端完成。
输入重定向 <<
将键盘的输入重定向为某个命令的输入。
sort -n << END # 输入这个命令之后,按下回车,终端就进入键盘输入模式,其中END为结束命令(这个可以自定义)wc -m << END # 统计输入的单词复
管道 |
把两个命令连起来使用,一个命令的输出作为另外一个命令的输入,英文是 pipeline ,可以想象一个个水管连接起来,管道算是重定向流的一种。
举几个实际用法案例:
cut -d , -f 1 name.csv | sort > sorted_name.txt
# 第一步获取到的 name 列表,通过管道符再进行排序,最后输出到sorted_name.txt
du | sort -nr | head
# du 表示列举目录大小信息# sort 进行排序,-n 表示按数字排序,-r 表示倒序# head 前10行文件
grep log -Ir /var/log | cut -d : -f 1 | sort | uniq
# grep log -Ir /var/log 表示在log文件夹下搜索 /var/log 文本,-r 表示递归,-I 用于排除二进制文件# cut -d : -f 1 表示通过冒号进行剪切,获取剪切的第一部分# sort 进行排序# uniq 进行去重复制代码
六、查看进程
在 Windows 中通过 Ctrl + Alt + Delete 快捷键查看软件进程。
w
帮助我们快速了解系统中目前有哪些用户登录着,以及他们在干什么。
ps
用于显示当前系统中的进程, ps 命令显示的进程列表不会随时间而更新,是静态的,是运行 ps 命令那个时刻的状态或者说是一个进程快照。
常用参数
- -ef 列出所有进程;
- -efH 以乔木状列举出所有进程;
- -u 列出此用户运行的进程;
- -aux 通过 CPU 和内存使用来过滤进程 ps -aux | less ;
- -aux --sort -pcpu 按 CPU 使用降序排列, -aux --sort -pmem 表示按内存使用降序排列;
- -axjf 以树形结构显示进程, ps -axjf 它和 pstree 效果类似。
top
获取进程的动态列表。
kill
结束一个进程, kill + PID 。
七、管理进程
进程状态
主要是切换进程的状态。我们先了解下 Linux 下进程的五种状态:
- 状态码 R :表示正在运行的状态;
- 状态码 S :表示中断(休眠中,受阻,当某个条件形成后或接受到信号时,则脱离该状态);
- 状态码 D :表示不可中断(进程不响应系统异步信号,即使用kill命令也不能使其中断);
- 状态码 Z :表示僵死(进程已终止,但进程描述符依然存在,直到父进程调用 wait4()系统函数后将进程释放);
- 状态码 T :表示停止(进程收到 SIGSTOP 、 SIGSTP 、 SIGTIN 、 SIGTOU 等停止信号后停止运行)。
前台进程 & 后台进程
默认情况下,用户创建的进程都是前台进程,前台进程从键盘读取数据,并把处理结果输出到显示器。例如运行 top 命令,这就是一个一直运行的前台进程。
后台进程的优点是不必等待程序运行结束,就可以输入其它命令。在需要执行的命令后面添加& 符号,就表示启动一个后台进程。
&
启动后台进程,它的缺点是后台进程与终端相关联,一旦关闭终端,进程就自动结束了。
cp name.csv name-copy.csv &
nohup
使进程不受挂断(关闭终端等动作)的影响。
nohup cp name.csv name-copy.csv
nohup 命令也可以和 & 结合使用。
nohup cp name.csv name-copy.csv &
bg
使一个"后台暂停运行"的进程,状态改为"后台运行"。
jobs
显示当前终端后台进程状态。
fg
fg 使进程转为前台运行,用法和 bg 命令类似。
我们用一张图来表示前后台进程切换:
我们可以使程序在后台运行,成为后台进程,这样在当前终端中我们就可以做其他事情了,而不必等待此进程运行结束。
八、文件压缩解压
- 打包:是将多个文件变成一个总的文件,它的学名叫存档、归档。
- 压缩:是将一个大文件(通常指归档)压缩变成一个小文件。
我们常常使用 tar 将多个文件归档为一个总的文件,称为 archive 。然后用 gzip 或 bzip2 命令将 archive 压缩为更小的文件。
tar
创建一个 tar 归档。
基础用法
tar -cvf sort.tar sort/
# 将sort文件夹归档为sort.tar
tar -cvf archive.tar file1 file2 file3
# 将 file1 file2 file3 归档为archive.tar复制代码
常用参数
- -cvf 表示 create(创建)+ verbose(细节)+ file(文件),创建归档文件并显示操作细节;
- -tf 显示归档里的内容,并不解开归档;
- -rvf 追加文件到归档, tar -rvf archive.tar file.txt ;
- -xvf 解开归档, tar -xvf archive.tar 。
gzip / gunzip
"压缩/解压"归档,默认用 gzip 命令,压缩后的文件后缀名为 .tar.gz 。
gzip archive.tar # 压缩gunzip archive.tar.gz # 解压
tar 归档+压缩
可以用 tar 命令同时完成归档和压缩的操作,就是给 tar 命令多加一个选项参数,使之完成归档操作后,还是调用 gzip 或 bzip2 命令来完成压缩操作。
tar -zcvf archive.tar.gz archive/ # 将archive文件夹归档并压缩
tar -zxvf archive.tar.gz # 将archive.tar.gz归档压缩文件解压
zcat、zless、zmore
之前讲过使用 cat less more 可以查看文件内容,但是压缩文件的内容是不能使用这些命令进行查看的,而要使用 zcat、zless、zmore 进行查看。
zcat archive.tar.gz
zip/unzip
"压缩/解压" zip 文件( zip 压缩文件一般来自 windows 操作系统)。
命令安装
# Red Hat 一族中的安装方式yum install zip yum install unzip 复制代码
基础用法
unzip archive.zip
# 解压 .zip 文件
unzip -l archive.zip
# 不解开 .zip 文件,只看其中内容
zip -r sort.zip sort/
# 将sort文件夹压缩为 sort.zip,其中-r表示递归
编译安装
简单来说,编译就是将程序的源代码转换成可执行文件的过程。大多数 Linux 的程序都是开放源码的,可以编译成适合我们的电脑和操纵系统属性的可执行文件。
基本步骤如下:
- 下载源代码
- 解压压缩包
- 配置
- 编译
- 安装
实际案例
1、下载
我们来编译安装 htop 软件,首先在它的官网下载源码:http://bintray.com/htop/source…[1]
下载好的源码在本机电脑上使用如下命令同步到服务器上:
scp 文件名 用户名@服务器ip:目标路径
scp ~/Desktop/htop-3.0.0.tar.gz root@121.42.11.34:.
也可以使用 wegt 进行下载:
wegt+下载地址
wegt https://bintray.com/htop/source/download_file?file_path=htop-3.0.0.tar.gz
2、解压文件
tar -zxvf htop-3.0.0.tar.gz
# 解压cd htop-3.0.0 # 进入目录
3、配置
执行 ./configure ,它会分析你的电脑去确认编译所需的工具是否都已经安装了。
4、编译
执行 make 命令
5、安装
执行 make install 命令,安装完成后执行 ls /usr/local/bin/ 查看是否有 htop 命令。如果有就可以执行 htop 命令查看系统进程了。
九、网络
ifconfig
查看 ip 网络相关信息,如果命令不存在的话, 执行命令 yum install net-tools 安装。
参数解析:
- eth0 对应有线连接(对应你的有线网卡),就是用网线来连接的上网。eth 是 Ethernet 的缩写,表示"以太网"。有些电脑可能同时有好几条网线连着,例如服务器,那么除了eht0 ,你还会看到 eth1 、 eth2 等。
- lo 表示本地回环( Local Loopback 的缩写,对应一个虚拟网卡)可以看到它的 ip 地址是 127.0.0.1 。每台电脑都应该有这个接口,因为它对应着"连向自己的链接"。这也是被称之为"本地回环"的原因。所有经由这个接口发送的东西都会回到你自己的电脑。看起来好像并没有什么用,但有时为了某些缘故,我们需要连接自己。例如用来测试一个网络程序,但又不想让局域网或外网的用户查看,只能在此台主机上运行和查看所有的网络接口。例如在我们启动一个前端工程时,在浏览器输入 127.0.0.1:3000 启动项目就能查看到自己的 web 网站,并且它只有你能看到。
- wlan0 表示无线局域网
host
ip 地址和主机名的互相转换。
ssh 连接远程服务器
通过非对称加密以及对称加密的方式(同 HTTPS 安全连接原理相似)连接到远端服务器。
***h
config 文件可以***h ,方便批量管理多个 ssh 连接。
配置文件分为以下几种:
- 全局 ssh 服务端的配置:/etc/ssh/sshd_config ;
- 全局 ssh 客户端的配置:/etc/ssh/ssh_config(很少修改);
- 当前用户 ssh 客户端的***h/config 。
配置当前用户的 config :
# 创建config
vim ~/.ssh/config
# 填写一下内容
Host lion # 别名 HostName 172.x.x.x # ip 地址 Port 22 # 端口 User root # 用户
这样配置完成后,下次登录时,可以这样登录 ssh lion 会自动识别为 root 用户。
[注意] 这段配置不是在服务器上,而是你自己的机器上,它仅仅是设置了一个别名。
wget
可以使我们直接从终端控制台下载文件,只需要给出文件的HTTP或FTP地址。
十 备份
scp
它是 Secure Copy 的缩写,表示安全拷贝。scp 可以使我们通过网络,把文件从一台电脑拷贝到另一台电脑。
scp 是基于 ssh 的原理来运作的, ssh 会在两台通过网络连接的电脑之间创建一条安全通信的管道, scp 就利用这条管道安全地拷贝文件。
scp source_file destination_file
# source_file 表示源文件,destination_file 表示目标文件
其中 source_file 和 destination_file 都可以这样表示:user@ip:file_name , user 是登录名, ip 是域名或 ip 地址。file_name 是文件路径。
scp root@192.168.1.5:/root/file.txt file.txt # 表示把远程电脑上的 file.txt 文件拷贝到本机
scp file.txt root@192.168.1.5:/root # 表示把我的电脑中当前文件夹下的 file.txt 文件拷贝到远程电脑
rsync
rsync 命令主要用于远程同步文件。它可以同步两个目录,不管它们是否处于同一台电脑。它应该是最常用于"增量备份"的命令了。它就是智能版的 scp 命令。
软件安装
yum install rsync复制代码
基础用法
rsync -arv Images/ backups/
# 将Images 目录下的所有文件备份到 backups 目录下
rsync -arv Images/ root@192.x.x.x:backups/
# 同步到服务器的backups目录下
常用参数
- -a 保留文件的所有信息,包括权限,修改日期等;
- -r 递归调用,表示子目录的所有文件也都包括;
- -v 冗余模式,输出详细操作信息。
默认地, rsync 在同步时并不会删除目标目录的文件,例如你在源目录中删除一个文件,但是用 rsync 同步时,它并不会删除同步目录中的相同文件。如果向删除也可以这么做:rsync -arv --delete Images/ backups/ 。
十一 系统
halt
关闭系统,需要 root 身份。
reboot
重启系统,需要 root 身份。
reboot
poweroff
直接运行即可关机,不需要 root 身份。
十二 Vim 编辑器
Vim 是什么?
Vim 是从 vi 发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器。
Vim 常用模式
- 交互模式
- 插入模式
- 命令模式
- 可视模式
交互模式
也成为正常模式,这是 Vim 的默认模式,每次运行 Vim 程序的时候,就会进入这个模式。
例如执行 vim name.txt 则会进入交互模式。
交互模式特征:
- 在这个模式下,你不能输入文本;
- 它可以让我们在文本间移动,删除一行文本,复制黏贴文本,跳转到指定行,撤销操作,等等
插入模式
这个模式是我们熟悉的文本编辑器的模式,就是可以输入任何你想输入的内容。进入这个模式有几种方法,最常用的方法是按字母键 i ( i、I、a、A、o、O 都可以进入插入模式,只是所处的位置不同),退出这种模式,只需要按下 Esc 键。
- i, I 进入输入模式 Insert mode :i 为"从目前光标所在处输入", I 为"在目前所在行的第一个非空格符处开始输入";
- a, A 进入输入模式 Insert mode :a 为"从目前光标所在的下一个字符处开始输入",A 为"从光标所在行的最后一个字符处开始输入";
- o, O 进入输入模式 Insert mode :o 为"在目前光标所在的下一行处输入新的一行";O 为在目前光标所在处的上一行输入新的一行。
命令模式
命令模式也称为底线命令模式,这个模式下可以运行一些命令例如"退出","保存",等动作。
也可以用这个模式来激活一些 Vim 配置,例如语法高亮,显示行号,等。甚至还可以发送一些命令给终端命令行,例如 ls、cp 。
为了进入命令模式,首先要进入交互模式,再按下冒号键。
用一张图表示三种模式如何切换:
基本操作
打开 Vim
在终端命令行中输入 vim 回车后 Vim 就会被运行起来,也可以用 Vim 来打开一个文件,只需要在 vim 后面再加文件名。如 vim file.name ,如果文件不存在,那么会被创建。
插入
进入文件之后,此时处于交互模式,可以通过输入 i 进入插入模式
移动
在 Vim 的交互模式下,我们可以在文本中移动光标。
- h 向左移动一个字符
- j 向下移动一个字符
- k 向上移动一个字符
- i 向右移动一个字符
当然也可以使用四个方向键进行移动,效果是一样的。
跳至行首和行末
- 行首:在交互模式下,为了将光标定位到一行的开始位置,只需要按下数字键 0 即可,键盘上的 Home 键也有相同效果。
- 行末:在交互模式下,为了将光标定位到一行的末尾,只需要按下美元符号键 $ 即可,键盘上的 End 键也有相同效果。
按单词移动
在交互模式下,按字母键 w 可以一个单词一个单词的移动。
退出文件
在交互模式下,按下冒号键 : 进入命令模式,再按下 q 键,就可以退出了。
如果在退出之前又修改了文件,就直接想用 :q 退出 Vim ,那么 Vim 会显示一个红字标明错误信息。此时我们有两个选择:
- 保存并退出 :wq 或 :x ;
- 不保存且退出 :q! 。
标准操作
删除字符
在交互模式下,将光标定位到一个你想要删除的字符上,按下字母键 x 你会发现这个字符被删除了。
也可以一次性删除多个字符,只需要在按 x 键之前输入数字即可。
删除(剪切)单词,行
- 删除一行:连按两次 d 来删除光标所在的那一行。
- 删除多行:例如先输入数字 2 ,再按下 dd ,就会删除从光标所在行开始的两行。
- 删除一个单词:将光标置于一个单词的首字母处,然后按下 dw 。
- 删除多个单词:例如先按数字键 2 再按 dw 就可以删除两个单词了。
- 从光标所在位置删除至行首:d0 。
- 从光标所在位置删除至行末:d$ 。
复制单词,行
- 复制行:按两次 y 会把光标所在行复制到内存中,和 dd 类似, dd 用于"剪切"光标所在行。
- 复制单词:yw 会复制一个单词。
- 复制到行末:y$ 是复制从光标所在处到行末的所有字符。
- 复制到行首:y0 是复制光标所在处到行首的所有字符。
粘贴
如果之前用 dd 或者 yy 剪切复制过来的,可以使用 p 来粘贴。同样也可以使用 数字+p来表示复制多次。
替换一个字符
在交互模式下,将光标置于想要替换的字符上。按下 r 键,接着输入你要替换的字符即可。
撤销操作
如果要撤销最近的修改,只需要按下 u 键,如果想要撤销最近四次修改,可以按下4,再按下 u 。
重做
取消撤销,也就是重做之前的修改使用 ctrl + r 。
跳转到指定行
Vim 编辑的文件中,每一行都有一个行号,行号从1开始,逐一递增。
行号默认是不显示,如果需要它显示的话,可以进入命令模式,然后输入 set nu ,如果要隐藏行号的话,使用 set nonu 。
- 跳转到指定行:数字+gg ,例如 7gg ,表示跳转到第7行。
- 要跳转到最后一行,按下 G 。
- 要跳转到第一行,按下 gg 。
高级操作
查找
处于交互模式下,按下 / 键,那么就进入查找模式,输入你要查找的字符串,然后按下回车。光标就会跳转到文件中下一个查找到的匹配处。如果字符串不存在,那么会显示 "pattern not found" 。
- n 跳转到下一个匹配项;
- N 跳转到上一个匹配项。
[注意] 用斜杠来进行的查找是从当前光标处开始向文件尾搜索,如果你要从当前光标处开始,向文件头搜索则使用 ? ,当然也可以先按下 gg 跳转到第一行在进行全文搜索。
查找并替换
替换光标所在行第一个匹配的字符串:
# 语法:s/旧字符串/新字符串# 实例:s/one/two
替换光标所在行所有旧字符串为新字符串:
# 语法:s/旧字符串/新字符串/g
替换第几行到第几行中所有字符串:
# 语法:n,m s/旧字符串/新字符串/g
# 实例:2,4 s/one/two/g
最常用的就是全文替换了:
# 语法:%s/旧字符串/新字符串/g
合并文件
可以用冒号 +r ( :r ) 实现在光标处插入一个文件的内容。
:r filename # 可以用Tab键来自动补全另外一个文件的路径
关于软件测试,要掌握的知识和技能有很多。 秋千学姐分类梳理了 500个 软件测试知识体系中的重点问题答案,对于工作中的技能提升和求职面试都有很大帮助,
很实操很干货,如果你需要,我发给你
包含功能测试、接口测试、自动化测试、数据库、Linux、计算机网络、抓包、算法、Python等内容
另外送软件测试各类电子书籍
面试或者工作中碰到的软件测试问题,欢迎在知乎、公众号、小红书提问, 秋千学姐 帮你解答
软件测试|推荐阅读:
秋千说软件测试:想拿30k软件测试offer,看大厂365道软件测试常问面试真题汇总
秋千说软件测试:2022最火的软件测试面试_计算机网络真题答案-通过率百分之百
秋千说软件测试:2022软件测试20k的offer,自动化测试面试题答案分享一波
秋千说软件测试:2022软件测试拿了20k的offer,Python面试题答案分享一波
秋千说软件测试:2022软件测试20k的offer,线程进程协程面试题答案分享一波
秋千说软件测试:2022软件测试拿了20k的offer,计算机网络面试题答案分享一波
秋千说软件测试:2022软件测试20k的offer,计算机网络面试题答案分享一波
职场经验|推荐阅读:
秋千说软件测试:从年薪200万领导身上学到的职场干货,弯道超车
秋千说软件测试:裁员最先裁哪类员工?看红楼梦检抄大观园就知道了
面试跳槽|推荐阅读:
秋千说软件测试:就业不景气,对抗焦虑和迷茫,只需要做对这1点
秋千说软件测试:为什么你的面试总是挂?面试官最讨厌的这些雷区别踩
二、15个经典会计面试题?
会计面试的题目大致分为普遍性的问题以及专业性的问题,主要有以下结论经典试题:
1、一般纳税人可抵扣票证有哪些?纳税申报的流程如何?
2、客户扣款(已开具发票)如何进行会计处理?需要附哪些原始单据?
3、年终奖是如何计算缴纳个人所得税的?
4、财政年报和汇算清缴报表口径有什么差异?
5、公司购买装修材料用来装修租用的办公用房,如何进行会计处理?
6、公司开办费如何进行会计核算?所得税清缴时如何进行调整?
7、你为什么离开以前的公司?
8、你目前的工作是什么?说说你工作的流程。
9、你觉得费用支出如何处理?(一般为服务行业)
10、公司成本如何核算?(一般为制造企业)
11、请你谈谈毕业之后的工作经历。
12、你现在或最近所做的工作,其职责是什么?你担任什么职务?
13、你认为你在工作中的成就是什么?
14、在你主管的部门中,遇到过什么困难?你是如何处理或应付过去的?
15、请谈一下你在企业中职务升迁和收入变化情况。
三、会计面试,比较经典的面试题有哪些?
经典的面试题,没有特别为会计行业的,但是我作为外企的财务经理,面试人员合计没有五百,也有四百了,给你分享我经历的公司财务面试专业题是什么。
1.固定资产购买,折旧和处置的会计凭证
这个问题是我们面试全球Top30的名校实习生时的面试题,看起来简单,但是真正回答出来的,只有十分之一的人。(考验专业知识)
2.关于报销的问题,如果公司的某个大老板报销他的出差费用,但是他的有笔发票丢失了,他拿了替代的发票,请问你怎么做?(考验沟通+职场会计专业知识+实务操作)
3.请描述一下从购买原材料到款项支付所有涉及的会计账务处理。
这个考验了一条线,一个流程的业务数字程度和涉及的财务知识。
四、经典面试题
在就业市场竞争激烈的今天,面试已成为企业招聘中不可或缺的环节。无论是毕业生还是职场人士,都需要准备好应对各种各样的面试题。而在面试题中,有一类经典面试题是经常被问到的,掌握了这些题目的解答技巧,对于成功通过面试将起到关键作用。
经典面试题一:“自我介绍”
自我介绍是每个面试中必不可少的环节,能够清晰、简洁地介绍自己对招聘岗位的适应度和个人优势将给面试官留下良好的第一印象。
解答此题需要注意以下几点:
- 简洁明了的个人基本信息。
- 强调适应招聘岗位的能力和经验。
- 突出个人优势,与其他应聘者区分开来。
经典面试题二:“你对我们公司了解多少?”
通过这个问题,面试官想了解你是否对该公司有所了解,并评估你的研究和准备能力。
在回答这个问题时,应该:
- 提前了解该公司的背景、业务以及最新动态。
- 强调与自身背景和职业目标相关的信息。
- 主动提出自己对公司的兴趣和理解,展示积极主动的态度。
经典面试题三:“请谈谈你在过去的工作或项目中遇到的困难及解决方案”
这个问题用来评估你的问题解决能力和应变能力。回答时应该:
- 选择一个具体的例子,通过故事的方式来展示自己的经历。
- 清晰地描述遇到的困难以及解决方案,突出自己承担责任和解决问题的能力。
- 体现自己的学习能力和成长性,说明从中获得了什么经验和教训。
经典面试题四:“为什么离开上一家公司?”
面试官通过这个问题来了解你离职的原因,是为了评估你是否稳定性和适应能力强。
回答此问题时应注意:
- 积极地表达离职的原因,并强调与自身职业规划相关的因素。
- 不要负面评价上一家公司或同事,保持积极、专业的态度。
- 突出对新职位的兴趣和动力,表达自己对未来发展的期望。
经典面试题五:“你的职业规划是什么?”
这是一个考察你的长期职业目标和规划的问题。
解答此题时应该:
- 用清晰、简洁的语言表达自己的职业目标。
- 结合公司和职位的特点,阐述自己与之匹配的能力和经验。
- 强调自己的学习能力和成长性,表达对于不断提升自己的追求。
经典面试题六:“你的优点和缺点是什么?”
通过这个问题,面试官想了解你的自我认知和反思能力。
回答此问题时应注重:
- 对自身的优点要真实、客观,与招聘岗位和企业文化匹配。
- 对于缺点,要选择相对不重要或可改善的方面,并展示积极的态度和解决问题的能力。
- 结合实例说明自己如何通过努力改善自身的不足。
以上就是一些经典面试题以及针对这些问题的解答技巧。掌握了这些题目的解答方法,将能够更加自信、流畅地回答面试官的问题,给对方留下深刻印象。当然,在面试过程中,还需要注意言谈举止、形象仪态等方面的表现,与优秀的答案相结合,才能在众多竞争者中脱颖而出,成功获得心仪的工作机会。
五、经典面试题目及最佳答案?
A、别的同仁认为我是老板前的红人,所以处处排挤我。
B、调薪的结果令我十分失望,完全与我的付出不成正比。
C、老板不愿授权,工作处处受限,绑手绑脚、很难做事。
D、公司营运状况不佳,大家人心惶惶。
解答:超过一半的人事主管选择C,其次为D.选择C的回答,可以显示应征者的企图心、能力强,且希望被赋予更多的职责。选择D,则是因离职原因为个人无法改变的客观外在因素,因此,面谈者也就不会对个人的能力或工作表现,有太多的存疑。
六、有哪些大厂经典面试题值得一看?
我在牛客网刷到过很多Java面试题,但是都没有答案!
但这一次我分享的就是有一份【Java面试宝典】含答案!你可以进行参考!最全的 Java 面试题,题目涉及 Java 基础、集合、多线程、IO、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等。题库共 600+ 道,带全部答案,非常齐全!——【传送门免费货区】
JVM
多线程
spring
MyBatis
SpringBoot
MySQL
网络
git
一、Java基础 44 道
1. 解释下什么是面向对象?面向对象和面向过程的区别?
2. 面向对象的三大特性?分别解释下?
3. JDK、JRE、JVM 三者之间的关系?
4. 重载和重写的区别?
5. Java 中是否可以重写一个 private 或者 static 方法?
6. 构造方法有哪些特性?
7. 在 Java 中定义一个不做事且没有参数的构造方法有什么作用?
8. Java 中创建对象的几种方式?
9. 抽象类和接口有什么区别?
10. 静态变量和实例变量的区别?
11. 12、short s1 = 1;s1 = s1 + 1;有什么错?那么 short s1 = 1; s1 += 1;呢?有没有错误?
12. Integer 和 int 的区别?
13. 装箱和拆箱的区别
14. switch 语句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?
15. 16、final、finally、finalize 的区别
16. == 和 equals 的区别?
17. 两个对象的 hashCode() 相同,则 equals() 也一定为 true 吗?
18. 为什么重写 equals() 就一定要重写 hashCode() 方法?
19. & 和 && 的区别?
20. Java 中的参数传递时传值呢?还是传引用?
21. Java 中的 Math.round(-1.5) 等于多少?
22. 如何实现对象的克隆?
23. 深克隆和浅克隆的区别?
24. 什么是 Java 的序列化,如何实现 Java 的序列化?
25. 什么情况下需要序列化?
26. Java 的泛型是如何工作的 ? 什么是类型擦除 ?
27. 什么是泛型中的限定通配符和非限定通配符 ?
28. List 和 List 之间有什么区别 ?
29. Java 中的反射是什么意思?有哪些应用场景?
30. 反射的优缺点?
31. Java 中的动态代理是什么?有哪些应用?
32. 怎么实现动态代理?
33. static 关键字的作用?
34. super 关键字的作用?
35. 字节和字符的区别?
36. String 为什么要设计为不可变类?
37. String、StringBuilder、StringBuffer 的区别?
38. String 字符串修改实现的原理?
39. String str = "i" 与 String str = new String("i") 一样吗?
40. String 类的常用方法都有那些?
41. final 修饰 StringBuffer 后还可以 append 吗?
42. Java 中的 IO 流的分类?说出几个你熟悉的实现类?
43. 字节流和字符流有什么区别?
44. BIO、NIO、AIO 有什么区别?
二、Java异常 9 道
1. finally 块中的代码什么时候被执行?
2. finally 是不是一定会被执行到?
3. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
4. try-catch-finally 中那个部分可以省略?
5. Error 和 Exception 的区别?
6. 运行时异常与受检异常有何异同?
7. throw 和 throws 的区别?
8. 常见的异常类有哪些?
9. 主线程可以捕获到子线程的异常吗?
三、Java集合 24 道
1. Java 中常用的容器有哪些?
2. ArrayList 和 LinkedList 的区别?
3. ArrayList 实现 RandomAccess 接口有何作用?为何 LinkedList 却没实现这个接口?
4. ArrayList 的扩容机制?
5. Array 和 ArrayList 有何区别?什么时候更适合用 Array?
6. HashMap 的实现原理/底层数据结构?JDK1.7 和 JDK1.8
7. HashMap 的 put 方法的执行过程?
8. HashMap 的 get 方法的执行过程?
9. HashMap 的 resize 方法的执行过程?
10. HashMap 的 size 为什么必须是 2 的整数次方?
11. HashMap 多线程死循环问题?
12. HashMap 的 get 方法能否判断某个元素是否在 map 中?
13. HashMap 与 HashTable 的区别是什么?
14. HashMap 与 ConcurrentHashMap 的区别是什么?
15. HashTable 和 ConcurrentHashMap 的区别?
16. ConcurrentHashMap 的实现原理是什么?
17. HashSet 的实现原理?
18. HashSet 怎么保证元素不重复的?
19. LinkedHashMap 的实现原理?
20. Iterator 怎么使用?有什么特点?
21. Iterator 和 ListIterator 有什么区别?
22. Iterator 和 Enumeration 接口的区别?
23. fail-fast 与 fail-safe 有什么区别?
24. Collection 和 Collections 有什么区别?
四、Java并发 42 道
1. 并行和并发有什么区别?
2. 线程和进程的区别?
3. 守护线程是什么?
4. 创建线程的几种方式?
5. Runnable 和 Callable 有什么区别?
6. 线程状态及转换?
7. sleep() 和 wait() 的区别?
8. 线程的 run() 和 start() 有什么区别?
9. 在 Java 程序中怎么保证多线程的运行安全?
10. Java 线程同步的几种方法?
11. Thread.interrupt() 方法的工作原理是什么?
12. 谈谈对 ThreadLocal 的理解?
13. 在哪些场景下会使用到 ThreadLocal?
14. 说一说自己对于 synchronized 关键字的了解?
15. 如何在项目中使用 synchronized 的?
16. 说说 JDK1.6 之后的 synchronized 关键字底层做了哪些优化,可以详细介绍一下这些优化吗?
17. 谈谈 synchronized 和 ReenTrantLock 的区别?
18. synchronized 和 volatile 的区别是什么?
19. 谈一下你对 volatile 关键字的理解?
20. 说下对 ReentrantReadWriteLock 的理解?
21. 说下对悲观锁和乐观锁的理解?
22. 乐观锁常见的两种实现方式是什么?
23. 乐观锁的缺点有哪些?
24. CAS 和 synchronized 的使用场景?
25. 简单说下对 Java 中的原子类的理解?
26. atomic 的原理是什么?
27. 说下对同步器 AQS 的理解?
28. AQS 的原理是什么?
29. AQS 对资源的共享模式有哪些?
30. AQS 底层使用了模板方法模式,你能说出几个需要重写的方法吗?
31. 说下对信号量 Semaphore 的理解?
32. CountDownLatch 和 CyclicBarrier 有什么区别?
33. 说下对线程池的理解?为什么要使用线程池?
34. 创建线程池的参数有哪些?
35. 如何创建线程池?
36. 线程池中的的线程数一般怎么设置?需要考虑哪些问题?
37. 执行 execute() 方法和 submit() 方法的区别是什么呢?
38. 说下对 Fork和Join 并行计算框架的理解?
39. JDK 中提供了哪些并发容器?
40. 谈谈对 CopyOnWriteArrayList 的理解?
41. 谈谈对 BlockingQueue 的理解?分别有哪些实现类?
42. 谈谈对 ConcurrentSkipListMap 的理解?
七、桌面运维常见经典面试题和答案?
1. 请介绍一下您的运维经验和技能。
2. 对于 Linux 操作系统,你有哪些熟练操作技巧?
3. 如何排查桌面应用程序的故障?
4. 如何设置和管理软件包仓库?
5. 请讲述一下您的网络配置和管理经验。
6. 如何执行服务器备份和恢复?
7. 如何使用监控工具来掌握系统健康状态?
8. 如何解决网络连接问题?
9. 如何处理和分析日志文件?
10. 如何保证系统和应用程序的安全性?
八、城市规划师面试,有哪些经典的面试题分享?
以下是对部分经典城市规划师面试问题的参考回答:
1. 请介绍你对城市规划的理解和认识。
回答:城市规划是一种综合性的学科和实践,旨在通过有效的土地利用、基础设施规划、环境保护和社会发展,为城市创造可持续、宜居和具有发展潜力的空间。城市规划师负责研究、设计和实施城市发展的策略和规划方案,以满足人们的需求,提高居民生活质量,并推动城市的经济、社会和环境可持续发展。
2. 请分享一个你参与的城市规划项目,并介绍你在其中的角色和贡献。
回答:我曾参与一项城市更新项目,旨在改善老旧城区的环境和社会条件。我作为项目团队的一员,负责收集和分析相关数据,进行社会调查和市民参与活动,并与政府部门、社区组织和居民进行密切合作。我的角色是协助制定城市规划方案,并提出具体的改进建议,以提高城市的可达性、环境质量和社会公平性。通过我的努力,我们成功实施了一系列项目,改善了居民的生活条件,并促进了城市的整体发展。
3. 你认为一个成功的城市规划师应具备哪些核心技能和素质?
回答:一个成功的城市规划师应具备以下核心技能和素质:
- 扎实的城市规划理论和知识基础。
- 准确的数据分析和解读能力。
- 具备综合思维和系统思考的能力。
- 良好的沟通和协调能力,能够有效与各利益相关者合作。
- 创新和创造性思维,能够提出可行的规划解决方案。
- 具备项目管理和团队合作能力。
- 对城市发展和社会问题的关注和热情。
4. 如何应对城市规划中的可持续发展挑战?
回答:可持续发展是城市规划中的重要考量因素。我认为可以从以下几个方面来应对可持续发展挑战:
- 制定综合的规划策略,平衡经济、环境和社会的发展目标。
- 优化土地利用,提高资源利用效率和空间利用。
当然,还有其他一些常见的城市规划师面试问题的参考回答:
5. 如何处理城市规划中的利益冲突和社会参与问题?
回答:在城市规划中,利益冲突和社会参与是常见的挑战。我认为应该采取以下措施来处理这些问题:
- 建立公正、透明和包容性的决策过程,确保各利益相关者的参与和意见被充分考虑。
- 进行广泛的社会参与和公众咨询,收集不同群体的意见和需求,以便更好地满足社会多样化的利益。
- 寻求权衡和妥协,通过对话和协商来解决利益冲突,寻找共同利益的点。
- 提供清晰的沟通和信息传递渠道,使各方能够了解决策的过程和结果。
6. 你认为城市规划与环境保护之间的关系是什么?如何平衡二者?
回答:城市规划与环境保护密切相关,二者之间存在紧密的关系。城市规划应该在保护和改善环境质量的基础上,实现城市的可持续发展。平衡二者可以通过以下方式实现:
- 制定环境友好型规划策略,包括绿色基础设施、生态保护和资源管理等,以确保城市的生态系统健康。
- 促进低碳和可再生能源的使用,减少对环境的不良影响。
- 鼓励可持续交通和城市设计,减少交通拥堵和碳排放。
- 引入环境评估和监测机制,对城市规划方案的环境影响进行评估和监测。
7. 请谈谈你对城市交通规划的理解和看法。
回答:城市交通规划是城市规划中的重要组成部分。我认为城市交通规划应该致力于提供高效、可持续和安全的交通系统,以满足居民的出行需求。在交通规划中,应该考虑以下方面:
- 综合交通网络规划,包括道路、公共交通、自行车道等,以提高交通系统的连通性和便利性。
- 促进可持续交通方式的发展,如公共交通、步行和自行车,以减少对汽车的
九、java基础面试题(经典)
大家好,欢迎来到我的博客!今天我要为大家分享的是关于Java基础面试题(经典)的内容。在准备面试之前,了解一些常见的面试题是非常重要的。这些问题考察了你对Java编程语言的基本理解和掌握情况,对于未来在实际工作中能否运用Java来解决问题起到了很好的检验作用。
什么是Java基础面试题(经典)?
Java基础面试题(经典)是指那些在Java编程语言的学习和应用过程中广泛问及的经典问题。这些问题涵盖了Java基础知识、语法、面向对象编程、集合框架、异常处理、多线程等方面。掌握了Java基础面试题(经典),你可以更好地理解和运用Java编程语言。
为什么要关注Java基础面试题(经典)?
在求职过程中,掌握Java基础面试题(经典)有助于提升你的竞争力。很多招聘者在面试中会问及一些经典的Java基础问题,这些问题旨在考察你对Java核心知识的掌握程度。通过事先准备并熟悉这些问题,你可以在面试中展现自己的知识水平,给招聘者留下深刻的印象,提高你被录用的机会。
Java基础面试题(经典)示例
接下来,我将为大家提供一些Java基础面试题(经典)的示例,希望能帮助大家更好地准备面试。
1. 请解释Java中的面向对象编程(OOP)是什么?
Java是一种面向对象编程语言,面向对象编程是一种软件开发方法,通过将实际世界中的事物抽象成对象来解决问题。在Java中,对象是根据类(Class)定义的,类是对象的模板,用于描述对象的属性和行为。
2. Java中的字符串是可变的还是不可变的?
在Java中,字符串是不可变的,也就是说一旦创建了一个字符串对象,就不能再改变它。当对字符串进行修改时,实际上是创建了一个新的字符串对象,原始字符串对象并没有改变。
3. 请解释Java中的静态方法和实例方法的区别。
静态方法是属于类的方法,可以直接通过类名调用,而不需要创建类的实例。静态方法中不能直接访问类的非静态成员,只能访问静态成员。实例方法是属于类的实例的方法,需要通过创建类的实例来调用,可以访问类的静态和非静态成员。
4. 什么是Java中的继承?如何实现继承?
继承是面向对象编程中的一个重要概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。在Java中,可以通过使用关键字“extends”来实现继承。
5. 请解释Java中的多态性是什么?怎么实现多态性?
多态性是指一个对象在不同情况下具有不同的表现形式或表现行为的能力。在Java中,多态性可以通过继承和接口来实现。当子类继承父类或实现接口时,可以以父类或接口类型引用子类对象,实现编译时的多态性。
6. Java中的异常处理机制是什么?
Java中的异常处理机制可以帮助我们更好地处理代码中可能出现的错误和异常情况。它通过使用try-catch语句块来捕获和处理可能发生的异常,从而保证程序的正常执行。
7. Java中的集合框架有哪些?
Java中的集合框架提供了一组实现了常用数据结构的类和接口。常见的集合框架包括List(列表)、Set(集合)、Map(映射)等。它们分别提供了不同的数据存储和访问方式,适用于不同的场景和需求。
8. 请解释Java中的线程是什么?如何创建和控制线程?
线程是程序执行的最小单元,它代表了一个独立的执行路径。在Java中,可以通过继承Thread类或实现Runnable接口来创建线程。线程的创建和控制可以使用Thread类提供的方法来实现,如start()、sleep()、join()等。
总结
通过准备和熟悉Java基础面试题(经典),你可以增加在Java面试中的竞争力,并展示自己的知识水平和技能。我希望本篇博客能够对你在面试中的准备有所帮助。
如果你对Java基础面试题(经典)有任何疑问或想进一步讨论,欢迎在评论区留言。谢谢大家的阅读!
十、经典面试题逆向思维
经典面试题逆向思维
引言
在职场竞争日益激烈的今天,找工作已经成为许多人急需解决的问题。面试是进入一家公司的敲门砖,而面试官往往会提出各种经典面试题来了解应聘者的能力和思维方式。如何在面试中脱颖而出?逆向思维或许是一个有效的策略。
什么是逆向思维?
逆向思维,顾名思义,就是指与常规思维方向相反的思考方式。在面对经典面试题时,我们往往会被固有的思维模式所限制,导致回答平淡无奇。而通过逆向思维,我们可以打破常规,提供独特且出色的答案,给面试官留下深刻印象。
经典面试题示例
接下来,我们将结合具体面试题,探讨如何运用逆向思维进行回答,展现出与众不同的魅力。
1. 如果让你设计一个没有关闭按钮的弹窗广告,你会怎么做?
常规思维:大多数人会觉得这个任务很困难,因为弹窗广告往往被用户视为打扰。他们可能会选择设计一个尽量不显眼的弹窗,或者提供一个“X”按钮来关闭。
逆向思维解法:我会设计一个极具创意的弹窗广告,让用户在不知不觉中产生好奇心和共鸣,从而愿意与之互动,而不需要关闭按钮。比如,利用文字和图案设计吸引用户点击,引发购买欲望。
2. 如果让你把整个英国都以一英寸地图的规模绘制在一个小房间里,你会怎么做?
常规思维:大多数人可能会觉得这个任务根本无法完成,因为英国的面积实在太大。他们可能会选择放弃或者设计一个缩小比例尺的地图。
逆向思维解法:我会选择运用抽象的符号和颜色来代表地理元素,同时利用房间的立体空间进行布局,呈现出英国的整体轮廓和重要标志,让观者一目了然。
结语
在面试中,经典面试题往往是考察应聘者思维跳跃和创造力的重要手段。通过逆向思维,我们可以打破思维定式,提供出色的答案,展现独特的视角和能力。希望本文对你在应对经典面试题时有所启发,祝你面试顺利!
- 相关评论
- 我要评论
-