最后
看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。
开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题。
注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友
互联网工程师必备的面试1000题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
- 2.3.8.for循环与if条件判断
===================================================================
ansible-galaxy:
-
连接https://galaxy.ansible.com下载相应的roles
-
列出所有安装的galaxy:ansible-galaxy list [xxx]
-
删除galaxy:ansible-galaxy remove [xxx]
ansible-vault:
-
对剧本进行加密:ansible-vault encrypt 剧本1
-
对剧本进行解密:ansible-vault decrypt 剧本1
-
查看加密后的剧本:ansible-vault view 剧本1
-
编辑加密后的剧本:ansible-vault edit 剧本1
-
修改加密口令:ansible-vault rekey 剧本1
-
加密后的剧本无法运行,需要先解密
===================================================================
剧本中常用的模块可以看这篇:
playbook是由一个或多个“play”组成
ansible-playbook语法:
ansible-playbook [选项] 剧本1 剧本2
YAML基本语法:
-
使用缩进表示层级关系,不允许使用Tab🗡,缩进的空格数不重要,但是一定要统一
-
剧本后缀为".yml"或".yaml"
-
#代表注释
-
布尔值灵活,不区分大小写的true/false;yes/no;on/off;y/n;0/1都被允许
-
一个完整的代码块至少元素包括name:task
下面通过一个简单的例子了解一下playbook:
- hosts: web
remote_user: root
tasks:
- name: hello world
command: hostname
然后通过以下命令运行剧本:当然这个剧本可能没显示什么内容
ansible-playbook test.yaml
如果只想看运行效果,不实际执行,可以用这条命令:
ansible-playbook -C test.yaml
以上剧本中各行内容含义:
-
“—”没有什么特殊含义,表示这是一个剧本文件,省略也没有错误
-
hosts代表对哪些主机运行剧本,主机清单存放在
/etc/ansible/hosts
文件 -
remote_user表示以什么身份运行
-
tasks表示任务,可以有一个或多个
-
hosts:执行的远程主机清单
-
tasks:任务级,一个或多个
-
varniables:内置变量或自定义变量
-
templates:模板,可替换模板文件中变量实现一些逻辑的文件
-
handlers:与notity结合使用,触发器,满足条件即执行
-
tags:标签
2.3.1.忽略错误信息
如果执行剧本时由于一个可能出现的错误导致整个剧本无法继续执行,可以使用以下方法来忽略错误
- 命令或脚本退出码不为0的情况,意思是即使错误也返回为真
tasks:
- name: xxx
shell: 命令 ||/bin/true
- 或使用ignore_errors忽略错误
tasks:
- name: xxx
shell: 命令
ignore_errors: True
2.3.2.handlers和notify结合形成触发器
-
handlers:是task列表,与其他task并没有什么不同,作用于关注的资源发生改变时,处罚一定的操作。
-
notify:此action用于在每个play的最后被触发,可避免有多次发生改变时每次都执行指定操作,仅在所有的变化发生完成后一次性的执行指定操作。
tasks:
- name: install httpd
yum: name=httpd
- name: config file
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify: restart service
- name: start service
service: name=httpd state=started enabled=yes
handlers:
- name: restart service
service: name=httpd state=restarted
以上代码中handlers与notify的含义是,当服务的配置文件发生变化时,将处罚服务的重启动作。
handlers是可以有多个的。
2.3.3.tags的使用
- 相当于给某个action起一个标签,例如下面这个例子。
tasks:
- name: install httpd
yum: name=httpd
tags: inhttpd
-
name: xxx
-
name: xxx
标签的效果是执行剧本时不会全部执行,只会执行带有标签的动作。
在剧本中可以多个动作共同使用一个标签。
ansible-playboos -t inhttpd httpd.yml
这个命令就是☞执行这个剧本的标签为inhttpd的一个动作,举例不好,看懂就行。
2.3.4.变量
- 变量名:只能由字母、数字和下划线组成,且只能字母开头
变量来源:
- ansible setup facts远程主机的所有变量可直接使用
ansible web -m setup -a ‘filter=xxx’
例:
ansible web -m setup -a ‘filter=address’
- 在主机清单中定义:可针对单独主机定义,也可针对组定义,单独主机优先级更高
下面这个例子说明了针对单台主机的变量与针对组都有效的变量。
例:
[web]
192.168.10.3 http_port=80
192.168.10.4 http_port=81
[web:vars]
nodename=www
- 通过命令指定变量,优先级最高
ansible-playbook -e varname=value
例:
tasks:
- name: install pkg
yum: name={{ pkgname }}
ansible-playbook -e ‘pkgname=nginx’ nginx.yml
- 在playbook中定义
vars:
-
var1: value1
-
var2: value2
例:
vars:
- pkgname: nginx
tasks:
- name: install pkg
yum: name={{ pkgname }}
- 还可以创建单独的变量文件,在剧本中引用,比如以下这个例子
#创建变量文件
vim vars.yml
var1: httpd
var2: vsftpd
#在剧本中调用变量
- hosts: web
remote_user: root
vars_files:
- vars.yml
#接下来就可以在剧本中调用变量了
tasks:
- name: install pkg
yum: name={{ var1 }}
2.3.5.模板
-
将配置文件中的一些配置信息替换成变量,传递到远端服务器时会根据主机信息生成新的配置信息
-
使用jinja2语言,使用字面量,有字符串,数字,列表,元组,字典和布尔值等类型
#字符串
可使用单引号或双引号
#数字
可使用整数或浮点数
#列表
[item1,item2]
#元组
(item1,item2)
#字典
{key1:value1,}
#布尔值
true/false
- 可进行算数运算:
+、-、*、/、//、%、**
- 比较操作:
==、!=、>、<…
- 逻辑运算:
and、or、not
- 流表达式
for、if、when
- 建议创建一个存放模板的templates的文件夹,与playbook平级
在剧本中的用法可以看下面这个例子:
- name: copy template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
j2模板样式示例:以nginx为例写下部分内容
vim /etc/nginx/nginx.conf
这个例子代表nginx启动的进程数根据cpu的核数来决定
user nginx;
worker_processes {{ ansible_processes_vcpus }}
这个例子代表nginx启动的进程数是cpu核数的2倍
user nginx;
worker_processes {{ ansible_processes_vcpus*2 }}
2.3.6.when
- 条件测试判断
作为条件可以使用远程主机的变量表示
举一个例子:如果系统是redhat系列,则执行命令
- name: xxx
shell: xxx
when: ansible_os_family == “redhat”
总结
至此,文章终于到了尾声。总结一下,我们谈论了简历制作过程中需要注意的以下三个部分,并分别给出了一些建议:
- 技术能力:先写岗位所需能力,再写加分能力,不要写无关能力;
- 项目经历:只写明星项目,描述遵循 STAR 法则;
- 简历印象:简历遵循三大原则:清晰,简短,必要,要有的放矢,不要海投;
以及最后为大家准备的福利时间:简历模板+Java面试题+热门技术系列教程视频
2.3.6.when
- 条件测试判断
作为条件可以使用远程主机的变量表示
举一个例子:如果系统是redhat系列,则执行命令
- name: xxx
shell: xxx
when: ansible_os_family == “redhat”
总结
至此,文章终于到了尾声。总结一下,我们谈论了简历制作过程中需要注意的以下三个部分,并分别给出了一些建议:
- 技术能力:先写岗位所需能力,再写加分能力,不要写无关能力;
- 项目经历:只写明星项目,描述遵循 STAR 法则;
- 简历印象:简历遵循三大原则:清晰,简短,必要,要有的放矢,不要海投;
以及最后为大家准备的福利时间:简历模板+Java面试题+热门技术系列教程视频
[外链图片转存中…(img-gY2QvTJE-1715810367793)]
[外链图片转存中…(img-82Z5P5FZ-1715810367793)]
[外链图片转存中…(img-LqfV6tPK-1715810367794)]