日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

给产品经理讲技术

發布時間:2023/12/9 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 给产品经理讲技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1Web前端技術

AJAX技術的妙用

  • AJAX是一項用于異步拉取數據并展示在當前頁面的技術

  • 1、不用刷新網頁

  • 2、本地網頁從后臺調取數據

  • 3、緩解用戶等待的焦慮感

  • 網頁沒有刷新是指一個空網頁渲染到屏幕上,單擊網頁中的一個鏈接后,又打開了一個新的網頁。

  • 其實,這種只讓部分頁面刷新的技術叫作AJAX(漢語讀音為“阿賈克斯”或“額寨克思”),它是“Asynchronous JavaScript And XML”的首字母縮寫,翻譯為“異步JavaScript和XML”。

  • JavaScript(縮寫為JS)是一種高級的、多范式、解釋型的編程語言,是一門基于原型、函數先行的語言,它支持面向對象編程、命令式編程以及函數式編程。它提供語法來操控文本、數組、日期以及正則表達式,不支持I/O(比如網絡、存儲和圖形等),但可以由它的宿主環境提供支持。

  • XML(Extensible Markup Language),中文為可擴展標記語言,標準通用標記語言的子集,是一種用于標記電子文件使其具有結構性的標記語言。XML可以用來標記數據、定義數據類型,可以允許用戶對自己標記語言進行定義,是對人和機器都比較友好的數據承載方式。

  • 它主要解決的就是不用刷新網頁,就能和后臺交互獲取數據,并應用于當前網頁的問題

  • 抓包是攔截查看網絡數據包內容的軟件,通過對抓獲的數據包進行分析,對軟件debug有很大幫助。

  • JSON(JavaScriptObject Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。它基于ECMAScript(歐洲計算機協會制定的js規范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。

  • 發起網絡請求。發起網絡請求的能力由瀏覽器的內置能力提供,所有的瀏覽器都提供了XmlHttpRequest對象,它可以由網頁調用,用來連接一個特定的地址。

  • XMLHTTP是一組API函數集,可被JavaScript、JScript、VBScript以及其它web瀏覽器內嵌的腳本語言調用,通過HTTP在瀏覽器和web服務器之間收發XML或其它數據。XMLHTTP最大的好處在于可以動態地更新網頁,它無需重新從服務器讀取整個網頁,也不需要安裝額外的插件。該技術被許多網站使用,以實現快速響應的動態網頁應用。例如:Google的Gmail服務、Google Suggest動態查找界面以及Google Map地理信息服務。中文名XmlHttpRequest外文名XMLHTTP優點得到了所有現代瀏覽器較好的支持特點提供了對 HTTP 協議的完全的訪問標準化對象還沒有標準化

  • 無須刷新,可動態操作網頁。我們先引入術語 DOM(Document Object Model,文檔對象模型)

  • AJAX是一項用于異步拉取數據并展示在當前頁面的技術,這對需要延遲加載數據和觸發式加載數據的頁面有很大益處。絕大多數網頁為了加速響應,都會用到這項技術。

DOM是什么

  • DOM(文檔對象模型)是Web前端里最基礎、最常用的一個模型。

  • 瀏覽器在解析HTML文檔時,會把每個標簽抽象成代碼里的對象,按照這種層次分明的結構組織,這就是DOM。

  • 很多網頁一開始加載出來的只是個架子,只顯示出一個loading圖標的轉圈動畫,只有等JavaScript從服務器上請求到真正的數據后操縱DOM來顯示數據,才能看到內容,這就是典型的異步加載。

靜態網頁與動態網頁

  • HTML是網頁的基礎結構,網頁如何排版、每個元素在什么位置,都是由它來描述的。

  • 靜態網頁和動態網頁的核心區別是后臺是否有數據庫的支撐,也可以簡單地描述為網頁上展示的內容是否要變化,是因人而異地顯示不同的內容(例如QQ空間),還是根據時間線呈現內容的變化(例如新聞客戶端),或是一直保持不變(例如一些國企或政府網站)。

  • (1)靜態網頁和動態網頁都是網頁。

  • (2)靜態網頁不需要后臺程序干預處理,直接由服務器返回。實現為靜態網頁后,一般不需要維護,因為數據不需要更新。

  • (3)動態網頁一般需要由程序來處理(ASP、JSP、PHP、Python、Ruby等),并由數據庫提供數據支撐。

  • (4)不要以URL的形式來判斷一個網頁是靜態的還是動態的,而應該看頁面的屬性(產品經理最好具備一些調試技巧和經驗)。

  • (5)動態網頁更靈活。

分析URL的結構

  • 一個標準的 URL 地址由protocol、hostname、port、path、parameters、query 幾部分組成。

  • protocol:指 http://部分,是協議的意思。協議就是一套規則,定義了數據的封裝、打包、拆包和解釋的規則,http://即表示只能通過HTTP這套規則訪問這個頁面資源

  • hostname:hostname稱為主機名

  • port: port稱為端口號,一般HTTP的端口號為80,HTTPS的為443,可以理解為計算機有很多個提供服務的點

  • path:hostname后面的一長串全部稱為path,是“路徑”的意思,即最終文件所在的路徑和文件名,只不過此地址的文件存儲在騰訊的服務器上

  • parameters:?a=1&b=2&c=3這一部分稱為參數(parameters),也叫查詢。

網頁基礎知識:表單

  • 表單在很早的 HTML 版本中就已經存在,它是用戶輸入和網頁之間數據交互的一個界面,在HTML中用標簽標記。

  • 總結:表單是用戶和服務器數據交互的用戶界面,一切向服務器提交的數據都是由其中的幾個簡單的標簽組成的。

H5應用程序緩存簡介

  • Application Cache是HTML 5中定義的一種離線存儲技術標準。

  • 這種技術可以讓開發者明確地指定頁面中哪些靜態資源可以在第一次訪問網頁的同時緩存到本地,并且在下次訪問該網頁時向服務器詢問本地緩存的資源是否需要更新

Chrome里的冷知識

  • DevTools:如果讀者在瀏覽某些網站時按“F12”鍵啟動開發者工具,會在Console這個Tab下收到網站開發者的留言,不過這些留言大多是一些招聘信息,因為這樣做針對性很強,這些信息幾乎只有開發工程師才能看到。

  • 恐龍小游戲

  • 變色的標題欄

  • 指定搜索引擎:可以在Chrome的地址欄里直接輸入淘寶或者知乎的域名,然后按“Tab”鍵,Chrome的地址欄就顯示“用××搜索”,我們緊接著輸入想搜索的內容,按回車鍵,結果就直接顯示出來了

  • 計算器

  • 執行 JavaScript 語句

  • 將網頁存為PDF文件:有時我們需要將一個頁面保存下來,除了用Evernote等工具,還可以在Chrome里直接將該網頁存成PDF,只需按“Ctrl+P”組合鍵喚起“打印網頁”對話框,然后在目標打印機的選項中選擇“另存為PDF”選項。

JS DDoS攻擊的原理與防御

  • 分布式拒絕服務攻擊(Distributed Denial of Service,DDoS)是一種對網站發起大量連接,導致正常用戶無法訪問網站的攻擊手段。利用流量劫持變相進行 DDoS,就是JS DDoS。

  • 要防御它是有辦法的。開發者在引用一個第三方庫時,在頁面里寫上它的散列值,如果第三方庫被劫持,計算出的散列值與開發者寫在頁面里的不匹配,瀏覽器便不會執行它。還有另一種方案,就是使用HTTPS鏈接,這樣可以解決大部分劫持問題。

UA的故事

  • “UA”是“UserAgent”(用戶代理)的簡寫,一般用來區分不同的瀏覽器

URL編碼

  • 但是網絡標準協議中卻規定了URL中只能包含英文字符。

  • 我們能在瀏覽器地址欄看到中文都是瀏覽器本身的功能,實際上任何中文都需要base64編碼才能被正確識別,這種情況是因為編碼問題,地址欄只支持ASCII

  • 這個“%”其實只是分隔符,如果把“%”替換成空格,就可以看到我們熟悉的編碼結果了,比如上面的“e5 82 bb e5 91 80”,眼尖的讀者可能會看出這就是中文的UTF-8的編碼。

  • UTF-8(8位元,Universal Character Set/Unicode Transformation Format)是針對Unicode的一種可變長度字符編碼。它可以用來表示Unicode標準中的任何字符,而且其編碼中的第一個字節仍與ASCII相容,使得原來處理ASCII字符的軟件無須或只進行少部份修改后,便可繼續使用。因此,它逐漸成為電子郵件、網頁及其他存儲或傳送文字的應用中,優先采用的編碼。

  • 《信息交換用漢字編碼字符集》是由中國國家標準總局1980年發布,1981年5月1日開始實施的一套國家標準,標準號是GB 2312—1980。GB2312編碼適用于漢字處理、漢字通信等系統之間的信息交換,通行于中國大陸;新加坡等地也采用此編碼。中國大陸幾乎所有的中文系統和國際化的軟件都支持GB 2312。

簡單理解HTML、CSS和JavaScript

  • HTML(HyperText Markup Language)是超文本標記語言。

  • CSS(Cascading Style Sheets)是級聯樣式表。

  • JavaScript 是一種腳本語言,主要用于前端頁面的DOM處理。

跨域與同源

  • iframe是HTML標簽,作用是文檔中的文檔,或者浮動的框架(FRAME)。 其元素會創建包含另外一個文檔的內聯框架(即行內框架)。

  • iframe 里面的 src 字段為www.qq.com。打開這個網頁后,會看到騰訊網的整個頁面嵌入了這個index.html網頁。iframe的意義非常簡單,就是將一個URL地址嵌入當前頁面并展示出來。

  • 嵌入另一個頁面,兩個頁面的功能可以解耦合,不依賴對方而存在。

  • 只要兩個頁面的協議、主機名、端口一樣,就是同源的,否則就是非同源的。

Cookie和廣告聯盟

  • 為了讓服務器識別請求者,請求者需要在發送請求時帶上自己的身份信息,這個身份信息的學名叫作Cookie。

HTTP Header是什么

  • HTTP 協議的 Header 是一塊數據區域,分為請求頭和響應頭兩種類型,客戶端向服務區發送請求時帶的是請求頭,而服務器響應客戶端數據時帶的是響應頭。

  • Token是服務端生成的一串字符串,以作客戶端進行請求的一個令牌,當第一次登錄后,服務器生成一個Token便將此Token返回給客戶端,以后客戶端只需帶上這個Token前來請求數據即可,無需再次帶上用戶名和密碼。

簡單理解HTTP的GET和POST

  • 在客戶機和服務器之間進行請求-響應時,兩種最常被用到的方法是:GET 和 POST。GET - 從指定的資源請求數據。POST - 向指定的資源提交要被處理的數據

WebSocket是什么

  • WebSocket是 HTML 5的一個主要特性,它是建立在TCP上的一種全雙工協議,也就是說客戶端可以向服務器發信息,服務器也可以向客戶端推送消息。WebSocket 在首次建立連接時,使用普通 HTTP和服務器通信,同時告訴服務器后面的交互用WebSocket的方式。在WebSocket連接建立后,往來的消息都可以通過這條管道發送,同時客戶端與服務器也會不斷地用ping-pong的方式保持心跳,防止連接異常斷開。

  • WebSockets不僅限于聊天/消息傳遞應用程序。它們適用于需要實時更新和即時信息交換的任何應用程序。一些示例包括但不限于:現場體育更新,股票行情,多人游戲,聊天應用,社交媒體等等。

  • Ping和Pong是websocket里的心跳,用來保證客戶端是在線的,一般來說只有服務端給客戶端發送Ping,然后客戶端發送Pong來回應,表明自己仍然在線。

  • 全雙工和半雙工的區別是:全雙工允許數據在兩個方向上同時傳輸;半雙工允許數據在兩個方向上傳輸,但是同一時間數據只能在一個方向上傳輸,實際上是切換的單工。

“直出”是什么

  • 提升加載感受的方法:直出、異步加載、緩存、websocket提升開發效率:iframe

  • DNS就是把域名和IP地址聯系在一起的服務,有了DNS服務器,你就不用輸入IP地址來訪問一個網站,可以通過輸入網址訪問

  • 瀏覽器直接輸出渲染好數據的HTML頁面,簡稱“直出”。直出沒什么神秘的,只不過需要Node.js的支持,服務器和前端都用JavaScript語言編寫,相當于在服務器上也運行一個瀏覽器,它把渲染好的內容直接輸出給客戶端的瀏覽器。

互聯網的黃金礦工:爬蟲

  • 網絡爬蟲的作用就是抓取某個指定網頁的數據并存儲在本地

  • 一部分是網頁的有效內容,可以用來建立搜索關鍵詞的索引,這部分數據先存儲起來;另一部分就是網頁中的URL鏈接,這些鏈接可以作為下一輪爬蟲抓取的目標網頁,如此反復操作,也許整個互聯網的網頁都可以被抓取下來。

  • 如果網站運營者不愿意網站內容被爬蟲抓取,那么可以在網站根目錄下放一個 robots.txt 文件,在其中具體描述該網站的哪些頁面可以被抓取,哪些不能。

簡單理解單頁Web應用

  • 多頁 Web 應用隨處可見,隨便一個新聞網站上面都貼滿新聞的鏈接,打開之后就會出現一個新的新聞頁面。這種包含多個頁面,通過鏈接切換的網站,就是多頁Web應用

  • 單頁 Web 應用 (single-page application 簡稱為 SPA) ,它將所有的活動局限于一個Web頁面中,僅在該Web頁面初始化時加載相應的HTML、JavaScript 和 CSS。一旦頁面加載完成了,SPA不會因為用戶的操作而進行頁面的重新加載或跳轉,取而代之的是利用 JavaScript 動態的變換HTML的內容,從而實現UI與用戶的交互。由于避免了頁面的重新加載,SPA 可以提供較為流暢的用戶體驗。

  • 多頁面的網站結構,打開一個鏈接后,還要等很長時間整頁才刷新,用戶體驗不好。應該只刷新變化了的部分,俗稱局部刷新,像單頁 Web 應用那樣單獨請求想要的數據自己刷新才是最合理的。

錨點與網頁內跳轉的實現

  • 這個錨點的跳轉僅僅是瀏覽器的操作行為,并不會發起任何網絡請求和服務器交互。

  • 利用錨點的特性不僅能完成這種頁面位置跳轉的小功能,還可以改變瀏覽器的訪問歷史。當在不同的錨點間切換時,瀏覽器是可以后退的,每變化一次錨點的值(也就是#后面的值)都將增加一條瀏覽記錄。有一些單頁Web應用是靠錨點來切換當前頁面的,利用的就是這個特性。當然,也可以利用一個叫History API的瀏覽器接口實現單頁Web應用。

前端如何適配手機屏幕

  • viewport俗稱“視口”,用來描述一塊區域,瀏覽器可以在這塊區域上排版、渲染網頁。

簡單理解“盜鏈”與“反盜鏈”

  • 大部分瀏覽器在請求一個資源時會將當前網頁的域名放在HTTP請求頭的refer字段里,服務器只需要判斷這個域名是否屬于允許請求該資源的站點,如果“是”,就返回正確內容,否則就返回一張反盜鏈警告圖片。

廣告過濾機制科普

  • 如何屏蔽廣告

  • 第一個辦法是單個擊破。這個辦法適用于那些大家經常訪問的網站,因為它們的網站比較大,廣告的規則不會變化得那么頻繁。

  • 第二個辦法是摸透大公司的廣告系統。這個辦法適用于一些中小網站,它們不會自建廣告系統,而是使用大公司的廣告系統。這些廣告系統的規則也是相對固定的,只要將它們摸透,就可以將大部分中小網站的廣告屏蔽搞定了。

2客戶端技術

“騙人”的動畫

  • 開發者利用閃屏展示的時間,把應用啟動的準備工作在閃屏“后面”做完,同時,還能在閃屏上進行一些運營活動,可謂一石二鳥

  • 于是開發者開動腦筋,想到了辦法——退出應用的時候截一張界面的圖,啟動應用的時候用這張截圖代替閃屏做啟動動畫,看起來就像取消了閃屏。如果哪天用戶發現某個應用的啟動變快了,但是進了界面卻沒辦法操作,就很可能被“騙”了。

  • 細說Android應用的“續命大法”

    • 第一式:監聽系統事件Android系統下達指令時,它會通知與這件事情相關聯的所有應用。有些應用就會把自己喚醒,悄悄地躺在后臺。

    • 第二式:守護進程喚醒很多應用在啟動后,還會創建一個守護進程,在后臺不斷地檢查應用進程的運行狀態,一旦應用進程停止運行,它就默默地施法,把應用復活。

    • 第三式:“全家桶系列”不同應用之間相互喚醒,當應用A被“殺死”后,“同門兄弟”B就會將它“復活”。還有的情況是,只要啟動了A,它就會把它的“同門兄弟”B、C、D 都喚醒。這招之所以只有少數“大佬”擁有,是因為使用它的前提條件是用戶手機里安裝了同一個公司的多個應用,國內也只有少數幾家公司擁有這個資源。

Hybrid APP

  • 所謂Hybrid APP,就是指使用原生和H5兩種UI呈現內容。

  • 原生頁面為了展示豐富的內容,一般需要利用大量控件進行組合,所以當讀者看到某個頁面布滿了框時,就可以判斷出這部分肯定是基于原生UI呈現的

  • 何時使用原生UI

    • 對流暢性體驗要求較高的場景
      • UI樣式相對固定,不會頻繁變化
        • 交互復雜
  • 何時使用H5頁面

    • 較強的動態運營需求

    • UI樣式復雜多變

    • 交互簡單

    • 多平臺復用

手機傳感器知多少

  • 磁場傳感器:磁場傳感器可以測定出手機在x、y、z三個方向上的磁場強度,用戶旋轉手機,直到只有一個方向上的值不為零時,手機就指向了正南方。很多手機上的指南針應用,都利用了這個傳感器的數據。同時,可以根據三個方向上磁場強度的不同,計算手機在三維空間中的具體朝向。
  • 加速度傳感器:如果手機水平放置,那么z方向上的值,就是當前的重力加速度G;加速度傳感器的另一個用處是計步。當用戶拿著手機運動時,手機會隨著身體上下擺動,加速度傳感器就會檢測出加速度在某個方向上來回改變,通過計算來回改變的次數,可以得出步數。
    • 三軸陀螺儀:三軸陀螺儀可以測定出當前手機在x、y、z三個方向上的角加速度,這個功能主要用來檢測手機的旋轉方向
  • 指紋傳感器:指紋解鎖已經是智能手機的標配功能,它的實現完全依賴于手機中嵌入的指紋傳感器。指紋傳感器按技術可以分為光學式、電容式及射頻式3種。手機上普遍采用的是電容式指紋傳感器。
    • 近距離傳感器:它能夠檢測手機附近物體距手機正面的距離,它依靠一個小型雷達實現,通過發射一些脈沖信號并檢測返回時間計算距離。
  • 光線傳感器:光線傳感器檢測手機正面接收的光照強度,從而對應地改變手機屏幕的亮度,讓用戶在不同光照下都能看清屏幕。
    • 氣壓傳感器:iOS中的健康應用可以計算出用戶爬了幾層樓
  • 溫度傳感器:有的手機自帶溫度傳感器,可以獲取當前環境的溫度。

定位終端設備位置的方法有哪些

  • 這些APP獲得了定位權限后,就會通過系統接口獲取當前手機的經緯度,上傳給服務器。有的服務器拿到位置后,會查詢一些附近的商家推薦給用戶,這就是團購APP的原理。

  • GPS 定位靠的是天上的衛星(如圖2-6所示),這些衛星會不斷地廣播自己的信號。定位時,GPS信號接收器收集至少4顆衛星發出的信號,用收到信號的時間乘以光速可以算出手機和每顆衛星之間的距離,再加上每顆衛星的位置已知,就可以確定手機的位置。

  • 操作系統統一實現了定位需要的復雜的系統。當應用程序需要確定當前設備的地理位置時,只需要添加兩三行代碼,直接從系統中獲取即可。

客戶端推送實現方式

  • 推送就是為了解決這樣的困境,它給了服務器一個展示自我的機會,主動連接所有 APP,要求客戶端再發起一次請求,于是收到推送的 APP(即使此時已經被用戶關閉)又去服務器請求最新的新聞,這樣用戶就能看到最新的新聞了

  • APP和后臺的連接方式有兩種,一種叫pull,也叫輪詢,就是定期地不斷向后臺請求,缺點是耗電,費流量,不環保;另一種叫 push,APP 和后臺一直維持了一條通信通道,不定期地發送心跳包,也能攜帶信息。缺點是要維持一條長連接通道,這條通道如果不用一些特殊手段保持連通性,很容易受系統或其他安全軟件的影響而斷開。

為什么美顏APP可以美顏

  • 千萬不要用CPU做濾鏡算法的運算,而要用OpenGL充分發揮GPU的能力,因為GPU的設計原理最適合這種工作量大又沒有難度的重復計算任務。

  • 圖形處理器(英語:Graphics Processing Unit,縮寫:GPU),又稱顯示核心、視覺處理器、顯示芯片,是一種專門在個人電腦、工作站、游戲機和一些移動設備(如平板電腦、智能手機等)上做圖像和圖形相關運算工作的微處理器。

聽歌識曲的基本原理

  • 提取樂紋,計算頻譜圖,分段,標記特征點。特征點相同根據排列、時間間隔因素區分
  • “以圖搜圖”的功能通過對圖片進行縮放、灰度處理,最后提取出一個64位的散列值作為特征碼,用它去做匹配。
  • 總結一下,聽歌識曲的實現方式是對數據庫里的所有音樂提取樂紋。對每一首音樂,先算出它的頻譜圖,然后把它分成幾個片段,每一段都在頻譜圖上找幾個點作為特征點,從而生成這一片段的樂紋。一首歌通常有很多樂紋,都以倒排索引的形式存儲在數據庫里。對于上傳的錄音,也是先提取它的樂紋,然后在數據庫里進行檢索,最后考慮樂紋的排列、時間間隔等因素,找到最相似的音樂。

朋友圈中的圖片緩存系統

  • 一級緩存(內存緩存),越大用戶可同時瀏覽更更多照片,但消耗更多內存

  • 二級緩存(磁盤緩存)根據不同需要,選擇不同的緩存策略如:微信通訊錄不緩存過多頭像(追求滑動列表流暢性),新聞客戶端緩存每張圖片(讓用戶對每條新聞感興趣)

  • 緩存系統通常分兩級,稱為一級緩存和二級緩存。一級緩存也叫內存緩存,二級緩存也叫磁盤緩存(在硬盤或者SD卡上的緩存)。

應用的生命周期

  • 應用的生命周期是對應用在宿主的環境中從創建、運行到消亡的一種過程描述。對用戶來說,直觀的感受是應用的啟動、前臺運行和退出。
  • 產品經理了解了應用的生命周期后,再去使用應用時,就可以判斷出程序設計的優劣,偶爾還能提一些建設性的意見。

3 開發技術

“空指針”是什么

  • 雖然空指針聽起來好像很厲害,實際上寫一個空指針的Bug只要兩步:第一步A=null。第二步A doSomething。
  • if(A !=null)A doSomething;

程序中的“越界”是什么

  • 數組越界和空指針都屬于異常,這兩種異常都是 Bug界的“不死鳥”
  • 程序員要存儲的數字超過了他選用的數據類型所能表示的最大范圍時,就會發生數據范圍越界。

編程五分鐘,命名兩小時

  • 程序設計里最難的兩件事,一件是保證緩存一致性,另一件就是命名

  • 1.英語差

  • 如果英語不地道,命名很難達到出神入化的境界。

  • 2.讀書少

  • 比較著名的有匈牙利命名法,它要求命名變量的時候采用“作用域+類型+名字”的規范。

  • 還有一種同樣常用的命名法——駝峰命名法:除第一個單詞外,將其他單詞的首字母大寫連接起來,看起來像一個一個的駝峰

  • 3.不是所有的程序員都是架構師

開發動畫需要多少工作量

  • 作者就以Android系統為例,介紹最基本的4種動畫:位移動畫、縮放動畫、漸隱漸現動畫和旋轉動畫。這4種動畫雖然效果不同,但都作用在控件上。
  • 1.位移動畫
    • (1)動畫開始時控件的起始位置。(2)動畫結束時控件要到達的位置。(3)動畫的持續時間。
  • 2.縮放動畫
    • (1)動畫開始時控件的縮放倍率。(2)動畫結束時控件的縮放倍率。(3)動畫的持續時間。
  • 3.漸隱漸現動畫
    • (1)動畫開始時控件的透明度。(2)動畫結束時控件的透明度。(3)動畫的持續時間。(4)設置重復次數。(5)設置重復模式。
  • 4.旋轉動畫
    • (1)動畫開始時控件的旋轉角度。(2)動畫結束時控件的旋轉角度。(3)動畫的持續時間。

耦合與解耦

  • 當公司需要開發一個應用時,往往會將應用中的各個功能分配給不同的程序員,但各個功能在聯動時會直接互相調用對方提供的方法,這就是耦合的溫床。
  • 還有各種設計模式也是可以幫助解耦的,原則就是避免直接交叉,不將A功能的代碼寫在 B 功能的代碼中。如果兩者之間需要交互,可以通過接口、通過消息,甚至可以引入框架。
  • 如果產品經理能夠預見未來獨立化的趨勢,在初期提醒開發人員也未嘗不可。

棧與隊列

  • 棧和隊列都屬于線性表,它們本質上和數組、鏈表沒有區別,甚至很多版本的棧與隊列的底層就是用數組來模擬的。每一種數據結構都是用來解決一些特定的問題的
    • 棧是一種“先進后出”的數據結構。
    • push操作需要把數據添加到數組的末端,pop操作需要刪除最后一個數據。這么一來,一個棧就實現了。
    • 棧溢出就是指APP用的內存不小心超過了系統的限制,被系統強制結束。
  • 隊列
    • 隊列是一種“先進先出”的數據結構。所謂進,就是數據的插入,所謂出,就是數據的刪除。
    • 如果你的數據在處理過程中需要保持原有的順序,用隊列來處理,準沒錯。

為什么有些Bug不能改

  • 1、即將上線,不敢輕易調整
  • 2、刻意留的bug,用于隱藏更嚴重的問題
  • 3、開發需求、開發人員來回變動,后面無法看懂之前的代碼,不敢輕易變動。

加載等待的藝術

  • 一般來說,模塊離 CPU 越近,運行速度就越快,大體的速度快慢排序是寄存器→高速緩存→內存→硬盤→網絡。

  • 加載動畫的使用方法是:當用戶跳轉到一個新的場景,或者加載一個新的網頁時,必須要執行一些CPU或I/O密集型的耗時任務才能讓用戶看到內容,這時前臺讓用戶先看到加載動畫,后臺開啟新線程執行這些任務

并行計算

  • 并行計算在計算機世界中有兩種實現方式:時間上的并行和空間上的并行。

  • 實現并行計算的前提條件是被執行的任務可以被拆分成多個可獨立執行的子任務。

  • 系統進行調度的基本單位是線程和進程,多核操作系統就是將相互獨立的線程和進程分配到不同核心上,達到并行計算的目的。

簡單了解進程間通信

  • 進程是程序實體的運行過程,是系統進行資源分配和調度的獨立單位。”

  • 基于文件的通信方式。

  • 基于管道的通信方式。

  • 基于共享內存的通信方式。

  • 除了上述3種通信方式,還有基于信號(消息)、信號量和套接字的方式。

  • 信號量(Semaphore),有時被稱為信號燈,是在多線程環境下使用的一種設施,是可以用來保證兩個或多個關鍵代碼段不被并發調用。

  • 套接字(Socket),就是對網絡中不同主機上的應用進程之間進行雙向通信的端點的抽象。一個套接字就是網絡上進程通信的一端,提供了應用層進程利用網絡協議交換數據的機制。套接字上聯應用進程,下聯網絡協議棧,是應用程序通過網絡協議進行通信的接口,是應用程序與網絡協議根進行交互的接口。

  • 線程(英語:thread)是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發多個線程,每條線程并行執行不同的任務。

“編不過”是怎么回事

  • 計算機世界中負責這種翻譯的是編譯器,它的任務就是把高級語言翻譯成低級語言(也有編譯器把低級語言翻譯成高級語言,即反編譯)

  • C語言通過編譯器編譯得到的目標語言是和硬件平臺相關的,也就是說,在一個平臺上編出來的程序需要在另一個平臺上重新編譯才能在對應的平臺上運行,而Java的編譯器統一輸出為JVM(Java虛擬機)能懂的中間語言(字節碼),只要對應的平臺上安裝了JVM,就能直接執行Java程序。

  • 程序員說的“編”就是編譯器在進行翻譯,“編不過”就是編譯器在翻譯的過程中發現有單詞和語法不符合規范,向程序員提出警告:必須按照規范來,否則不予通過。

程序“掛了”是怎么回事

  • 1.都是程序員的錯
  • 這種問題的產生原因一般是程序員在設計算法時欠考慮,沒有對可能遇到的異常狀態做處理。常見的異常狀況有空指針、數組訪問越界等。一般來說,那些出現概率很高的導致應用“掛掉”的問題,大多是出于這類原因。
  • 2.操作系統不靠譜
  • 造成應用程序“掛掉”的根本原因,是程序運行到了一個自身無法處理的異常狀態,在這種狀態下,應用程序只能選擇強制退出,才能終止這種異常狀態。

簡單說說操作系統

  • 現有的操作系統中有三款最流行,分別是微軟公司的Windows、蘋果公司的Mac OS和開源的Linux。
  • Windows
  • 操作系統沒有界面一樣可以實現任務處理、完成用戶的操作。只是有了界面,用戶操作起來更方便。
  • Mac OS
  • 開發者在一種UNIX系統上開發的軟件,在其他UNIX系統上也能運行,所以才制定了POSIX標準接口。
  • Linux
  • 一個操作系統需要以下這些能力:
    • 1.啟動:自檢完成后,CPU 會加載硬盤上的第一塊存儲單元,這里往往存放著能夠加載操作系統的代碼,叫作BootLoader程序。
    • 2.內存管理和進程管理:一般內存分為物理內存和虛擬內存。簡單來說,物理內存就是實際的內存大小。虛擬內存是給操作系統里的應用程序看的,有時物理內存只有 2GB,但是應用程序需要4GB,于是就虛構一塊出來,通過內存的換頁機制蒙混過關。
    • 3.文件系統
    • 4.給上層的APP一套好用的API

什么是代碼混淆

  • 代碼混淆并不是加密代碼,它只是讓代碼看起來比較難懂,但是機器的執行邏輯是一樣的,增加的是人為分析的難度和時間成本。

程序員遇到Bug時會做些什么

  • 常見的調試方法就是斷點
  • 打斷點,日志記錄,該釋放的內存沒有釋放等三種調試方式,解決bug問題

應用“續命”大法之異常捕獲

  • 異常捕獲就是開發者知道程序運行到這里可能會崩潰,但是又沒什么好辦法處理,于是強行讓程序繞過去避免崩潰,如果這里對程序后面運行影響不大,那么程序還能保持健康狀態繼續運行下去

搜索引擎的基石:倒排索引

  • 為了加快搜索速度,我們需要建立一個相反的索引的列表。在爬蟲抓取回一個網頁后,先對它進行分詞處理,然后把這些提取出來的關鍵詞與這個網頁的ID做一個映射,這就是倒排索引(Inverted Index)。

簡單理解面向對象

  • 面向過程指的是程序員接到需求,把它拆成一個一個的命令,然后串起來交給計算機去執行。
  • 面向對象最重要的兩個特性
  • 1.自己的事情自己做2.面向接口編程

簡單理解重構

  • 代碼重構是軟件開發過程中提高開發效率和質量的重要手段
    重構就是在保留現有功能的基礎上,重新梳理軟件中的代碼結構,讓原本雜亂無章的代碼重新具有可讀性、結構性和擴展性,增加軟件的開發效率,優化程序的性能。重構的范圍可大可小,大到涉及整個產品的各個模塊,小到一個函數。

流水線技術

  • 流水線技術是指,在重復執行一項任務時,可以把它細分成很多小任務,讓這些小任務重疊執行,來提高整體的運行效率。

多線程是什么

  • 多線程有兩層含義:(1)開啟多個線程做不同的事情,目的是并發同時做很多事情。(2)開啟多個線程做同一個事情(比如前面舉的放水的例子),目的是提高效率。

復用的藝術:線程池

  • 程序員的世界里,像線程池這樣的池還有很多,比如對象池、連接池、指令池等。把一個東西“池化”是一種很典型的復用思想,它的核心就是,如果可以重復使用某些東西,就盡量不要銷毀它。

4網絡技術

網絡基礎之協議棧

  • 原始數據首先被拆解并編碼,然后轉化為電平或者光信號,最終在物理介質上傳輸。原始信息的“分解”和“還原”都是在計算機網絡協議棧中進行的。
  • 協議棧模型1. 應用層2. 傳輸層3. 網絡層4. 數據鏈路層5.物理層
  • 分層的另一個好處是使得每一層都可以被獨立設計,只要保證與上下兩層的“接口”(數據傳輸方式)保持一致即可。

互聯網是如何提供服務的

  • 互聯網上“一切皆下載”。

IP地址枯竭的后悔藥:網絡地址轉換

  • 私有地址(Private address)屬于非注冊地址,專門為組織機構內部使用。在現在的網絡中,IP地址分為公網IP和私有IP地址。公網IP是在Internet使用的IP地址,而私有IP地址是在局域網中使用的IP地址。
  • NAT技術有三種實現方式:
  • 1.靜態轉換(Static NAT)
  • 2.動態轉換(Dynamic NAT)ISP(Internet Service Provider)即因特網服務提供商,能提供撥號上網服務、網上瀏覽、下載文件、收發電子郵件等服務,是網絡最終用戶進入Internet的入口和橋梁。它包括Internet接入服務和Internet內容提供服務。ISP提供的接入方式很多,目前比較流行的方法有局域網(LAN)、寬帶ADSL以及普通撥號上網(dial-up)。
  • 3.端口多路復用(OverLoad)
    NAT技術將內網主機屏蔽在一個或幾個外網IP地址后,降低了內網主機直接暴露到外網上的安全風險。另外,端口多路復用技術大大地減少了IP地址的需求量,減緩了IP地址的枯竭。

PING和網關

  • PING是 TCP/IP協議簇中的一部分,它的原理是向目標 IP地址發送一個數據包,如果對方返回一個同樣大小的數據包,則證明連通,并且整個過程能夠測試時延。

端口二三話

  • “端口”,顧名思義,是終端留給外部的接口,是不同設備間通信的橋梁。
  • 驅動是外部硬件設備與計算機交流時的翻譯。

TCP與UDP

  • TCP(Transmission Control Protocol)即傳輸控制協議,IP(Internet Protocol)即因特網互聯協議。
  • TCP/IP 是一個協議簇,也就是許多協議的集合。
  • TCP/IP又分為4層,分別為應用層、傳輸層、網絡層和物理層。
  • 第一種通信前需要雙方都應答的通信方式對應的是 TCP,第二種只管發送成功而不管接收是否成功的通信方式對應的是 UDP。
  • 三次握手建立連接闡述:第一次握手:客戶端要和服務端進行通信,首先要告知服務端一聲,遂發出一個SYN=1的連接請求信號,”服務端哥哥,我想給你說說話”。第二次握手:當服務端接收到客戶端的連接請求,此時要給客戶端一個確認信息,”我知道了(ACK),我這邊已經準備好了,你現在能連嗎(SYN)”。第三次握手:當客戶端收到了服務端的確認連接信息后,要禮貌的告知一下服務端,“好的,咱們開始聯通吧(ACK)”。from CSDN

TCP憑什么說自己可靠

  • TCP 的可靠并不是指通過TCP發送的數據都能100%發送成功,而是指發送方能明確地知道所有已發送數據最終的狀態。
  • TCP保證可靠性的手段。
  • 1.順序編號
  • 用TCP傳輸一個大文件時,文件會被拆分成多個TCP數據包發送到網絡,TCP會對每個數據包進行順序編號,這是它提供可靠傳輸的基礎。
  • 2.確認機制
  • 當數據包成功傳輸到接收方時,接收方會遵循 TCP 向發送方反饋一個“成功接收”的信號(Acknowledgement,ACK),這個信號會帶上當前數據包的序號,這樣發送方就可以明確地知道“包裹”被正常“投遞”了。
  • 3.超時重傳
  • 發送方每發送一個數據包,都會為這個數據包做一個定時器。如果定時器歸零時,發送方仍然沒有接收到接收方的 ACK,就會對這個數據包進行重傳,直到鏈接被斷開或者接收方收到ACK。

談談UDP的可靠性

  • 什么是反向代理
  • 我們通常說的“代理”,都是指客戶端向外界發起請求時,并不直接與目標服務器連接,而是將所有請求交給一個代理服務器,由它負責連接外界的目標服務器。

CDN是什么

  • CDN(Content Delivery Network,內容分發網絡)
  • CDN的作用:它是一個基于互聯網的數量巨大的服務器集群,專注于內容和資源分發,為用戶提供快速訪問資源的能力,進而提升內容訪問的體驗。

斷點續傳的奧義

  • 推送服務的核心:長連接
  • 如果每次獲取數據都創建一個獨占的連接,并在數據傳輸完畢后釋放,這種連接就叫作“短連接”。而一個能夠供多個請求多次傳輸數據,并在數據傳輸后不會立即釋放的連接稱為“長連接”。
  • 1.短時間內,向同一個服務器發起多次數據請求
  • 2.實現PUSH功能

HTTPS技術簡介

  • HTTPS在HTTP和TCP之間添加了一層SSL協議。SSL是用來保障網絡上數據傳輸安全的一套協議,它在傳輸層對HTTP進行封裝加密,然后將數據交由TCP發送到網絡上。

講講代理服務器

  • 代理服務器架在客戶端和真正服務器中間,作用是替客戶端訪問真正的服務器。
  • 很多手機瀏覽器的省流加速功能,其實就是通過代理服務器達到節省流量的目的

聊聊Wi-Fi技術

  • 就近接入:怎樣讓用戶找到最近的機房
  • 互聯網數據中心(Internet Data Center)簡稱IDC,就是電信部門利用已有的互聯網通信線路、帶寬資源,建立標準化的電信專業級機房環境,為企業、政府提供服務器托管、租用以及相關增值等方面的全方位服務。
  • 域名系統(英文:Domain Name System)是Internet上解決網上機器命名的一種系統。DNS作為將域名和IP地址相互映射的一個分布式數據庫,使人更方便地訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。
  • 就近接入,就是利用DNS服務找到離用戶最近的機器,從而達到經由最短路徑提供服務的目的。DNS 服務還可以找到某公司的所有機房和 IP,從而進行流量的調度。

Socket簡介

  • Socket是什么?它其實是一套API,封裝了TCP/IP。
  • 基于HTTP的連接是短連接,客戶端請求一次數據,就主動和服務器斷開了,Socket則不是,默認情況下,雙方會一直保持聯系。
  • Socket不僅可以用來和別的計算機進行通信,還可以作為進程間通信的一種方式,讓兩個進程產生聯系。

什么是HTTP 302跳轉

  • 302狀態碼應用的典型場景是服務器頁面路徑的重新規劃
  • 這個應答即狀態碼(status code),在HTTP協議里以三位數標識,共分為5類,分別為1××、2××、3××、4××和5××,如表4-3所示。

神奇的Hosts文件

  • Hosts文件給了用戶一個自己決定命運的機會:用戶可以在 Hosts 文件中,指定某個域名對應的IP地址,系統在發起網絡請求時,會優先使用Hosts文件中的IP地址,這樣就達到自主決定使用哪臺服務器的目的。

釋放你的小水管:說說下載速度那些事兒

  • 這涉及HTTP底層的TCP對網絡堵塞控制的原理,本節不細講
  • 離線下載其實就是下載工具的服務器代替電腦用戶先行下載,多用于冷門資源。比如,電腦用戶的正常下載最大速度能達到200KB/S,但是某個資源是冷門資源,下載速度只能達到10KB/S,電腦用戶就得下很久,如果用戶使用離線下載技術,就可以讓服務商的服務器代替電腦用戶下載,電腦用戶就可以關掉下載工具或者機器,節約時間和電費。等到離線下好了,電腦用戶再從下載工具的服務器上以200KB/S(理論上會員等級越高越快,但最高速度仍然受限制于你的本身寬帶)的速度下到自己的電腦上。即使對于熱門資源,離線下載也能省卻許多掛機等待的時間,最重要的是能夠騰出電腦寬帶做其他的事情。優勢隨著互聯網接入服務運營商對P2P下載的封鎖,使得P2P用戶無法再占用他人帶寬高速下載互聯網資源。針對這一情況,可以采取的辦法就是采用離線下載。

下載劫持簡介

  • VPN簡介
  • VPN(Virtual Private Network)就是虛擬專用網絡。
  • VPN 就是一條在公共網絡上虛擬出來的專用通道,來滿足用戶自由交流不被竊聽的需求。

5 網絡安全與后端技術

密碼存儲之開發指南

  • MD5的典型應用是對一段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多軟件在下載的時候都有一個文件名相同,文件擴展名為.md5的文件

密碼存儲指南

  • 為什么賬號會被盜呢?
  • 第1種可能是密碼太常見。
  • 第2種可能是密碼太簡單。
  • 第3種可能是我們訪問的網站不幸被“拖庫”。
  • 第4種可能是網站被“撞庫”。

Web安全之SQL語句

  • 產生SQL注入漏洞的原因也很簡單:開發者沒有對用戶提交的內容進行審核,導致惡意 SQL 語句被執行。
  • 這種通過在提交的數據里加入SQL代碼巧妙地改變后臺SQL執行邏輯的攻擊方式,就是SQL注入攻擊。
  • 永遠不要相信外界輸入的數據,對任何外界輸入的數據都要做合法性的校驗。

Web安全之XSS

  • XSS(Cross Site Script)攻擊的全稱為“跨站腳本攻擊”,指的是攻擊者在正常網頁中注入惡意腳本,當用戶訪問該網頁時,惡意腳本會在用戶瀏覽器上執行,從而竊取用戶Cookie或者導航到惡意網站等,達到攻擊的目的。
  • 防范 XSS 攻擊的主要方法就是檢測用戶提交的數據中是否有可執行的腳本,將其中的 HTML 標簽都轉換為普通的文本。在此之后,還可以啟用瀏覽器的內容安全策略(Content Security Policy),使用白名單機制管理本網站允許加載的內容,同時禁止向未知的網站發送請求。

Web安全之CSRF

  • CSRF(Cross Site Request Forgery)意為“跨站請求偽造”。
  • CSRF 攻擊的本質是,瀏覽器無法區分一個請求是用戶在當前網站自愿發起的,還是其他網站模擬用戶行為發出來的。

ARP欺騙的原理

  • 攻擊者利用ARP攻擊能達到什么目的呢?
  • 1.制造網絡中斷
  • 2.ARP欺騙,中間人攻擊

DDoS的原理

  • DDoS(Distributed Denial of Service)的中文譯名是分布式拒絕服務。DDoS的基本原理是通過對服務器發送大量無用的請求耗盡服務器資源(CPU、內存等),導致服務無法正常運行,正常請求無法得到響應。
  • 一般DDoS攻擊者有兩種途徑達到目的,一種是通過向流量平臺租賃流量實現流量攻擊,另一種是通過種植“肉雞”構建僵尸網絡,利用云控指令對被攻擊者發起攻擊
  • 方案一:硬扛,增加服務器的硬件和帶寬資源,將攻擊者的流量全部接受后,還能服務正常用戶,但是這會消耗大量的財力物力,中小型網站都無力承擔這樣的成本。方案二:尋找專業的流量清洗服務,使用對抗DDoS的軟硬件系統將攻擊流量和正常流量區分開,將正常流量回源到網站繼續服務,同時把攻擊流量屏蔽丟棄,相當于給網站做了一層DDoS防火墻。

Android應用二次打包

  • 一種辦法就是校驗簽名,因為“二次打包者”使用的簽名肯定和原作者不一樣,所以可以在應用的一些關鍵流程上,進行簽名校驗(最好讓后臺來校驗,如果寫在應用里,可能校驗邏輯也被篡改),如果校驗出該簽名為非法簽名,則直接停止運行應用。另一種辦法就是進行應用加固處理,讓“二次打包者”無法反編譯原應用,或者即使反編譯了,也不能重新成功打包,同樣可以避免損失。

那些年中過的病毒

  • 病毒通常會使用系統盤的WINDOWS\system32\drivers

家庭Wi-Fi防“蹭網”指南

  • 1.定期更換Wi-Fi密碼
  • 2.使用更好的加密方式
  • 3.隱藏無線網絡SSID
  • 4.關閉DHCP服務
  • 5.開啟MAC地址過濾功能

后臺服務之RPC框架

  • RPC(Remote Procedure Call,遠程過程調用)
  • RPC是一種方法,RPC框架是基于RPC方法封裝的一套框架(它提供了一套方法和工具,將每個人都要面對的問題封裝起來,使你能夠在這個框架上開發出適合你業務的應用程序,也就不用再關心底層的網絡、協議的實現,只需關心上層業務邏輯即可)。

后臺服務之RESTful API

  • REST 并不是我們理解的英語單詞“REST”,它是 Representational State Transfer的縮寫,意為“表現層狀態轉化”。REST是一種定義API的風格。
  • 服務器收到請求的URL都相同,但是它可以根據請求來的動詞區分前端到底想調用哪個API,這便是REST的精髓所在

Session是用來做什么的

  • 后臺能通過一個編號知道客戶是誰,并且可以知道該用戶的狀態,后臺記錄的這個編號叫Session ID,這個機制稱為Session。
  • Session解決了HTTP無狀態的問題,這種機制相當于給每個用戶分配了一個身份,從而完成對用戶的識別,也將用戶多次不同的操作關聯在了一起。

后臺服務之流量控制

  • 第一種是“漏桶算法”。
  • 第二種算法——“令牌桶算法”
  • 對于后臺服務來講,保證穩定性和可用性是第一要務。流量到達服務處理極限時,對部分流量提供有損服務也是合理的。

后臺服務如何生成唯一ID

  • 1.數據庫
  • 常見的數據庫都提供自增長ID的功能,也就是每插入一條新數據,這條數據的ID就在前一條數據的ID上加1,從而保證唯一性。
  • 2.UUID
  • UUID(Universally Unique IDentifier)是一種不依賴于中央服務器的ID生成方案,它包含了32個十六進制的數字,以連字號分為五段,形式為8-4-4-4-12,如550e8400-e29b-41d4-a716-446655440000
  • 3.雪花算法
  • 雪花算法的特點就是,在保證唯一性的同時,生成的ID的長度比UUID減少了一半,因而更加節省空間,同時它的時間戳填充在高位,因而ID越晚產生,其長度就越長,保證了ID按時間遞增的要求。

6名詞解釋

抽象、封裝、類、實例和對象

  • 面向對象的程序設計是當前世界上最流行的程序設計思想和方法,而抽象、封裝、類、實例和對象都是構成面向對象程序設計的基本概念。
  • 對事物進行“抽象”,從而封裝為“類”,由“類”可以生成“實例”或“對象”。

SDK、API和架構

  • SDK是Software Development Kit的簡稱,中文名稱是軟件開發工具包,是基于當前系統或者平臺的一整套開發工具的集合。
  • API是Application Programming Interface的簡寫,中文稱為應用程序編程接口。
  • 架構指一個軟件系統的結構,是考慮了一個軟件系統的所有設計要素、梳理清楚模塊劃分及模塊之間的關系后形成的一種結構設計。

控件、組件和框架

  • 控件表示程序設計中最小粒度的可復用可編程的部件。
  • 我們可以把組件簡單理解為一個組合功能的控件,功能比一般控件要復雜,交互也更復雜

二進制文件

  • 用二進制文件存儲數字要比用文本文件存儲省空間。
  • 二進制文件更省空間,寫入速度更快,因為可讀性很差,所以還有一定的加密保護作用

腳本

  • 腳本,是使用一種特定的描述性語言,依據一定的格式編寫的可執行文件。
  • 腳本的運行環境叫作“解釋器”,用于理解腳本的含義。腳本語言有很多種,也有相應的配套解釋器。

內存泄漏

  • 這種由于程序申請了內存,但沒有釋放內存,導致內存一直處于被消耗的狀態,稱為內存泄漏。

中間件

  • 在計算機中,中間件是位于兩個軟件中間的軟件,廣義地講,中間件一般為應用軟件和系統軟件之間相互通信的橋梁。

打底數據與云端控制

  • 一個好的產品設計是這樣的:本地要默認寫死一些常在展示、不怎么變化的頻道,這些稱為打底數據或默認數據。如果沒有這份寫死的數據,你的客戶端運行時,至網絡數據傳回前或者無網絡時,頭部都沒有任何信息展示。所以打底數據主要用于解決用戶體驗問題,在無網絡或初次啟動時,告知用戶這個客戶端已經在正常運行。

變量與函數

  • 程序員每天的工作就是定義變量、寫函數,然后運行程序,看變量的值是否符合預期,不符合預期則調至符合預期為止。

散列表

  • 為整理箱編號的方法,稱為散列算法。
  • 散列也稱哈希,利用散列算法實現的散列表,是一種與數組、鏈表等不同的數據結構,它并不需要通過遍歷的方法查找數據。

鉤子

  • Hook 的意思是鉤住,也就是在消息過去之前,先把消息鉤住,不讓其傳遞,使用戶可以優先處理。執行這種操作的函數也稱為鉤子函數。

配置文件

  • 配置文件就是一個對軟件運行時狀態的本地存儲形式,我們可以通過改動配置文件來改變軟件運行行為或策略。

算法復雜度

  • 算法復雜度的絕對值也是不可能統一的,但可以用一個相對標尺來衡量,即時間復雜度,用大寫的字母O來標識。

模板

RGB通識

  • RGB是Red、Green、Blue三種顏色的縮寫,稱作三原色

應用程序、進程和線程

視頻文件與編解碼標準

同步、異步和回調

時間戳、MD5和GUID

  • 時間戳(TimeStamp)
  • 消息摘要算法(Message Digest Algorithm),MD5是其中最常用的一個
  • MD5主要解決的問題是,對一個文件或字符串生成一個唯一標識
  • GUID(Globally Unique IDentifier),全局唯一標識符

棧的含義

  • 針對棧有Push和Pop兩種操作,分別表示向棧中加入一個元素,從棧中退出一個元素。
  • 堆是由程序員自己申請并控制的一塊區域(不用的時候必須做好釋放工作),而棧是由操作系統控制的。

JSON

  • 序列化與反序列化

理解OpenGL

  • OpenGL的繪制流程大約要經過幾個步驟。首先,要把要畫的東西拆成三角形之類的基本圖形,然后在三維空間坐標系里給它們安排合適的位置,之后把燈光加上去,使要畫的東西有一種立體感,最后,把這些東西轉化成屏幕上的像素點(即光柵化),整個繪制就算是完成了。

引擎

  • 渲染引擎,我們通常稱之為瀏覽器內核,是瀏覽器中最重要的呈現HTML、CSS、JavaScript的“發動機”。沒有它,就看不了網頁,一切基于H5的Web生態即刻崩塌。
  • 游戲引擎,提供了一套用來開發游戲工具的組件,它是制作游戲產品的瑞士軍刀,是制作游戲最基礎最底層的核心部件。
  • 殺毒引擎,就像發動機的核心功能是提供動力一樣,它的主要作用就是辨別和偵測病毒,在殺毒引擎之上再包裝UI和交互,就形成了一個完整的殺毒產品。
  • 搜索引擎,看起來像是谷歌這樣的產品,其實它的核心能力是爬蟲、分詞和索引
  • 調度引擎

開源許可證

  • GPL證書下的代碼是可以免費使用并任意修改的,但是不允許使用它的產品作為商業軟件發布和銷售。還有一點,用到GPL的產品也必須開源并免費發布,這也是我們可以免費使用各種Linux衍生版本的原因之一。
  • LGPL 的限制相對 GPL 來說要寬松一些,它允許商業軟件通過庫引用的方式使用聲明了LGPL證書的開源代碼,但是不能修改它們。商業軟件可以自由發布和銷售產品,同時不必公開自己的源代碼。
  • BSD鼓勵代碼共享,但需要尊重代碼作者的著作權。它對商業集成很友好,因此是商業公司選用開源產品時的首選證書。
  • MIT的限制范圍和BSD一樣寬泛,它的作者只想保留版權,而無任何其他限制。
  • WTFPL全稱是 DO WHAT THE FUCK YOU WANTTO PUBLIC LICENSE,意為“你想干什么就干什么”,簡直豪放到沒朋友。

渲染

  • 渲染的意思是呈現,也就是“顯示出來”,瀏覽器呈現的是HTML,游戲呈現的是3D人物或地圖,手機APP呈現的是各種界面。
  • 渲染就是對數據進行一系列計算并呈現的過程,其中包括測量、排版和繪制。用戶在任何屏幕上看到的任何一個圖形,無一例外,都經過了這三個過程。

WLAN、Wi-Fi與IEEE 802.11

  • 802.11ac實際是基于802.11a的擴展,它支持5G頻段,理論上可以達到1GBit/s的傳輸速度。

位圖與矢量圖

  • JPG、PNG、WEBP這些常用圖片格式都有一個共性——用像素點陣來描述一張圖片,我們把這種圖片稱為位圖。
  • 矢量圖是由點、直線、多邊形等幾何圖形構成的圖像,這些點、線和多邊形都是可以用數值和方程式描述出來的。
  • 常見的矢量圖格式是以SVG為后綴的文件。

接口

  • 接口就是提供具體能力的一個標準和抽象。
  • 接口象征著提供出來的能力,定義者和實現者一般是不同的,調用者并不需要關注具體細節,只需要關注接口暴露出來的能力就可以了

線程池、對象池和連接池

  • 池化技術就是在充分保障系統效率的前提下,充分復用資源的一種方式,一切皆為了成本和效率。

向前兼容和向后兼容

  • 向后兼容指的是對已經發出去的老版本兼容,向前兼容指的是對還沒有做好的版本兼容。
  • (1)建立新表。(2)查詢舊表數據,并插入新表中。(3)啟用新表。(4)刪除舊表。

游戲引擎

  • 游戲引擎是游戲世界的基礎框架,它定義并實現了游戲中的自然法則。這些法則包括光影效果、動畫系統、物理系統、流體效果和渲染系統。

7大前端

React:流行的前端技術

  • React是Facebook推出的一個前端框架,準確地說,它是一個前端的UI組件庫。
  • React自帶了一個虛擬的DOM樹。無論是要刷新某個文字,還是插入一個廣告,都可以直接操作這棵DOM樹。它有一個效率很高的比對算法,保證無論你怎么擺弄,它都能把受影響的范圍降到最小。

React Native:專治急性子的產品經理

  • React Native是Facebook推出的一個用JavaScript語言就能同時編寫iOS、Android及后臺的技術

一個React Native的應用是什么樣的

  • 冷更新就是需要停止服務器,需要重新打包應用的版本更新方式;熱更新就是應用里使用了某種sdk支持直接修改執行代碼的更新方式;因為有風險,所以谷歌和蘋果商店都禁用熱更新。
  • React Native允許開發者使用JavaScript作為開發語言,像寫網頁一樣,用JSX語法布局頁面,React引擎會把JSX語法翻譯成終端的布局,并依賴終端的能力顯示頁面。

什么樣的業務適合用React Native來改造

  • 動態多變的界面適合用React Native缺點:1.首次加載慢2.多了過程,容易出錯,需要添加備用方案
  • Feed是RSS訂閱的過程中用來接收該信息來源更新的接口,起源于網景通訊公司(Netscape)的推送技術(push technology)。Feed是一種用于網上新聞、博客和其他Web內容的數據交換規范,是為滿足希望以某種形式持續得到自己更新的需求而提供的格式標準的信息出口。

終端開發新思路:Flutter

  • Flutter是一套用Dart語言來寫的、兼容Android和iOS的終端開發框架。

一窺微信小程序的技術思路

  • 微信小程序用 JavaScript 作為開發語言,用自己定義的 WXML來描述界面,用WXSS來表達樣式,這些也是一個Native APP最基本的要素

如何自己開發小程序

  • 閉包(closure)是計算機編程領域的專業名詞,指可以包含自由(未綁定到特定對象)變量的代碼塊,子函數可以使用父函數中的局部變量。閉包源于要執行的代碼塊和為自由變量提供綁定的計算環境(作用域)兩者的結合,Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Lua、objective c 以及Java(Java8及以上)等語言中都能找到對閉包不同程度的支持。

8人工智能

如何通俗地理解機器學習

  • 模式識別(pattern recognition)和深度學習(deep learning)
  • 深度學習早期的基本算法模型是神經網絡模型,現在已經“進化”為卷積神經網絡。

人工智能從業者:專家、工程師和調參程序員

  • (1)谷歌開發的TensorFlow,是最流行的框架
  • (2)Keras框架
  • (3)Caffe
  • (4)Facebook開發的Torch
  • 一名調參程序員的日常通常是這樣的:
  • (1)搭建模型。
  • (2)數據整理。
  • (3)調參。

    TensorFlow:幾行代碼寫一個神經網絡的時代來了

  • TensorFlow是一個深度學習框架,它主要用來構建模型、訓練數據,還在移動端做了很多優化,在學術界和工業界都有廣泛應用,未來會有很大的發展。如果讀者想入門人工智能,建議從寫一個TensorFlow Demo做起。

人工智能里的套話該怎么理解

  • “深度學習+文本”就成了自然語言處理,“深度學習+語音”就成為語音識別和語音合成,“深度學習+手寫體”就成了手寫體識別,“深度學習+人臉”就成了人臉識別,深度學習可以與各種技術結合,應用在各個領域中。

一個最簡單的機器學習模型

什么是神經網絡

  • 神經網絡由很多神經元連接起來,每一條連接都有一個參數。訓練神經網絡的過程就是不斷調整這些參數使得最后的損失函數的值不斷變小的過程。最后,算出來的損失函數的值小得不能再小,神經網絡就訓練好了,可以通過推理來滿足我們的產品需求。

神經網絡的數據處理

  • (1)數目上每一類差不多,俗稱配平數據
  • (2)要求尺寸上差不多
  • (3)沒有雜質的意思是,用來學習的圖片,最好保持內容的單一純凈
  • 神經網絡模型分為有監督模型和無監督模型。有監督是指模型在訓練過程中,會有一個正確答案作為指導
  • 訓練集、驗證集和測試集

為什么你的神經網絡像個傻瓜

  • 過擬合
  • 增加訓練集,讓模型見多識廣,自然能輕松應對測試集
  • 欠擬合
  • 一是繼續訓練,觀察它的情況會不會好轉。二是檢查自己的數據集是否有誤,比如訓練集的數據特征不清晰,或者有標注錯誤之類的。

懂你的推薦算法:你應該懂的一些知識

  • 協同過濾算法:具體可以分為基于用戶的協同過濾算法和基于物品的協同過濾算法。

9 溝通

程序員的分工

如何正確地提需求

  • 1.提需求要有節奏感:每個版本會經過功能開發、單元測試、集成測試、灰度驗證和上線發布幾個階段。
  • 2.先自己嘗試評估需求難度
  • 3.下點功夫做準備(這條我比較贊同,在工作中總會面臨需要跟其他人對接工作的時候,難免會遇到”雞同鴨講"的情況,我一般的會把屬于我這部分工作做好,按照自己的能力了解對應的東西后,在同其他人對接,或者是先按照自己的能力做些事情后,在跟其他人對接,效率會高很多)

程序員想要的需求文檔

為什么項目會延期

  • 1.關于需求
  • 2.排期與風險控制
  • 3.溝通,還是溝通

目標設定的兩種方法

  • 第一種是根據當前目標設定一個進步目標
  • 第二種是參考業界最優秀的產品,設定合理的(追趕或超越)目標。

你只是在為自己工作

為什么產品經理經常焦慮

精益創業的作用

總結

以上是生活随笔為你收集整理的给产品经理讲技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。