java常用的庫?
http://blog.csdn.net/basycia/article/details/50769838
集合架構 HashMap 的擴容機制
ConcurrnetHashMap 的原理?
ConcurrentHashMap線上程安全的基礎上提供了更好的寫并發能力,但同時降低了對讀一緻性的要求
ConcurrentHashMap的設計與實作非常精巧,大量的利用了volatile,final,CAS等lock-free技術來減少鎖競争對于性能的影響
Java的垃圾回收機制?
垃圾回收主要針對的是堆區的回收,因為棧區的記憶體是随着線程而釋放的。
堆區分為三個區:
年輕代(Young Generation)(由一個Eden區和倆個survivor區組成)
年老代(Old Generation)
永久代(Permanent Generation,也就是方法區)。
年輕代:新建立的對象都在年輕代的Eden區,經過一次JC收集後,存活下來的會被複制到survivor區(一個滿了,就全部移動到另外一個大的中,但要保證其中一個survivor為空),經過多次JC後,還存活的對象就被移到老年代了。
年老代:就是上述年輕代移動過來的和一些比較大的對象。Minor GC(FullGC)是針對年老代的回收。
溢出原因有循環上萬次的字元串處理、建立上千萬個對象、在一段代碼内申請上百M甚至上G的記憶體。
永久代:存儲的是final常量,static變量,常量池。
持久代溢出原因 動态加載了大量Java類而導緻溢出
設計模式?
模式是一條由三個部分組成的通用規則:它表示了一個特定環境、一類問題和一個解決方案之間的關系。每一個模式描述了一個不斷重複發生的問題,以及該問題解決方案的核心設計。
軟體設計模式的分類?
建立型
建立對象時,不再由我們直接執行個體化對象;而是根據特定場景,由程式來确定建立對象的方式,進而保證更大的性能、更好的架構優勢。建立型模式主要有簡單工廠模式(并不是23種設計模式之一)、工廠方法、抽象工廠模式、單例模式、生成器模式和原型模式。
結構型
用于幫助将多個對象組織成更大的結構。結構型模式主要有擴充卡模式adapter、橋接模式bridge、組合器模式component、裝飾器模式decorator、門面模式、亨元模式flyweight和代理模式proxy。
行為型
用于幫助系統間各對象的通信,以及如何控制複雜系統中流程。行為型模式主要有指令模式command、解釋器模式、疊代器模式、中介者模式、備忘錄模式、觀察者模式、狀态模式state、政策模式、模闆模式和通路者模式
設計模式的六大原則?
單一職責:一個類,或者一個接口,最好隻做一件事情,當發生變化時,他隻能受到單一的影響;因為職責過多,可能引起變化的原因将會很多,這樣導緻職責和功能上的依賴,将嚴重影響其内聚性和耦合度,混亂由此而生。
裡氏替換:在使用基類的的地方可以任意使用其子類,能保證子類完美替換基類;這一精神其實是對繼承機制限制規範的展現
接口隔離:盡量使用多個專門的單一的小接口,避免龐大的總接口
迪米特法則也叫最少知識原則
開閉原則:開放封閉原則,簡稱開閉原則.
依賴倒置原則:高層子產品不應該依賴低層子產品,兩者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。其核心思想是:依賴于抽象。
關于設計模式看了哪些書?書名是什麼?
設計模式之禅 《大話設計模式》和《Head First 設計模式》
osgi(開放服務網關協定)架構:
目前基于OSGi的架構大概有4個:Knopflerfish, Apache Felix, Equinox, Spring DM
JVM調優工具
Jconsole,jProfile,VisualVM
資料庫中主鍵的設計原則
主鍵在實體層面上隻有兩個用途:
1.唯一的辨別一行.
2.作為一個可以被外鍵有效引用的對象.
1.主鍵應當是對使用者沒有意義的.
2.主鍵應該是單列的,以便提高連接配接和篩選操作的效率.
3.永遠不要更新主鍵
4.主鍵不應當包含動态變化的資料,如時間戳,穿件時間列,修改時間列等.
5.主鍵應當是計算機自動生成.
Tomcat和JBoss都是伺服器,有什麼差別呢?
JBoss和tomcat是不一樣,JBoss是一個可伸縮的伺服器平台,當你的EJB程式編制完成後,如果通路量增加,隻要通過增加伺服器硬體就可以實作多台伺服器同時運算,提高了負載容量,這個性能容量理論上是沒有限制的,理論上無最大支援線上人數的上限,對于JBoss/EJB這樣的平台來說,無最大通路量限制一說。
序列化?
所謂序列化其實就是将程式中的資料(對象)通過某種方式,儲存到本地中。然後把Java對象轉換為位元組序列的過程稱為對象的序列化
就像你寄一箱餅幹,因為體積太大,就全壓成粉末緊緊地一包寄出去,這就是序列化的作用。
隻不過java的序列化是可以完全還原的.
什麼情況下需要序列化
a)當你想把的記憶體中的對象儲存到一個檔案中或者資料庫中時候;
b)當你想用套接字在網絡上傳送對象的時候;
c)當你想通過RMI傳輸對象的時候;
http 協定,傳回碼,301 與 302 差別
301 redirect: 301 代表永久性轉移(Permanently Moved)
302 redirect: 302 代表暫時性轉移(Temporarily Moved )
為什麼要使用并發(多線程)程式設計?
單線程是先理發再陪女朋友購物,先後順序進行.
多線程是吃了分身藥A身去理發B身去陪女朋友
多線程處理就會提升性能,在相同的時間裡做更多的事情,服務更多的客戶。
Web伺服器專門處理HTTP請求(request),但是應用程式伺服器是通過很多協定來為應用程式提供(serves)商業邏輯(business logic)。
資料庫的三大範式?
為了建立備援較小、結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關系型資料庫中這種規則就稱為範式。範式是符合某一種設計要求的總結。要想設計一個結構合理的關系型資料庫,必須滿足一定的範式。
1. 第一範式(確定每列保持原子性)
2.第二範式(確定表中的每列都和主鍵相關)
3.第三範式(確定每列都和主鍵列直接相關,而不是間接相關)
什麼是隊列?
隊列是用于存儲消息的資料結構.
類似于連結清單和堆棧,隊列也是存儲資料的結構.隊列中資料進入隊列的順序很重要,一般來說,隊列就是一群人或事物按照排好的順序等待接受服務或者處理.
隊列,又稱為伫列(queue),是先進先出(FIFO, First-In-First-Out)的線性表。在具體應用中通常用連結清單或者數組來實作。隊列隻允許在後端(稱為rear)進行插入操作,在前端(稱為front)進行删除操作。
java中list與set的差別?
List特點:元素有放入順序,元素可重複 ,Set特點:元素無放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的)
K-means算法的基本思想是:以空間中k個點為中心進行聚類,對最靠近他們的對象歸類。通過疊代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果
MapReduce:實作jion的幾種方法
reduce side join 即:reduce階段進行實際的連接配接操作
map side join
SemiJoin(半連接配接)
http狀态傳回代碼 1xx(臨時響應)
表示臨時響應并需要請求者繼續執行操作的狀态代碼。
http狀态傳回代碼 2xx (成功)
表示成功處理了請求的狀态代碼。
http狀态傳回代碼 3xx (重定向)
表示要完成請求,需要進一步操作。 通常,這些狀态代碼用來重定向。
http狀态傳回代碼 4xx(請求錯誤)
這些狀态代碼表示請求可能出錯,妨礙了伺服器的處理
http狀态傳回代碼 5xx(伺服器錯誤)
這些狀态代碼表示伺服器在嘗試處理請求時發生内部錯誤。 這些錯誤可能是伺服器本身的錯誤,而不是請求出錯。
kafka删除topicName 提示marked for deletion?
執行删除指令:kafka-topics.sh --delete --zookeeper localhost:2181 --topic yuhui-001
并沒有真正删除,如果要真正删除.他隻是标記删除了
在每一台機器中的kafka_2.10/config/server.properties 檔案加入 delete.topic.enable=true
kafka
在流式計算中,Kafka一般用來緩存資料
Apache Kafka是一個開源消息系統,由Scala寫成
Kafka是一個分布式消息隊列:生産者、消費者的功能。它提供了類似于JMS的特性,但是在設計實作上完全不同,此外它并不是JMS規範的實作。
Kafka對消息儲存時根據Topic進行歸類,發送消息者稱為Producer,消息接受者稱為Consumer,此外kafka叢集有多個kafka執行個體組成,每個執行個體(server)成為broker。
無論是kafka叢集,還是producer和consumer都依賴于zookeeper叢集儲存一些meta資訊,來保證系統可用性
JMS是什麼?
JMS是什麼:JMS是Java提供的一套技術規範
Kafka
Kafka是一個釋出訂閱系統,主要用作緩存。
核心概念
Kafka是一個叢集,意味着有很多個節點組成。
Broker:節點名稱。
message:就是一個一個的消息。
Message queue:消息隊列,有一個一個消息組成。
Topic:就是主題,意思是一類消息。我們發送消息的時候,必須指明主題。
Partition:分區。就是把消息自定義為一個一個的分區,然後發送給不同的broker
Producer:生産者,釋出消息。
Consumer:消費者,消費消息。
Offset;偏移量,就是行号。我們的這個消息隊列儲存在檔案中,消息來了,追加到檔案的尾部。檔案有行号,就是我們的offset 偏移量。
Flume基本概念
Agent 一個Agent包含 source ,channel,sink 和其他元件。
Source Source 負責接收event或通過特殊機制産生event,并将events批量的放到一個或多個Channel
Channel Channel位于Source和Sink之間,用于緩存進來的event
Sink Sink負責将event傳輸到下一個source或最終目的地,成功後将event從channel移除
Client Client 是一個将原始log包裝成events并且發送他們到一個或多個agent的實體,目的是從資料源系統中解耦Flume,在flume的拓撲結構中不是必須的。
Events Event是Flume資料傳輸的基本單元。可以是日志記錄、 avro 對象等。
avro 資料序列化的系統
irc 網絡即時聊天 Internet Relay Chat
sqoop資料遷移
sqoop是apache旗下一款“Hadoop和關系資料庫伺服器之間傳送資料”的工具。
導入資料:MySQL,Oracle導入資料到Hadoop的HDFS、HIVE、HBASE等資料存儲系統;
導出資料:從Hadoop的檔案系統中導出資料到關系資料庫
将導入或導出指令翻譯成mapreduce程式來實作
在翻譯出的mapreduce中主要是對inputformat和outputformat進行定制
Sqoop的原理其實就是将導入導出指令轉化為mapreduce程式來執行,sqoop在接收到指令後,都要生成mapreduce程式
使用sqoop的代碼生成工具可以友善檢視到sqoop所生成的java代碼,并可在此基礎之上進行深入定制開發
GraphX是一個基于Spark的分布式圖計算子架構,提供了圖計算中用于圖和圖并行計算的接口。
屬性圖:是一個有向多重圖,用于表示具有點和邊的使用者定義對象。
具備RDD的3個關鍵特性:Immutable(不變性)、Distributed(分布式)和Fault-Tolerant(容錯)。
包括帶屬性的頂點和邊,這些屬性是用來描述頂點和邊的特征。
一般圖的分布式存儲有邊分割和點分割兩種方式。
GraphX 提供系列圖算法來簡化任務的分析,主要有:
網頁排名:
連通分支圖算法:
三角形計數法:
機器學習的定義有以下幾種描述:
機器學習是一門人工智能的科學,該領域的主要研究對象是人工智能,特别是如何在經驗學習中改善具體算法的性能。
機器學習是對能通過經驗自動改進的計算機算法的研究。
機器學習是用資料或以往的經驗,以此優化計算機程式的性能标準。
機器學習強調三個關鍵詞:算法、經驗、性能。
機器學習的分類有以下四種:
監督學習:
半監督學習:
無監督學習:
強化學習:
MLlib目前支援的分類學習問題的算法有:
邏輯回歸( Logistic Regression )
線性支援向量機( linear SVMs,Support Vector Machine)
樸素貝葉斯( naive Bayes)
決策樹( decision trees)
随機森林( random forests )
梯度提升決策樹(gradient-boosted trees)
MLlib目前支援的回歸算法有:
線性最小二乘法(linear least squares)
套索(Lasso)
嶺回歸( ridge regression)
決策樹( decision trees), 随機森林( random forests )
保序回歸( Isotonic regression)
比特币(BitCoin)的概念最初由中本聰在2009年提出,根據中本聰的思路設計釋出的開源軟體以及建構其上的P2P網絡。比特币是一種P2P形式的數字貨币。點對點的傳輸意味着一個去中心化的支付系統。
通路控制清單(ACL)
靜态ip:固定IP(即靜态IP):固定IP位址是長期固定配置設定給一台計算機使用的IP位址,一般是特殊的伺服器才擁有固定IP位址。 一般來說,采用專線上網的計算機才擁有固定的 Internet IP 位址而且需要比較昂貴的費用。
對稱多處理"(Symmetrical Multi-Processing)簡稱SMP,是指在一個計算機上彙集了一組處理器(多CPU),各CPU之間共享記憶體子系統以及總線結構。它是相對非對稱多處理技術而言的、應用十分廣泛的并行技術。
Docker:
Docker是一個開源的應用容器引擎,讓開着可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的Linux機器上,也可以實作虛拟化.容器是完全使用沙箱機制,互相之間不會有任何接口.
什麼叫虛拟化?
虛拟化,是指通過虛拟化技術将一台計算機虛拟為多台邏輯計算機。在一台計算機上同時運作多個邏輯計算機,每個邏輯計算機可運作不同的作業系統,并且應用程式都可以在互相獨立的空間内運作而互不影響,進而顯著提高計算機的工作效率。
什麼叫沙箱?
Sandboxie(又叫沙箱、沙盤)即是一個虛拟系統程式,允許你在沙盤環境中運作浏覽器或其他程式,是以運作所産生的變化可以随後删除。它創造了一個類似沙盒的獨立作業環境,在其内部運作的程式并不能對硬碟産生永久性的影響。其為一個獨立的虛拟環境,可用以測試不受信任的應用程式或上網行為。
什麼叫系統資料庫?
系統資料庫(Registry,繁體中文版Windows作業系統稱之為登入檔)是Microsoft Windows中的一個重要的資料庫,用于存儲系統和應用程式的設定資訊。
系統資料庫是windows作業系統中的一個核心資料庫,其中存放着各種參數,直接控制着windows的啟動、硬體驅動程式的裝載以及一些windows應用程式的運作,進而在整個系統中起着核心作用。
什麼是Ribbon?
Ribbon即功能區
出處 微軟
内容 收藏指令按鈕和圖示
雙字(REG_DWORD):
從字面上了解應該是Double Word,雙位元組值。由1-8個十六進制資料組成,我們以十六進制的方式來編輯。如:D1234567。
什麼是反安裝?
就是解除安裝......
高斯模糊
高斯模糊(英語:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等圖像處理軟體中廣泛使用的處理效果,通常用它來減少圖像噪聲以及降低細節層次。
什麼是Aero?
Windows Aero 是從 Windows Vista 開始使用的新型使用者界面,透明玻璃感讓使用者一眼貫穿。
“Aero”為四個英文單字的首字母縮略字:Authentic(真實)、Energetic(動感)、Reflective(反射)及Open(開闊)。
ClearType?
螢幕字型平滑工具 讓色調進行微妙調整 可提高文字的清晰度
DirectX?
DirectX,(Direct eXtension,簡稱DX)是由微軟公司建立的多媒體程式設計接口。由C++程式設計語言實作,遵循COM。被廣泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE電子遊戲開發,并且隻能支援這些平台。最新版本為DirectX 12,建立在最新的Windows10。
長連接配接和短連接配接
長連接配接,指在一個連接配接上可以連續發送多個資料包,在連接配接保持期間,如果沒有資料包發送,需要雙方發鍊路檢測包。
短連接配接是指通訊雙方有資料互動時,就建立一個連接配接,資料發送完成後,則斷開此連接配接,即每次連接配接隻完成一項業務的發送。
資料包
機器學習
機器學習的主體是計算機
機器學習是從以往的曆史資料來對将來做的決策
機器學習的典型應用
購物籃分析
關聯規則 , 啤酒+尿片
典型應用,聚類 使用者細分精準營銷
樸素貝葉斯 案例:垃圾郵件識别
決策樹 信用卡欺詐 風險識别
ctr(點選率)預估 網際網路廣告
系統過濾 推薦系統 經常購買的東西
自然語言處理:是比機器學習又上升一個高度
情感分析
實體識别
深度學習
圖像識别
語音識别
人臉識别
機器學習和資料分析的差別
交易資料
跟錢打交道的
行為資料
事物:要麼同時成功要麼同時失敗
nosql資料庫
解決業務問題不同
資料分析是報告過去的事情
機器學習是預測未來的事情
技術手段不同
内省和反射
什麼是内省?
通過反射的方式操作JavaBean的屬性,jdk提供了PropertyDescription類來操作通路JavaBean的屬性,Beantils工具基于此來實作。
大O符号
大O 就是 時間複雜度。
時間複雜度是大概的描述一個算法的用時(實際上從側面的表達了他的效率)
你可以 把它 看成函數 y = f(x)一樣。
O(n)中的n 代表 規模大小,這也表明了,時間複雜度 跟 規模的關系。
最好時間複雜度,通常指在最好情形下,這個算法用時。反之,最壞情況下的就是最壞時間複雜度。
通常 冒泡算法 的最壞時間複雜度就是O(2^n),最壞情形是原序列 跟 排序後的序列完全相反。
析構函數
析構函數(destructor) 與構造函數相反,當對象結束其生命周期時(例如對象所在的函數已調用完畢),系統自動執行析構函數。析構函數往往用來做“清理善後” 的工作(例如在建立對象時用new開辟了一片記憶體空間,delete會自動調用析構函數後釋放記憶體)
serial(串行) throughput(吞吐量)
串行GC:整個掃描和複制過程均采用單線程的方式,相對于吞吐量GC來說簡單;适合于單CPU、用戶端級别。
吞吐量GC:采用多線程的方式來完成垃圾收集;适合于吞吐量要求較高的場合,比較适合中等和大規模的應用程式。
hbase的rowkey怎麼建立好?列 族怎 麼建立比較好?
hbase存儲時,資料按照Row key的字典序(byte order)排序存儲。設計key時,要充分排序存儲這個特性,将經常一起讀取的行存儲放到一起。(位置相關性)一個列族在資料底層是一個檔案,是以将經常一起查詢的列放到一個列族中,列族盡量少,減少檔案的尋址時間
blob(二進制大對象)
BLOB (binary large object),二進制大對象,是一個可以存儲二進制檔案的容器。
在計算機中,BLOB常常是資料庫中用來存儲二進制檔案的字段類型。
BLOB是一個大檔案,典型的BLOB是一張圖檔或一個聲音檔案,由于它們的尺寸,必須使用特殊的方式來處理(例如:上傳、下載下傳或者存放到一個資料庫)。
Top K算法
多線程
如果調用run()方法,則結果很有規律,先第一個對象執行,然後第二個對象執行,并沒有互相交替運作.在jdk的文檔中可以發現,一旦調用start()方法,則會通過jvm找到run()方法.
如果調用start()方法則程式可以正常完成互動式運作.
為什麼呢?
在JDK的安裝路徑下,src.zip是全部的java源程式,通過此代碼找到Thre ad中的start()方法的定義,可以發現此方法中使用了priv ate native void start0();其中native關鍵字表示可以調用作業系統的底層函數,那麼這樣的技術成為JNI技術(java Native Interface)(本地接口)
在實際開發中很少使用Thread類一般都是事先runable接口.
在程式開發中隻要是多線程肯定永遠以實作Runn able接口為主,因為實作Runn able接口相比繼承Thre ad類有如下好處:避免點繼承的局限,一個類可以繼承多個接口。
适合與資源的共享.
如果要存儲海量的小檔案(大小都是幾百k-幾兆)請簡述自己的方案
1.将小檔案打成har檔案存儲
2.将小檔案序列化到HDFS中
時間複雜度
通常用大O來表示
常數階 對數階 線性階
持久化
持久化就是将程式資料在持久狀态和瞬時狀态間轉換的機制.
通俗的講,就是瞬時資料(比如記憶體中的資料,是不能永久儲存的)
持久化為持久資料(比如持久化至資料庫中,能夠長久儲存).
OID:對象辨別符(Object Identifier Desendant)
URI(統一資源辨別符)
URL:統一資源定位符
類似于:www.baidu.com
URI:
通常由三個部分組成:
類似于:http://www.why.com.cn/myhtml/html1223/
在Python中,我們使用urllib2這個元件來抓取網頁
聯機分析技術(OLAP)
聯機分析處理OLAP是一種軟體技術,它使分析人員能夠迅速、一緻、互動地從各個方面觀察資訊,以達到深入了解資料的目的。
impala類比于hive
hue(Hadoop User Experience)
意思就是Hadoop的使用者體驗
PROM (Programmable Read-Only Memory)
-可程式設計隻讀存儲器,也叫One-Time Programmable (OTP)ROM“一次可程式設計隻讀存儲器”,是一種可以用程式操作的隻讀記憶體。最主要特征是隻允許資料寫入一次,如果資料燒入錯誤隻能報廢。
rac(Real Application Cluster)
什麼是分布式系統
利用多個節點共同協作完成一項或多項具體業務功能的系統就是分布式檔案系統.
mybatis學習
案例:公衆号和短信自動回複
jsp
jstl
el
js/jquery
servlet
javabean
struts2
Struts1 2001
Struts2 2007