23,java面试题高级十年

💬格言:你未必出类拔萃,但一定与众不同!🔥

📕 系列专栏:

🍎 阶段一:windows基础                        目前原创16篇

🍎 阶段二:Linux基础知识                      目前原创38篇

🍎 阶段三:shell基础+shell高级              目前原创23篇

🍎 阶段四:python基础及自动化应用      原创未开始

🍎 阶段五:Linux网络服务                       原创未开始

🍎 阶段六:集群原理及架构                     原创未开始

🍎 阶段七:云计算虚拟化技术                 原创未开始

目录

1、函数

1.1shell函数定义的语法格式:

1.2举例:加到多少键盘输入决定

1.3Shift参数左移指令

1.4举例:加法计算器

2.trap命令

2.1trap用法举例:

3.cgroup详解

3.1cgroup主要功能:

3.2cgroup子系统:

3.3限制进程使用系统CPU百分比。


1、函数


shell函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好,放在指定位置,使用时直接调用即可。

shell中的函数和C++、JAVA、Python等其他编程语言中的函数类似,只是在语法中有所差别。

1.1shell函数定义的语法格式:


function name() {

    statements

    [return value]    

}

对各个部分的说明:

function是shell中的关键字,专门用来定义函数;

name是函数名;

statements是函数要执行的代码,也就是一组语句;

return value表示函数的返回值,此处用方括号括起来表示这部分可以写也可以不写;

由{ }包围的部分称为函数体,调用一个函数,实际上就是执行函数体中的代码

函数定义的简化写法:

函数定义时可以不写function关键字:


name() {

    statements

    [return value]

}

如果写了function关键词,可以省略函数名后面的括号:


function name {

    statements

    [return value]

}



1.2举例:加到多少键盘输入决定

我们自己写一个函数,还是之前的从1加到100的循环。但这次我们用函数来实现, 不过不再是从1加到100了,而是让用户自己决定加到多少:

通过调用函数名的方式来调用到整个函数里的所有程序


[root@xiaopeng ~]# cat function.sh

#!/bin/bash 

function 函数名 () { 

    s=0 

    for (( i=0;i<=$1;i=i+1 )) 

        do 

            s=$(( $i+$s )) 

        done 

    echo  "$s" 

}

read -p "请输入最大的数值:" num 

y=$(echo $num | sed 's/[0-9]//g') 

if [ -z "$y" ] 

    then 

        函数名 $num 

    else 

        echo "警告,请输入阿拉伯数字!" 

fi

1.3Shift参数左移指令

作用:每执行一次,参数序列顺次左移一个位置,$#的值减1,用于分别处理每个参

数,移出去的参数,不再可用。

1.4举例:加法计算器


[root@xiaopeng ~]# cat shift.sh 

#!/bin/bash 

if [ $# -le 0 ];then 

    echo “没有足够的参数” 

    exit 

fi

sum=0 

while  [  $#  -gt  0  ]  ; do

    sum=$[$sum+$1] 

    shift 

    # shift 2 一次移动2个参数 

done 

echo result is $sum 

测试:


[root@xiaopeng ~]# bash a shift.sh 11 2 3 4 

result is 20 

2.trap命令


命令格式为:

trap “执行动作” SIGINT(检测信号)

用于指定在接收到信号后将要采取的动作,常见的用途是在脚本程序被中断时完成清理工作。

trap -l:查询trap能够接收的信号。和kill -l相似

trap命令格式为:trap “执行动作” SIGINT(检测信号)整体命令为检测到SIGINT

信号或INT信号时会去执行echo 999的命令。但是只在命令行中执行可能会遇到的 问题是。trap命令在当前命令生效, 而一些比如tail -f /var/log/message命令在 子shell生效,所以并不能看到echo 9999的效果。而且,命令行中能够执行的 命令 有限,通常情况下trap命令会写到脚本中并且"执行动作"会用函数来代替。

2.1trap用法举例:


[root@xiaopeng ~]# cat test.sh 

#!/bin/bash 

#trap 'mytrap'

[video(video-8PGqMbZO-1716354551447)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=1804892953)(image-https://img-blog.csdnimg.cn/img_convert/d03a705143646f4f3f6ea879d59b2788.png)(title-必看视频!获取2024年最新Java开发全套学习资料)]

 SIGINT INT   #执行动作为函数mytrap,接收信号为SIGINT或INT 

#trap 'mytrap' SIGINT       #执行动作为函数mytrap,接收信号为SIGINT 

trap 'mytrap' INT           #执行动作为函数mytrap,接收信号INT 

mytrap() {                  #定义函数mytrap 

    echo "Now,you are doing the QUIT"         #输出字符串到h.txt中 

    tail -5 /var/log/messages >> /root/h.txt   #追加message后5行到 h.txt 

    exit 1 									  #退出 

}

while true 											  #while循环输出数字1111 

do 

    /usr/bin/echo "111111" 

done

[root@localhost ~]# ./test.sh 

111111 

^C111111 

Now,you are doing the QUIT 

[root@xiaopeng ~]# cat h.txt 

Oct 22 18:00:01 localhost systemd: Started Session 27 of user root. 

Oct 22 18:01:01 localhost systemd: Started Session 28 of user root.

**3.**cgroup详解


cgroup:全称Linux Control Group,是Linux内核的一个功能,用来限制,控制与分离 一个进程组群的资源(比如CPU、内存、磁盘IO等)。

在Linux内核中,容器(container)一词太过广泛,为避免混淆被重新命名为cgroup,

并被合并到2.6.24版本内核中。

Linux Cgroup可以为系统运行进程的用户自定义群组分配资源,比如CPU时间、系统内 存、网络带宽等。可以监控配置的cgroup,拒绝cgroup访问某些资源,甚至在运行 的系统中配置cgroup

3.1cgroup****主要功能:

1.限制资源使用。如内存使用上限以及文件系统的缓存限制。

2.优先级控制,CPU利用率和磁盘IO吞吐。

3.挂起进行,恢复执行进程。

3.2cgroup子系统:

1.CPU子系统,主要限制进程的CPU使用率。

2.CPUacct子系统,可以统计cgroups中进程的CPU使用报告。

3.cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点。

4.memory 子系统,可以限制进程的 memory 使用量。

如何快速更新自己的技术积累?

  • 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
  • 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
  • 学习以后不知道有没有学成,则可以通过面试去检验。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

八年CRUD,疫情备战三个月,三面头条、四面阿里拿offer面经分享

4.memory 子系统,可以限制进程的 memory 使用量。

如何快速更新自己的技术积累?

  • 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
  • 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
  • 学习以后不知道有没有学成,则可以通过面试去检验。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目

[外链图片转存中…(img-pZjMo3A1-1720155701586)]

[外链图片转存中…(img-s55QB4jn-1720155701587)]

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值