18年12月份面試題積累【linux命令、redis基礎】

Linux命令

  1. 文件和目錄命令:ls,cd,mkdir,rm,rm -r,tree

  2. 拷貝和移動命令:cp,mv,pwd

  3. 文件內容命令:vi,cat,more,grep

  4. 遠程管理命令:ping,chkconfig iptables off,ifconfig

  5. 用戶權限及用戶管理命令:chmod,chgrp,useradd,passwd,userdel

  6. 軟件安裝及壓縮命令:tar,rpm,gzip壓縮命令,bzip2壓縮命令
    kill -9
    tail -f server.log
    ps -ef | grep java
    netstat –apn | grep 8080
    tail -n 10 test.log 查詢日誌尾部最後10行的日誌;
    head -n 10 test.log 查詢日誌文件中的頭10行日誌;

什麼是Redis?
Redis 是一個基於內存的高性能key-value數據庫,Redis是單進程單線程的
redis利用隊列技術將併發訪問變爲串行訪問,消除了傳統數據庫串行控制的開銷

使用Redis有哪些好處?
(1) 速度快,因爲數據存在內存中,類似於HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1)
(2) 支持豐富數據類型,支持string,list,set,sorted set,hash
(3) 支持事務,操作都是原子性,所謂的原子性就是對數據的更改要麼全部執行,要麼全部不執行
(4) 豐富的特性:可用於緩存,消息,按key設置過期時間,過期後將會自動刪除

redis相比memcached有哪些優勢?
(1) memcached所有的值均是簡單的字符串,redis作爲其替代者,支持更爲豐富的數據類型
(2) redis的速度比memcached快很多
(3) redis可以持久化其數據
(4) value大小,redis最大可以達到1GB,而memcache只有1MB

Redis的持久化
redis提供兩種方式進行持久化,一種是RDB持久化(原理是將Reids在內存中的數據庫記錄定時 dump到磁盤上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日誌以追加的方式寫入文件)
RDB默認開啓,redis.conf中配置
save < seconds> < changes> (key)

Redis DataBase(簡稱RDB)
執行機制:快照,直接將databases中的key-value的二進制形式存儲在了rdb文件中
優點:性能較高(因爲是快照,且執行頻率比aof低,而且rdb文件中直接存儲的是key-values的二進制形式,對於恢復數據也快)
使用單獨子進程來進行持久化,主進程不會進行任何IO操作,保證了redis的高性能
缺點:在save配置條件之間若發生宕機,此間的數據會丟失
RDB是間隔一段時間進行持久化,如果持久化之間redis發生故障,會發生數據丟失。所以這種方式更適合數據要求不嚴謹的時候

Append-only file (簡稱AOF)
執行機制:將對數據的每一條修改命令追加到aof文件
優點:數據不容易丟失
可以保持更高的數據完整性,如果設置追加file的時間是1s,如果redis發生故障,最多會丟失1s的數據;且如果日誌寫入不完整支持redis-check-aof來進行日誌修復;AOF文件沒被rewrite之前(文件過大時會對命令進行合併重寫),可以刪除其中的某些命令(比如誤操作的flushall)
缺點:性能較低(每一條修改操作都要追加到aof文件,執行頻率較RDB要高,而且aof文件中存儲的是命令,對於恢復數據來講需要逐行執行命令,所以恢復慢)
AOF文件比RDB文件大,且恢復速度慢。

MySQL裏有2000w數據,redis中只存20w的數據,如何保證redis中的數據都是熱點數據
redis 內存數據集大小上升到一定大小的時候,就會施行數據淘汰策略。
redis 提供 6種數據淘汰策略:
voltile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰
volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰
volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰
allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰
allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰
no-enviction(驅逐):禁止驅逐數據

redis有三種集羣方式:主從複製,哨兵模式和集羣
Redis集羣的同步方式?
從從同步。第一次同步時,主節點做一次bgsave,並同時將後續修改操作記錄到內存buffer,待完成後將rdb文件全量同步到複製節點,複製節點接受完成後將rdb鏡像加載到內存。加載完成後,再通知主節點將期間修改的操作記錄同步到複製節點進行重放就完成了同步過程。

redis的併發競爭問題如何解決?
Redis爲單進程單線程模式,採用隊列模式將併發訪問變爲串行訪問。Redis本身沒有鎖的概念,Redis對於多個客戶端連接並不存在競爭,但是在Jedis客戶端對Redis進行併發訪問時會發生連接超時、數據轉換錯誤、阻塞、客戶端關閉連接等問題,這些問題均是
由於客戶端連接混亂造成。對此有2種解決方法:
1.客戶端角度,爲保證每個客戶端間正常有序與Redis進行通信,對連接進行池化,同時對客戶端讀寫Redis操作採用內部鎖synchronized。
2.服務器角度,利用setnx實現鎖。
注:對於第一種,需要應用程序自己處理資源的同步,可以使用的方法比較通俗,可以使用synchronized也可以使用lock;第二種需要用到Redis的setnx命令,但是需要注意一些問題。

使用過Redis分佈式鎖麼,它是什麼回事?
先拿setnx來爭搶鎖,搶到之後,再用expire給鎖加一個過期時間防止鎖忘記了釋放。
這時候對方會告訴你說你回答得不錯,然後接着問如果在setnx之後執行expire之前進程意外crash或者要重啓維護了,那會怎麼樣?
這個鎖就永遠得不到釋放了。然後回答:我記得set指令有非常複雜的參數,這個應該是可以同時把setnx和expire合成一條指令來用的!

如果有大量的key需要設置同一時間過期,一般需要注意什麼?
如果大量的key過期時間設置的過於集中,到過期的那個時間點,redis可能會出現短暫的卡頓現象。一般需要在時間上加一個隨機值,使得過期時間分散一些。

nginx 文件服務器的瞭解

常用的排序算法的時間複雜度和空間複雜度
一組重複數較多的數據應該使用什麼排序算法,爲什麼?
堆排序的具體實現?
JVM的內存區域?
ClassLoader?類加載過程對應的內存區域的變化

HTTPS與HTTP的區別?
HTTPS怎樣實現加密?
HTTPS 就是在 HTTP 下加入了 SSL 層,從而保護了交換數據隱私和完整性,提供對網站服務器身份認證的功能,簡單來說它就是安全版的 HTTP。
一般來說,HTTPS 主要用途有三個:一是通過證書等信息確認網站的真實性;二是建立加密的信息通道;三是數據內容的完整性。
HTTPS=數據加密+網站認證+完整性驗證+HTTP

調用百度地圖API接口參考文檔地址
http://lbsyun.baidu.com/index.php?title=uri/api/web

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