1.分布式事務事務就是一個會話過程中,對上下文的影響是一致的,,要么所有的更改都做了,,要么所有的更變都撤銷掉。就要么生,,要么死,。沒有半死不死的中間不可預期狀態(tài)。 事務是為了保障業(yè)務數(shù)據(jù)的完整性和準確性的,。 分布式事務,,常見的兩個處理辦法就是兩段式提交和補償。 兩段式提交典型的就是XA,,有個事務協(xié)調(diào)器,,告訴大家,來都準備好提交,,大家回復,,都準備好了,然后協(xié)調(diào)器告訴大家,,一起提交,,大家都提交了。 補償比較好理解,,先處理業(yè)務,,然后定時或者回調(diào)里,檢查狀態(tài)是不是一致的,,如果不一致采用某個策略,,強制狀態(tài)到某個結束狀態(tài)(一般是失敗狀態(tài)),,然后就世界太平了。典型的就是沖正操作,。 準備好了以后,,如果沒有問題,收到提交,,所有人都開始提交,。 這個時候,比如對數(shù)據(jù)庫來說,,有redo日志的,。 如果某個數(shù)據(jù)庫這時候宕機了,那么它重啟的時候,,先執(zhí)行檢查,,也會把上一次的這些操作都提交掉的。所以各個點的數(shù)據(jù)都是一致的,。 2.多線程2.1 多線程編程的好處是什么? 在多線程程序中,,多個線程被并發(fā)的執(zhí)行以提高程序的效率,CPU不會因為某個線程需要等待資源而進入空閑狀態(tài),。 2.2我們?nèi)绾蝿?chuàng)建一個線程?一是實現(xiàn)Runnable接口(好因為還可以繼承),,然后將它傳遞給Thread的構造函數(shù),創(chuàng)建一個Thread對象;二是直接繼承Thread類,。 Java 多線程并發(fā)編程會有許多不同的問題,,主要有如下問題的應用:多線程讀寫共享數(shù)據(jù)同步問題 并發(fā)讀數(shù)據(jù),保持各個線程讀取到的數(shù)據(jù)一致性的問題,。 解決方案:synchronized關鍵字和Lock并發(fā)鎖:主要解決多線程共享數(shù)據(jù)同步問題,。 ThreadLocal主要解決多線程中數(shù)據(jù)因并發(fā)產(chǎn)生不一致問題。 3.中間件Java中間件技術主要就是EJB,,如果說服務器主要有tomcat,、weblogic、webshpere,,JBoss等,。 4.并發(fā)解決方案基本的解決方案集中在這樣幾個環(huán)節(jié):使用高性能的服務器、高性能的數(shù)據(jù)庫,、高效率的編程語言,、還有高性能的Web容器。 f5負載均衡 redis 5.系統(tǒng)應用架構6.JVM 內(nèi)存調(diào)優(yōu)eclipse中:window-preferences-java-jre-jdk中 vm 參數(shù) was中:中間件服務器-應用-進程定義-java虛擬機中 初始堆大小(1024M)最大堆大小(1536M)通用JVM參數(shù)-XX:MaxPermSize=256M 6.1.JVM內(nèi)存管理的機制內(nèi)存空間劃分為:Sun JDK在實現(xiàn)時遵照JVM規(guī)范,,將內(nèi)存空間劃分為堆,、JVM方法棧、方法區(qū)、本地方法棧,、PC寄存器,。 配置-Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M 堆: 堆用于存儲對象實例及數(shù)組值,可以認為Java中所有通過new創(chuàng)建的對象的內(nèi)存都在此分配,,Heap中對象所占用的內(nèi)存由GC進行回收,,在32位操作系統(tǒng)上最大為2GB,在64位操作系統(tǒng)上則沒有限制,,其大小可通過-Xms和-Xmx來控制,,-Xms為JVM啟動時申請的最小Heap內(nèi)存,默認為物理內(nèi)存的1/64但小于1GB;-Xmx為JVM可申請的最大Heap內(nèi)存,,默認為物理內(nèi)存的1/4但小于1GB,。 JVM方法棧: 為線程私有,其在內(nèi)存分配上非常高效,。當方法運行完畢時,,其對應的棧幀所占用的內(nèi)存也會自動釋放,。當JVM方法??臻g不足時,會拋出StackOverflowError的錯誤,,在Sun JDK中可以通過-Xss來指定其大小,。 方法區(qū): 要加載的類的信息(名稱、修飾符等),、類中的靜態(tài)變量,、類中定義為final類型的常量、類中的Field信息,、類中的方法信息,。方法區(qū)域也是全局共享的,在一定條件下它也會被GC,,當方法區(qū)域要使用的內(nèi)存超過其允許的大小時,,會拋出OutOfMemory的錯誤信息。在Sun JDK中這塊區(qū)域?qū)狿ermanet Generation,,又稱為持久代,,默認最小值為16MB,最大值為64MB,,可通過-XX:PermSize及-XX:MaxPermSize來指定最小值和最大值,。 PC寄存器: 占用的可能為CPU寄存器或操作系統(tǒng)內(nèi)存。 6.2.Java堆和棧的區(qū)別Java把內(nèi)存劃分成兩種:一種是棧內(nèi)存,,一種是堆內(nèi)存,。 在函數(shù)中定義的一些基本類型的變量和對象的引用變量都在函數(shù)的棧內(nèi)存中分配。當在一段代碼塊定義一個變量時,Java就在棧中為這個變量分配內(nèi)存空間,,當超過變量的作用域后,,Java會自動釋放掉為該變量所分配的內(nèi)存空間,該內(nèi)存空間可以立即被另作他用,。 堆內(nèi)存用來存放由new創(chuàng)建的對象和數(shù)組,。在堆中分配的內(nèi)存,由Java虛擬機的自動垃圾回收器來管理,。在堆中產(chǎn)生了一個數(shù)組或?qū)ο蠛?,還可以在棧中定義一個特殊的變量,讓棧中這個變量的取值等于數(shù)組或?qū)ο笤诙褍?nèi)存中的首地址,,在棧中的這個特殊的變量就變成了數(shù)組或者對象的引用變量,,以后就可以在程序中使用棧內(nèi)存中的引用變量來訪問堆中的數(shù)組或者對象,引用變量相當于為數(shù)組或者對象起的一個別名,,或者代號,。 6.3.Java內(nèi)存泄露和內(nèi)存溢出內(nèi)存泄漏:分配出去的內(nèi)存回收不了 內(nèi)存溢出:指系統(tǒng)內(nèi)存不夠用了 6.4.Java類加載機制JVM將類加載過程劃分為三個步驟:裝載、鏈接和初始化,。 6.5.內(nèi)存回收7.線程池什么叫線程池,,線程池作用?什么是連接池,連接池作用?線程池就是申請固定數(shù)目的線程,,放在某個空間中,。當申請線程時,就從線程池中取得,。當線程池中的線程都被占用的時候,,無法獲取到新的線程。通過ThreadPoolExecutor來創(chuàng)建一個線程池連接池是數(shù)據(jù)庫連接池,,跟線程池原理一樣,。目的都是一樣的,防止鏈接過多造成壓力,。 8.自己攻克的難題9.性能調(diào)優(yōu)9.1數(shù)據(jù)庫調(diào)整9.1.1 sequence緩存的增加9.1.2 增加日志大小與數(shù)量,,并且將日志文件與數(shù)據(jù)文件磁盤分離,減少io寫爭搶9.1.3 調(diào)整緩沖池大小9.1.4 打開數(shù)據(jù)庫的臟讀回寫9.2was參數(shù)調(diào)整9.2.1 線程池調(diào)整 服務器—所有服務器—dbank-provider—線程池—WebContainer 100并發(fā)50/300,300并發(fā)50/600; 9.2.2 JVM調(diào)整 服務器—所有服務器—dbank-provider—Java和進程管理—進程定義—Java虛擬機,,修改初始堆大小與最大堆大小(1024M/2048M) 通用JVM參數(shù)填入額外參數(shù)(-XX:MaxPermSize=256M); 9.2.3 JDBC連接池調(diào)整 資源—JDBC—數(shù)據(jù)源—dbank_ds—連接池屬性,,修改最小連接數(shù)與最大連接數(shù) 100并發(fā)10/300,300并發(fā)10/600; 9.2.4 系統(tǒng)日志大小及個數(shù) 故障診斷—日志和跟蹤—服務器名(如dbank-provider)—JVM日志 將SystemOut.log與SystemErr.log最大大小修改為200MB,歷史日志文件最大數(shù)為20個,。 9.2.5 修改數(shù)據(jù)庫隔離級別 資源—JDBC—數(shù)據(jù)源—dbank_ds—定制屬性—webSphereDefaultIsolationLevel(需翻頁)將默認級別4修改為2,。 9.2.6 修改應用日志緩存大小 修改應用中(直銷銀行、電子賬戶,、產(chǎn)品中心)日志配置文件logback.xml中的quenceSize從10240修改為1024,。 9.3添加索引9.4代碼調(diào)優(yōu)10.你說說你做的最好的項目?要重點介紹到 ①項目是做什么? ②用到那些技術? ③整個項目中最大的亮點是?核心部分 ④遇到bug是怎么解決的? 例如: 我認為我做的最好的項目是電子賬戶系統(tǒng),,電子賬戶類似于支付寶,是**銀行直銷銀行的賬務支撐系統(tǒng),。分為賬戶管理,、記賬、對賬,、日終跑批,、報表統(tǒng)計等模塊。目前生產(chǎn)用戶數(shù)量在六七萬左右,。使用技術IFP(基于Spring)+Maven,,生產(chǎn)中配置兩臺應用服務器,使用F5負載均衡,,配置虛地址,,由F5分發(fā)到兩臺服務器。 你項目遇到bug?怎么查問題?例如:首先遇到了bug,,會查詢?nèi)罩?,通過日志定位到某個類的行數(shù),判斷是否有代碼問題,。 你遇到了什么bug?你是怎么解決? 例如我自己項目中,,查詢量非常大。通過日志發(fā)現(xiàn)了堆內(nèi)存溢出,,最后通過優(yōu)化代碼,,減輕new和加大堆內(nèi)存。 數(shù)據(jù)源方式鎖表,,由于db2默認隔離級別4較高,改為2,。 批量扣劃時間超長導致規(guī)定時間沒有取到文件改為主動通知方式,。 連接數(shù)不夠調(diào)優(yōu)。 11.java的數(shù)據(jù)結構java.util包中三個重要的接口及特點:List(列表),、Set(保證集合中元素唯一),、Map(維護多個key-value鍵值對,保證key唯一),。其不同子類的實現(xiàn)各有差異,,如是否同步(線程安全)、是否有序,。 12.java中常用的類,,包,接口類:String Integer Long File Date Thread 包: 第一個包:java.lang包 該包提供了Java語言進行程序設計的基礎類,,它是默認導入的包,。該包里面的Runnable接口和Object,、Math、String,、StringBuffer,、System、Thread以及Throwable類需要重點掌握,,因為它們應用很廣,。 第二個包:java.util包 該包提供了包含集合框架、遺留的集合類,、事件模型,、日期和時間實施、國際化和各種實用工具類(字符串標記生成器,、隨機數(shù)生成器和位數(shù)組),。 第三個包:java.io包 該包通過文件系統(tǒng)、數(shù)據(jù)流和序列化提供系統(tǒng)的輸入與輸出,。 第四個包:java.sql包 第五個包:java.NET包 第六個包:java.math包; 接口:Comparable Collection Map List Runnable 13.https通訊原理:Http傳輸數(shù)據(jù)不加密,,明文,通信端口80;而Https在數(shù)據(jù)通信之前需要客戶端,、服務器進行握手(身份認證),,建立連接后,傳輸數(shù)據(jù)經(jīng)過加密,,通信端口443,。 原理:1.客戶端發(fā)起HTTPS請求;2、服務端的配置;3,、傳送證書;4,、客戶端解析證書;5、傳送加密信息;6,、服務段解密信息;7,、傳輸加密后的信息;8、客戶端解密信息 14系統(tǒng)調(diào)優(yōu):通常的性能瓶頸:cpu,,內(nèi)存,,io,帶寬 vmstat 全面的性能查看工具 netstat網(wǎng)絡相關查看工具 top 與進程相關的性能查看工具 iostatio性能查看工具 ps 進程查看工具 iftop 網(wǎng)絡帶寬查看工具 vi/find/awk/lsof/free編輯器/查找命令/文本過濾/查看進程打開文件進程情況/內(nèi)存查看 查看端口 |
|
來自: 昵稱41735322 > 《待分類》