面試官常問的 微服務 問題(一)

1. j2ee 常用的設計模式有哪些?說一下工廠模式

j2ee 常用的設計模式總共 23 種,分爲三大類:創建型,結構型,行爲型。

創建型模式(5):Factory(工廠模式)、抽象工廠模式、Singleton(單例模式)、Prototype(原始模型模式)、Builder(建造模式)
結構型模式(7):Adapter(適配器模式)、Bridge(橋樑模式)、Proxy(代理模式)、Composite(合成模式)、Decorator(裝飾模式)、Facade(門面模式)、Flyweight(享元模式)
行爲型模式(11): Iterator(迭代器模式)、TemplateMethod(模板方法模式)、Command(命令模式)、Strategy(策略模式)、Mediator(調停者模式)、Visitor(訪問者模式)、Interpreter(解釋器模式)、Observer(觀察者模式)、ChainOfResponsibleity(責任鏈模式)、State(狀態模式)、Memento(備忘錄模式)

工廠模式:是一種常被用到的創建型模式,它提供了一種創建對象的最佳方式。
工廠模式中,在創建對象時不會對客戶端暴露創建邏輯,是通過使用一個共同的接口來指向新創建的對象。

工廠模式
意圖:定義一個創建對象的接口,讓其子類自己決定實例化哪一個工廠類,使其創建過程延遲到子類進行。

主要解決接口選擇問題;明確地計劃不同條件下創建不同實例時使用。

如何解決:讓其子類實現工廠接口,返回的也是一個抽象的產品。

關鍵代碼:創建過程在其子類執行。

應用實例:
1、需要一輛汽車,可以直接從工廠裏面提貨,而不用去管這輛汽車是怎麼做出來的,以及這個汽車裏面的具體實現。
2、Hibernate 換數據庫只需換方言和驅動就可以。

優點:
1、一個調用者想創建一個對象,只要知道其名稱就可以了。
2、擴展性高,如果想增加一個產品,只要擴展一個工廠類就可以。
3、屏蔽產品的具體實現,調用者只關心產品的接口。

缺點:每次增加一個產品時,都需要增加一個具體類和對象實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴。這並不是什麼好事。

使用場景:
1、日誌記錄器:記錄可能記錄到本地硬盤、系統事件、遠程服務器等,用戶可以選擇記錄日誌到什麼地方。
2、數據庫訪問,當用戶不知道最後系統採用哪一類數據庫,以及數據庫可能有變化時。
3、設計一個連接服務器的框架,需要三個協議,“POP3”、“IMAP”、“HTTP”,可以把這三個作爲產品類,共同實現一個接口。

注意事項:
作爲一種創建類模式,在任何需要生成複雜對象的地方,都可以使用工廠方法模式。
複雜對象適合使用工廠模式;簡單對象,特別是只需要通過 new 就可以完成創建的對象,無需使用工廠模式。
如果使用工廠模式,就需要引入一個工廠類,會增加系統的複雜度。

2. 開發中都用到了那些設計模式?用在什麼場合?

MVC模式(用在表示層,解決視圖與流程的控制【struts框架】);
DAO模式(用在數據層,封裝數據訪問操作,爲業務層提供數據服務);
loc模式(減少業務層中對象的依賴關係,減少代碼耦合,提高系統可擴展性【spring框架】);
singleton單例模式與factory工廠模式(可快速獲取對象實例【hibernate中通過sessionfactory獲取session】);
bridge模式(jdbc驅動訪問數據庫);

每個模式都描述了一個在我們的環境中不斷出現的問題,然後描述了該問題的解決方案的核心。
通過這種方式,你可以無數次地使用那些已有的解決方案,無需在重複相同的工作。

主要用到了 MVC 的開發模式。用來開發 JSP/Servlet 或者 J2EE 的相關應用。簡單工廠模式等。

  1. MVC模式,在J2EE項目開發中主要用在表示層框架中,很好解決視圖和流程控制。在項目中採用的Struts、WebWork等框架。

  2. DAO模式,在項目開發中主要用在數據層,封裝數據的訪問操作,爲業務層提供數據服務。

  3. Ioc模式,在項目開發中業務層有大量對象,他們之間存在依賴關係,可以使用Ioc模式減少他們之間的代碼耦合,提高系統的可擴展性。實際項目中使用的Spring框架來實現業務組件的裝配。

  4. Observer模式,在Servlet的監聽器中應用到了觀察者模式。

  5. singleton單例模式和Factory工廠模式結合使用在項目中,無需使用者瞭解過多的細節就可獲取有關的對象實例。比如Hibernate項目中通過SessionFactory來獲取Session。

  6. bridge模式,在項目中使用JDBC驅動訪問數據庫。

3. 什麼是 Linux ?

Linux 是一個性能穩定的多用戶、多任務、多線程、多CPU網絡操作系統。

Linux 是一套免費使用和自由傳播的類Unix操作系統,是一個多用戶、多任務、支持多線程和多CPU的操作系統。
它能運行主要的 UNIX 工具軟件、應用程序和網絡協議,它支持32位和64位硬件。
Linux 繼承了 Unix 以網絡爲核心的設計思想,是一個性能穩定的多用戶網絡操作系統。

Linux 安全性、性能比 windos 高,一般用來部署生產。
Linux 系統:系統穩定;快速修補安全性和漏洞;用戶與用戶組的規劃;系統資源佔用少。

Linux 系統的特點:

  1. 模塊化程度高
    Linux 的內核設計非常精巧,分成五大部分:進程調度、進程間通信、內存管理、虛擬文件系統、網絡接口;
    其獨特的模塊機制,可根據用戶的需要,實時地將某些模塊插入內核,或從內核中移走,使得 Linux 系統內核可以裁剪得非常小巧,很適合於嵌入式系統的需要。

  2. 源碼公開
    由於 Linux 系統的開發從一開始就與 GNU項目 緊密地結合起來,所以它的大多數組成部分都直接來自 GNU項目。任何人、任何組織只要遵守GPL條款,就可以自由使用 Linux 源代碼,爲用戶提供了最大限度的自由度。這一點也正投嵌入式系統所好,因爲嵌入式系統應用千差萬別,設計者往往需要針對具體的應用對源碼進行修改和優化, 所以是否能獲得源代碼對於嵌入式系統的開發是至關重要的。
    Linux 的軟件資源十分豐富,每種通用程序在 Linux 上幾乎都可以找到,並且數量還在不斷增加。這一切就使設計者在其基礎之上進行二次開發變得非常容易。
    Linux 源代碼公開,也使用戶不用擔心有“後閘”等安全隱患,同時,源碼開放給各教育機構提供極大的方便,從而也促進了Linux的學習、推廣和應用。

  3. 廣泛的硬件支持
    Linux 能支持 x86、ARM、MIPS、ALPHA、PowerPC等多種體系結構的微處理器,目前已成功地移植到數十種硬件平臺,幾乎能運行在所有流行的處理器上。
    由於世界範圍內有衆多開發者在爲 Linux 的擴充貢獻力量,所以 Linux 有着異常豐富的驅動程序資源,支持各種主流硬件設各和最新的硬件技術,甚至可在沒有存儲管理單元 MMU 的處理器上運行,這些都進一步促進了 Linux 在嵌入式系統中的應用。

  4. 安全性及可靠性好
    內核高效穩定,Linux內核的高效和穩定已在各個領域內得到了大量事實的驗證。
    Linux中大量網絡管理、網絡服務等方面的功能,可使用戶很方便地建立高效穩定的防火牆、路由器、工作站、服務器等。
    爲提高安全性,它還提供了大量的網絡管理軟件、網絡分析軟件和網絡安全軟件等。

  5. 具有優秀的開發工具
    開發嵌入式系統的關鍵是需要有一套完善的開發和調試工具。
    傳統的嵌入式開發調試工具是在線仿真器(In Circuit Emulator,ICE),它通過取代目標板的微處理器,給目標程序提供一個完整的仿真環境,從而使開發者能非常清楚地瞭解到程序在目標板上的工作狀態,便於監視和調試程序。
    在線仿真器的價格非常高,而且只適合做非常底層的調試。
    如果使用的是嵌人式 Linux,一旦軟硬件能支持正常的串口功能,即使不用在線仿真器,也可以很好地進行開發和調試工作,從而節省了一筆不小的開發費用。
    嵌入式Linux爲開發者提供了一套完整的工具鏈(Tool Chain),能夠很方便地實現從操作系統到應用軟件各個級別的調試。

  6. 有很好的網絡支持利文件系統支持
    Linux 從誕生之日起就與 Internet 密不可分,支持各種標準的 Internet 網絡協議,並且很容易移植到嵌入式系統當中。目前,Linux幾乎支持所有主流的網絡硬件、網絡協議和文件系統,因此它是NFS的一個很好的平臺。
    由於Linux有很好的文件系統支持(例如,它支持Ext2、FAT32、romfs等文件系統),是數據各份、同步和複製的良好平臺,這些都爲開發嵌入式系統應用打下了堅實的基礎。

  7. 與 UNIX 完全兼容
    目前,在Linux中所包含的工具和實用程序,可以完成UNIX的所有主要功能。
    但由於Linux不是爲實時而設計的,因而這就成了Linux在實時系統中應用的最大遺憾。不過,目前有衆多的自由軟件愛好者正在爲此進行不懈的努力,也取得了諸多成果。

Linux與win的區別
windows平臺 :數量和質量的優勢,不過大部分爲收費軟件;由微軟官方提供重要支持和服務 ;
Linux平臺 :大都爲開源自由軟件,用戶可以修改定製和再發布,由於基本免費沒有資金支持,部分軟件質量和體驗欠缺;有全球所有的Linux開發者和自由軟件社區提供支持;

4. 常見的 Linux 版本有哪些?你最擅長哪一種?說明你擅長哪一塊?

常見的 Linux 發行版有,CentOS,RedHat, KaliLinux,Suse ,Debian,Gentoo,Ubuntu,Fedora等,我最擅長 CentOS,擅長部分命令使用, 腳本編程,環境服務搭建與配置。

常用Linux命令:

ls -a 顯示指定目錄下所有目錄與文件,包括隱藏文件
ls -l 以列表的方式顯示文件的詳細信息
cd 回到家目錄(/home/用戶目錄)
mkdir -p 遞歸創建目錄
rm -f 強制刪除,忽略不存在的文件,無需提示 (使用rm命令要小心,因爲文件刪除後不能恢復 )
rm -r 遞歸地刪除目錄下的內容,刪除文件夾時必須加此參數

5. 你所知道的虛擬化產品有幾種?是否接觸到 docker?

VMware(workstation/esxi)、Kvm、Xen、virtualbox。
在自己電腦上實戰過 VM,配置 jdbc、安裝 MySQL。
接觸過 docker(新一代的虛擬化技術),在線上服務器使用 docker 跑過 php 環境,使用 docker 可以很方便地部署好環境,節省了部署和配置的時間。
docker 消耗非常小,可以開十幾臺虛擬機,放到容器裏就行,可以達到與宿主機幾乎一致的性能效果,並可與宿主機進行數據共享。

6. Linux 的安全如何做?從哪些方面入手,請簡要說明步驟?

Linux 有防火牆,可以加規則,烏班圖的防火牆默認不開的;
(阿里雲的ecs)雲服務器:部署項目需要配置安全組。

  1. 關閉不用的服務
  2. 用 iptables 限定規則,只開放 22,80 等常用端口
  3. 禁止 root 用戶直接登錄服務器,只允許密鑰驗證,配置合適的 sudo 規則 (不建議用,root用戶不能禁)
  4. 限定登錄服務器的 ip 白名單
  5. Apache/nginx 配置文件中配置 web 認證、訪問控制、限定某些目錄禁止解析等操作
  6. 設置 php.ini,禁掉高危函數,配置合適的 open_basedir。

apache 怎麼實現負載均衡?

多臺機器跑 apache,然後其中一臺跑 nginx,讓 nginx 去代理多臺 apache 實現負載均衡

一臺Linux服務器負載高,連接慢,怎麼查看

先用 w 看負載多少,用 top 看哪個進程佔用 cpu 高,同時用 top 按 M 看哪個進程佔用內存多,用 iotop 看哪個進程讀寫頻發,用 sar 命令或者 nload 命令查看網卡流量,是否跑滿帶寬。

7. Linux 下常用目錄有哪些?分別有什麼作用?

bin(存放系統中最基本的用戶命令,普通用戶都有執行權限);
etc(存放系統及各種程序的配置文件,配置文件較多的程序會在“etc”目錄下建立獨立的子目錄,用於存放各自的配置文件);
usr(存放其他的用戶應用程序,通常還被劃分爲很多子目錄,用於存放不通類型的應用程序);

/boot:存放啓動系統所必需的文件,包括內核文件、啓動菜單配置文件等。出於系統安全考慮;
“/boot”目錄通 常被劃分爲獨立 的分區,稱爲“/boot”分區;
/bin: 存放系統中最基本的用戶命令,普通用戶都有執行權限;
/dev:存放系統中的硬盤、鍵盤、鼠標、光驅等各種設備文件;
/etc:存放系統及各種程序的配置文件,配置文件較多的程序會在“etc”目錄下建立獨立的子目錄,用於存放各自的 配置文件;
/home:存放所有普通用戶系統用戶的默認工作目錄(又稱爲宿主目錄),例如用戶帳號“zhangsan”對應的宿主 目錄位於“/home/zhangsan”。如果服務器需要提供給大量的普通用戶使用,建議將/home 目錄劃分獨立分區,以方便用戶數據的備份。
/root: 爲 Linux 系統超級用戶 root 的宿主目錄,默認情況下只有 root 的宿主目錄在根目錄下,而不是在/home 下。
/sbin:存放最基本的管理命令,一般管理員用戶纔有執行權限。
/usr:存放其他的用戶應用程序,通常還被劃分爲很多子目錄,用於存放不通類型的應用程序。
/var: 存放系統中經常需要變化的一些文件,如系統日誌、用戶郵箱目錄等。
/tmp:存放系統運行過程中使用的一些臨時文件。

8. ftp 的幾種模式比較?

主動模式:傳送數據時是“服務器”連接到“客戶端”的端口;
被動模式:傳送數據是“客戶端”連接到“服務器”的端口。

主動模式需要客戶端必須開放端口給服務器,很多客戶端都是在防火牆內,開放端口給 FTP 服務器訪問比較困難。

被動模式只需要服務器端 開放端口給客戶端連接就行了。
1)主動 FTP:
命令連接:客戶端>1024 端口 -> 服務器 21 端口
數據連接:客戶端>1024 端口 <- 服務器 20 端口

2)被動 FTP:
命令連接:客戶端>1024 端口 -> 服務器 21 端口
數據連接:客戶端>1024 端口 -> 服務器 >1024 端口

(很少用!!!瞭解即可!)

FTP(File Transfer Protocol,文件傳輸協議) 是 TCP/IP 協議組中的協議之一。FTP協議包括兩個組成部分,其一爲FTP服務器,其二爲FTP客戶端。其中FTP服務器用來存儲文件,用戶可以使用FTP客戶端通過FTP協議訪問位於FTP服務器上的資源。在開發網站的時候,通常利用FTP協議把網頁或程序傳到Web服務器上。此外,由於FTP傳輸效率非常高,在網絡上傳輸大的文件時,一般也採用該協議。
默認情況下FTP協議使用TCP端口中的 20和21這兩個端口,其中20用於傳輸數據,21用於傳輸控制信息。但是,是否使用20作爲傳輸數據的端口與FTP使用的傳輸模式有關,如果採用主動模式,那麼數據傳輸端口就是20;如果採用被動模式,則具體最終使用哪個端口要服務器端和客戶端協商決定。

9. Linux 引導加載的先後順序是 BIOS kernel GRUB MBR RAID?

BIOS -> RAID -> MBR -> GRUB -> kernel

10.使用 vi 編輯器時有哪些不同的模式?

1)命令模式: 這是你在編輯模式下開始的模式
2)編輯模式:這是允許你進行文本編輯的模式
3)Ex 模式:這是你用 vi 與 vi 交互的模式處理文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章