面試題彙總(五)

1 字符串的拼接 如何高效的拼接兩個字符串

用+號拼接javascript

2 字符串a='not 404 found 張三 99 深圳',每一個次中間是空格,用正則過濾掉英文和數字,最終輸出'張三,深圳'

import re a = "not 404 found 張三 99 深圳" L = a.split(" ") # ['not', '404', 'found', '張三', '99', '深圳'] res = re.findall("\d+|[a-zA-Z]+", a) # ['not', '404', 'found', '99'] tmp = [item for item in L if not item in res] # ['張三', '深圳'] print(" ".join(tmp)) html

3 給定一個整數數組 nums, 其中剛好有兩個元素之出現一次,其他全部元素均出現兩次,找出只出現一次的那兩個元素

def singleNumber(nums):   d={}   l=[]   for i in nums:     if i in d:       d[i]+=1     else:       d[i]=1     for k,v in d.items():       if v==1:       l.append(k)   return l前端

4 請寫出一段python代碼實現刪除一個list裏面的重複元素

s=set(list),而後再list(s)java

5 python中深淺拷貝的區別

淺拷貝:拷貝了最外圍的對象自己,內部的元素都只是拷貝了一個引用而已。也就是,把對象複製一遍,可是該對象中引用的其餘對象我不復制python

深拷貝:外圍和內部元素都進行了拷貝對象自己,而不是引用。也就是,把對象複製一遍,而且該對象中引用的其餘對象我也複製。mysql

6 python中is 和==的區別

is檢查兩個對象是不是同一個對象,而==檢查他們是否相等.linux

7 簡述一下觀察者模式

觀察者模式是說你有一個觀察者列表,這個列表中的函數或者某種功能都在觀察某個事件的發生,一旦發生,這些函數或者功能就會自動執行,nginx

8 簡述python多進程,多線程的區別以及適用場景

多進程 數據共享複雜,須要用IPC;數據是分開的,同步簡單 佔用內存多,切換複雜,CPU利用率低 建立銷燬、切換複雜,速度慢 編程簡單,調試簡單 進程間不會互相影響 適應於多核、多機分佈式;若是一臺機器不夠,擴展到多臺機器比較簡單 多線程 由於共享進程數據,數據共享簡單,但也是由於這個緣由致使同步複雜 佔用內存少,切換簡單,CPU利用率高建立銷燬、切換簡單,速度很快 編程複雜,調試複雜 一個線程掛掉將致使整個進程掛掉 適應於多核分佈式程序員

1)須要頻繁建立銷燬的優先用線程 2)須要進行大量計算的優先使用線程 3)強相關的處理用線程,弱相關的處理用進程 4)可能要擴展到多機分佈的用進程,多核分佈的用線程 5)都知足需求的狀況下,用你最熟悉、最拿手的方式web

9 簡述同步異步模型

函數或方法被調用的時候,調用者是否獲得最終的結果。

直接獲得最終結果的結果,就是同步調用。(打飯模型,打飯不打好不走開,直到打飯給我後才離開)

不直接獲得的最終的結果,就是異步調用。(打飯,不會一直等着,會時不時的過來看看,打完了把飯拿走,異步不保證多長時間打完了飯)

10 舉例熟悉的python web框架並說明

  1. Django

Django是一個開源的Web應用框架,由Python寫成,支持許多數據庫引擎,可讓Web開發變得迅速和可擴展,並會不斷的版本更新以匹配Python最新版本,若是是新手程序員,能夠從這個框架入手。 二、Flask

?Flask是一個使用 Python 編寫的輕量級 Web 應用框架。其 WSGI 工具箱採用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 受權。

?Flask也被稱爲 「microframework」 ,由於它使用簡單的核心,用 extension 增長其餘功能。Flask沒有默認使用的數據庫、窗體驗證工具。

?Flask 很輕,花不多的成本就可以開發一個簡單的網站。很是適合初學者學習。Flask 框架學會之後,能夠考慮學習插件的使用。例如使用 WTForm + Flask-WTForm 來驗證表單數據,用 SQLAlchemy + Flask-SQLAlchemy 來對你的數據庫進行控制。

三、Tornado

?Tornado是一種 Web 服務器軟件的開源版本。Tornado 和如今的主流 Web 服務器框架(包括大多數 Python 的框架)有着明顯的區別:它是非阻塞式服務器,並且速度至關快。

?得利於其 非阻塞的方式和對epoll的運用,Tornado 每秒能夠處理數以千計的鏈接,所以 Tornado 是實時 Web 服務的一個 理想框架。

11若是custname字符串的編碼格式爲utf-8,如何將custname的內容轉化爲gbk18030的字符串

 

12 r,r+,rb,rb+文件打開模式的區別

r 只讀模式 r+ 讀寫,能夠寫,內容在文件最開頭 rb 讀取一些非文本形式,二進制形式文件用到 rb+ 二進制讀寫

13 Jquery的美圓符號$有什麼做用

在 jQuery 中,美圓符號($)僅僅是 jQuery 的別名,就表明了jQuery對象,例如,$("div") 和 jQuery("div")是等價的。 注意兩點: 一、即便不使用 $ 也能保證jQuery的全部功能性。 二、爲了不與其餘javascript庫的衝突,能夠釋放 jQuery 對 $ 變量的控制,同時爲 jQuery 變量規定新的自定義名稱。例如: 執行 var jq=$.noConflict(); 後,$ 將再也不控制當前的jQuery, 而是讓渡給了jq變量,此時jq("div") 和 jQuery("div")是等價的

數據庫相關

一、列舉幾種錶鏈接方式,有什麼區別,笛卡爾積是什麼?

''' 內鏈接、自鏈接、外鏈接(左、右、全)、交叉鏈接 內鏈接:只有兩個元素表相匹配的才能在結果集中顯示。 外鏈接: 左外鏈接:左邊爲驅動表,驅動表的數據所有顯示,匹配表的不匹配的不會顯示。 右外鏈接:右邊爲驅動表,驅動表的數據所有顯示,匹配表的不匹配的不會顯示。 全外鏈接:鏈接的表中不匹配的數據所有會顯示出來。 交叉鏈接: 笛卡爾效應,顯示的結果是連接表數的乘積。

'''

二、數據庫表結構須要變更的時候的數據庫設計原則是什麼?

''' 1:表必需要有主鍵。 2:一個字段只表示一個含義。 3:老是包含兩個日期字段:gmt_create(建立日期),gmt_modified(修改日期),且這兩個字段不該該包含有額外的業務邏輯。 4:MySQL中,gmt_create、gmt_modified使用DATETIME類型。 5:禁止使用複雜數據類型(數組,自定義類型等)。 6: MySQL中,附屬表拆分後,附屬表id與主表id保持一致。不容許在附屬表新增主鍵字段。 7: MySQL中,存在過時概念的表,在其設計之初就必須有過時機制,且有明確的過時時間。過時數據必須遷移至歷史表中。 8: MySQL中,再也不使用的表,必須通知DBA予以改名歸檔。 9: MySQL中,線上表中如有再也不使用的字段,爲保證數據完整,禁止刪除。 10: MySQL中,禁止使用OCI驅動,所有使用THI驅動。 '''

三、簡述mysql、redis、mongodb、memcache等數據源的特色,以及其適用場景

'''

MongoDB: ---非關係型數據庫,屬於文檔型數據庫。由數據庫、集合、文檔對象三個層次組成。數據具有自述性,呈現分層的樹狀數據結構,數據結構由鍵值(key=>value)對組成! ---適合場景:事件的記錄,內容管理或者博客平臺等等。

MySQL: ---關係型數據庫。在不一樣的引擎上有不一樣 的存儲方式。查詢語句是使用傳統的sql語句,擁有較爲成熟的體系,成熟度很高。 ---適用場景:一、Web網站系統2:日誌記錄系統3:數據倉庫系統4:嵌入式系統

Redis: ---非關係型數據庫。Redis數據所有存在內存,按期寫入磁盤,當內存不夠時,能夠選擇指定的LRU算法刪除數據。 ---應用場景:偏重於進程順序寫入,雖然支持集羣,也僅限於主-從模式 1.配合關係型數據庫作高速緩存 2.緩存高頻次數據,下降數據庫io 3.分佈式架構,作session共享

Memcache: ---不能持久化存儲

,存儲數據有限制:1M 【大於1M,認爲就行分割】(內存碎片),mm存儲數據只能key-value,集羣數據沒有複製和同步機制 【崩潰不會影響程序,會從數據庫中取數據】,內存回收不能及時 ---應用場景:1.分佈式應該,2.數據庫前段緩存,3.服務器間數據共享。

'''

四、當MySQL查詢遇到性能瓶頸的時候,如何優化(各類維度)

''' 硬件、系統配置、數據庫表結構、SQL及索引 優化成本:硬件>系統配置>數據庫表結構>SQL及索引

優化效果:硬件<系統配置<數據庫表結構<SQL及索引 https://www.jianshu.com/p/4af41b682e06

'''

五、當MongoDB查詢遇到性能瓶頸的時候,如何排查優化

''' 1.在查詢條件、排序條件、統計條件的字段上選擇建立索引,能夠顯著提升查詢效率。

2.用$or時把匹配最 多 結果的條件放在最前面,用$and時把匹配最 少 結果的條件放在最前面。

3.使用limit()限定返回結果集的大小,減小數據庫服務器的資源消耗,以及網絡傳輸的數據量。

4.儘可能少用$in,而是分解成一個一個的單一查詢。尤爲是在分片上,$in會讓你的查詢去每個分片上查一次,若是實在要用的話,先在每一個分片上建索引。

5.儘可能不用模糊匹配查詢,用其它精確匹配查詢代替,好比$in、$nin。

6.查詢量大、併發大的狀況,經過前端加緩存解決。

7.能不用安全模式的操做就不用安全模式,這樣客戶端不必等待數據庫返回查詢結果以及處理異常,快了一個數量級。

8.MongoDB的智能查詢優化,判斷粒度爲query條件,而skip和limit都不在其判斷之中,當分頁查詢最後幾頁時,先用order反向排序。

9.儘可能減小跨分片查詢,balance均衡次數少。

10.只查詢要使用的字段,而不查詢全部字段。

11.更新字段的值時,使用$inc比update效率高。

12.apped collections比普通collections的讀寫效率高。

13.server-side processing相似於SQL查詢的存儲過程,能夠減小網絡通信的開銷。

14.必要時使用hint()強制使用某個索引查詢。

15.若是有本身的主鍵列,則使用本身的主鍵列做爲id,這樣能夠節約空間,也不須要建立額外的因此。

16.使用explain,根據exlpain plan進行優化。

17.範圍查詢的時候儘可能用$in、$nin代替。

18.查看數據庫查詢日誌,具體分析的效率低的操做。

19.mongodb有一個數據庫優化工具database profiler,可以檢測數據庫操做的性能。能夠發現query或者write操做中執行效率低的,從而針對這些操做進行優化。

20.儘可能把更多的操做放在客戶端,固然這就是mongodb設計的理念之一。

'''

部署類

一、簡述一下docker,以及適用場景

''' docker: http://www.javashuo.com/article/p-xmgchlxt-hg.html ---Docker是一個基於容器技術的系統,一個爲開發人員和系統管理員提供的分佈式應用程序的開放平臺 特色:開箱即用,快速部署,可移植性強,環境隔離 ---適用場景:1. 簡化配置2. 代碼流水線管理3. 提升開發效率4. 隔離應用5. 整合服務器6. 調試能力7. 多租戶環境8. 快速部署 '''

二、簡述一下K8S,以及裏面經常使用的組件功能

''' Kubernetes: http://www.javashuo.com/article/p-hdpvynmr-s.html ---是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,它的目標是讓部署容器化的應用簡單而且高效,Kubernetes提供了應用部署,規劃,更新,維護的一種機制 組件: ---Master組件: Node組件:主要負責提供容器的各類依賴環境,並接受Master管理 核心附件:由第三方提供的特定應用程序 '''

三、當NGINX代理websocket的時候,常常會遇到定時斷開的問題,請問如何解決?

''' 一、只要配置nginx.conf的對應localhost裏面的這幾個參數就好 proxy_connect_timeout; proxy_read_timeout; proxy_send_timeout; 二、發心跳包,原理就是在有效地再讀時間內進行通信,從新刷新再讀時間(配置的位置爲localhost,給出簡略地址) http { server { location / { root html; index index.html index.htm; proxy_pass http://webscoket; proxy_http_version 1.1; proxy_connect_timeout 4s; #配置點1 proxy_read_timeout 60s; #配置點2,若是沒效,能夠考慮這個時間配置長一點 proxy_send_timeout 12s; #配置點3 proxy_set_header Upgrade $http_upgrade; #這是webSocket的配置 proxy_set_header Connection "Upgrade"; #這是webSocket的配置 } } }

'''

四、nginx是否能實現熱重啓,並簡述緣由

'''

'''

五、當不使用docker集羣時,如何保證程序進程不會被殺掉並持續提供服務?或者簡述supervisor

'''

'''

調試類

一、當藉口開發完成是,與前端溝通聯調須要注意哪些方面?

二、對於產品製做的用來描述功能的ue文檔,如何拆解成能夠開發的功能?在這方面須要注意那些?

三、當有一個新功能血藥開發的時候,如何規劃,而且如何協調?

四、若是你做爲小隊管理者,如何分派工做

自我認知與職業發展

一、您是否有您本身的職業規劃,是否能夠簡單描述一下 二、您認爲您擅長作那些工做、不上場那些工做? 三、您但願在我司得到那些成長?當從我司離職的時候您但願成爲何樣的人?

求打印test和list_new的值。 test = [{'day':1,'no':101},{'day':2,'no':301}, {'day':3,'no':3}, {'day':1,'no':401},{'day':3,'no':201}] list_new = list(test)

for i in test: if i['no']<=300: i['type'] = 'FB' else: i['type'] = 'BK'

list_new1 = 7

list_new.pop()

 

print(test) print('--------------------------') print(list_new)

[{'day': 1, 'no': 101, 'type': 'FB'}, {'day': 7, 'no': 301, 'type': 'BK'}, {'day': 3, 'no': 3, 'type': 'FB'}, {'day': 1, 'no': 401, 'type': 'BK'}, {'day': 3, 'no': 201, 'type': 'FB'}]

[{'day': 1, 'no': 101, 'type': 'FB'}, {'day': 7, 'no': 301, 'type': 'BK'}, {'day': 3, 'no': 3, 'type': 'FB'}, {'day': 1, 'no': 401, 'type': 'BK'}]

問題1】編寫shell腳本將/SB1DATA目錄下大雨10k的文件轉移到/SB1BAEOD1目錄下

vim first.sh

#! /bin/bash cd /SB1DATA for i in ls -l |awk '{if($5>10240){print $9}}' do mv $i/SB1BAEOD1 echo "done!" done guoch=date +%Y%m%d

mkdir ${guoch}

================================================

相關文章
相關標籤/搜索