1. 程式人生 > 實用技巧 >POJ 1015 Jury Compromise (完全揹包)

POJ 1015 Jury Compromise (完全揹包)

一、選擇題

1、DNS預設埠號是多少?(D

A、443  B、80  C、25  D、53

2、docker中以下哪個命令不正確?(B

A、docker run  B、docker file  C、docker exec  D、docker images

3、在shell指令碼中以下哪個選項不是關鍵字?(C

A、if  B、for  C、watch  D、while

4、列印/etc/passwd的奇數行?(A

A、sed -n '1~2p' /etc/passwd

B、sed -c '1~2p' /etc/passwd

C、sed -n '1~3p' /etc/passwd

5、Linux下檢視服務程式佔用的埠命令是什麼?(B

A、ps -aux

B、netstat -anp

C、watch

D、lsof

6、在Linux系統中,用來存放系統所需的配置檔案和子目錄的是(A

A、/etc

B、/var

C、/root

D、/home

7、(多選)下面哪些命令可以檢視file1檔案的第300-500行的內容?(B、C

A、cat file1 | tail -n | head -n 200

B、cat file 1 | head -n 500 | tail -n +300

C、sed -n '300,500p' file1

8、Linux下檢視磁碟使用情況的命令是?(B

A、dd  B、df  C、top  D、netstat

9、Linux檢視系統活躍程序的命令是?(A

A、ps  B、netstat  C、df  D、ifconfig

10、在shell中變數的賦值有四種方法,其中,採用name=12的方法稱為(A

A、直接賦值

B、使用read命令

C、使用命令列引數

D、使用命令的輸出

二、填空題

1、在Linux中,某檔案的許可權為:drw-r--r--,該許可權用數值形式表示為(644),修改檔案許可權用(chmod)命令。

2、在Linux系統中,以(檔案的)方式訪問裝置

3、連結分別為(硬連結)和(軟連結

4、(NAT)可以實現動態IP地址分配

5、DNS實際上是分佈在Internet上的主機資訊的資料庫,其作用是(FQDN)和(IP地址

)之間的轉換

6、當LAN內沒有條件建立DNS伺服器,但又想讓區域網內的使用者可以使用計算機名互相訪問時,應該配置(/etc/hosts)檔案

7、DHCP是動態主機配置協議的簡稱,其作用是:(伺服器控制一段IP地址範圍,客戶機登入伺服器時就可以自動獲得伺服器分配的IP地址和子網掩碼)

8、唯一標識每一個使用者的是(UID)和(使用者名稱

9、docker和虛擬機器的區別在於虛擬機器有(完整的作業系統

10、docker採用了一種(聯合)掛載的方式實現了可寫層

三、操作題

1、簡述Raid0、Raid1、Raid5、Raid10的區別?

答:

Raid0:條帶卷,將資料分為固定大小的資料塊,分別同時寫入到N個磁碟中,即每個磁碟只需讀寫1/N的資料,提高了讀寫效率。但是資料沒有冗餘,一旦有塊磁碟故障,整份資料都將不可用,安全性沒有保障

Raid1:映象卷,將資料寫入到N個磁碟中,即每個磁碟都有一份完整的資料。相當於寫了N份資料,寫磁碟效率很低,讀磁碟可從N個磁碟中同時讀取,讀磁碟效率提升,當一個磁碟損壞,還有其他的磁碟作為備份,資料安全性得到保障

Raid5:至少需要3塊磁碟,將資料分為固定大小的資料塊,分別寫到N-1塊磁碟中,剩餘的一塊用於生成校驗資訊,當有一塊磁碟故障時,可以通過校驗資訊還原資料,由於校驗資訊的壓力比較大,故所有磁碟輪流迴圈作為校驗盤。這樣即保障了讀寫效率也保障安全性

Raid10:先將磁碟組合為多組raid1,用於生成資料冗餘,再將這多組raid1組合為raid0,用於提高讀寫效率,所以Raid10至少要4塊磁碟。以4塊磁碟為例:資料會被分為n份,分別寫入到2組raid0中,然後每份資料又被寫2次,寫入到raid1的2塊磁碟中。這樣每份資料都有冗餘

2、通過shell指令碼部署一個httpd服務

#!/bin/bash
set -ue
RED='\e[1;31m'
GREEN='\e[1;32m'
END='\e[0m'


rpm -q httpd &> /dev/null && echo -e "${RED}httpd已經部署,無需安裝${END}"

#yum安裝依賴程式
yum install -y apr apr-devel apr-util-devel pcre-devel gcc make openssl-devel lbzip2 redhat-rpm-config

#下載並解壓原始碼包
wget -P /usr/local/src https://mirrors.aliyun.com/apache/httpd/httpd-2.4.46.tar.bz2 && cd /usr/local/src || echo -e "${RED}下載httpd原始碼包失敗,請檢查網路${END}"
tar xf httpd-2.4.46.tar.bz2 && cd httpd-2.4.46
./configure --prefix=/apps/httpd --sysconfdir=/etc/httpd --enable-ssl && make && make install
echo -e "${GREEN}httpd安裝成功${END}"

#建立apache使用者
useradd -r -s /sbin/nologin -d /var/www apache
sed -ri.bak 's/^User.*/User apache/' /etc/httpd/httpd.conf
sed -ri.bak 's/^Group.*/Group apache/' /etc/httpd/httpd.conf
#配置環境 echo
'PATH=/apps/httpd/bin:$PATH' > /etc/profile.d/httpd.sh echo -e "${GREEN}請重新讀取配置檔案/etc/profile.d/httpd.sh,之後可執行 apachectl start 或 httpd -k start 命令啟動httpd服務${END}"

3、通過dockerfile實現nginx的部署

答:

準備相關檔案

[root@ubuntu1804 dockerfile]#ls
Dockerfile  index.html  nginx-1.16.1.tar.gz  nginx.conf
[root@ubuntu1804 dockerfile]#cat nginx.conf 

user  nginx;
worker_processes  1;
...

編寫Dockerfile檔案

[root@ubuntu1804 dockerfile]#vim Dockerfile 

FROM    centos
LABEL   maintainer="jojohyj"
RUN     yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel \
&&      useradd -r -s /sbin/nologin nginx \
&&      yum clean all
ADD     nginx-1.16.1.tar.gz /usr/local/src
RUN     cd /usr/local/src/nginx-1.16.1 \
&&      ./configure --prefix=/apps/nginx \
&&      make && make install \
&&      rm -rf /usr/local/src/nginx* \
&&      ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx
#COPY   nginx.conf /apps/nginx/conf/
COPY    index.html /apps/nginx/html/
EXPOSE  80 443
CMD     ["nginx","-g","daemon off;"]

生成nginx映象

[root@ubuntu1804 dockerfile]#docker build --force-rm -t nginx:centos .

[root@ubuntu1804 dockerfile]#docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               centos              0f8801ce8afd        7 minutes ago       395MB
centos              latest              0d120b6ccaa8        2 days ago          215MB

生成容器測試

[root@ubuntu1804 dockerfile]#docker run -d -p 80:80 nginx:centos 
eeddc9c6faf40812a12060534c3e452b92369d0d98185e3cdfd84f3fcdbc0bc9
[root@ubuntu1804 dockerfile]#docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
eeddc9c6faf4        nginx:centos        "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp, 443/tcp   affectionate_leakey
[root@ubuntu1804 dockerfile]#curl 127.0.0.1
nginx base on centos

4、簡述TCP三次握手過程

答:

第 1 次握手:客戶端向伺服器傳送 SYN 報文(SEQ=x,SYN=1),並進入 SYN_SENT 狀態,等待伺服器確認

第 2 次握手實際上是分兩部分來完成的,即 SYN+ACK(請求和確認)報文。

  • 伺服器收到了客戶端的請求,向客戶端回覆一個確認資訊(ACK=x+1)。
  • 伺服器再向客戶端傳送一個 SYN 包(SEQ=y)建立連線的請求,此時伺服器進入 SYN_RECV 狀態

第 3 次握手:客戶端收到伺服器的回覆(SYN+ACK 報文)。此時,客戶端也要向伺服器傳送確認包(ACK)。此包傳送完畢客戶端和伺服器進入 ESTABLISHED 狀態,完成 3 次握手

5、docker容器時間跟本地時間不一致怎麼樣解決

答;

進入容器,刪除原有localtime檔案,建立正確時區檔案的軟連結為新的localtime檔案

[root@ubuntu1804 dockerfile]#docker exec -it ee bash
[root@eeddc9c6faf4 /]# date
Thu Aug 13 05:53:50 UTC 2020
[root@eeddc9c6faf4 /]# rm -f /etc/localtime 
[root@eeddc9c6faf4 /]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@eeddc9c6faf4 /]# date
Thu Aug 13 13:54:39 CST 2020
[root@eeddc9c6faf4 /]#