Java核心技術介紹
- JAVA認證
- 關注:7.6K次
Java建立在擴展TCP/IP網絡平台上。庫函數提供了用HTTP和FTP協議傳送和接受信息的方法。下面yjbys小編為大家分享一篇Java核心技術,希望大家喜歡!
java中的線程有jvm線程調度器負責調度2
主要相同點:Lock能完成synchronized所實現的所有功能
主要不同點:Lock有比synchronized更精確的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock一定要求程序員手工釋放,並且必須在finally從句中釋放。
Java中的23種設計模式:
Factory(工廠模式), Builder(建造模式), Factory Method(工廠方法模式),
Prototype(原始模型模式),Singleton(單例模式), Facade(門面模式),
Adapter(適配器模式), Bridge(橋樑模式), Composite(合成模式),
Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式),
Command(命令模式), Interpreter(解釋器模式), Visitor(訪問者模式),
Iterator(迭代子模式), Mediator(調停者模式), Memento(備忘錄模式),
Observer(觀察者模式), State(狀態模式), Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)
IO流
?
流的概念來自Unix的管道,在Unix中,管道是一條不間斷的字節流,
用來實現進程間通訊,或者讀寫外圍設備,文件等.
2.一個流,一定會有一個源端和目標端,它們分別可以是計算機內存的某個區域,
java中的線程有jvm線程調度器負責調度1
多線程
多進程
每個進程間擁有獨立的內存空間
0~4G
單核
系統將cpu所有時間分割為相同的時間片
有內核負責調度
線程屬於進程內部
進程內部的所有線程共享進程的內存
讓一個進程擁有同時執行多段代碼的能力
java中的線程有jvm線程調度器負責調度
線程控制
start() 啟動線程
interrupt() 中斷線程,喚醒正在休眠線程
檢測當前線程是否被中斷
isInterrupted() 只檢查中斷標誌
interrupted() 檢查並清除中斷標誌
Java保留兩位小數
採用四捨五入的方式 :
import ecimal;
import malFormat;
import erFormat;
public class format {
double f = 111231.5585;
public void m1() {
BigDecimal bg = new BigDecimal(f);
double f1 = cale(2, D_HALF_UP)leValue();
tln(f1);
}
/**
* DecimalFormat轉換最簡便
*/
public void m2() {
DecimalFormat df = new DecimalFormat("#.00");
tln(at(f));
}
一個java的DES加解密類轉換成C#
一個java的des加密解密代碼如下:
//package ;
import rity.*;
//import ern;
//import table;
import to.*;
import .*;
import .*;
/**
* des加密解密
*/
public class DESPlus {
private static String strDefaultKey = "PLFP"; //默認密鑰
private static final byte[] iv = {0x12, 0x34, 0x56, 0x78, (byte) 0x90, (byte) 0xab, (byte) 0xcd, (byte) 0xef};//des 向量
private static BASE64Encoder enc = new BASE64Encoder();//將byte[]轉換成String
private static BASE64Decoder dec = new BASE64Decoder(); //將String轉換成byte[]
Java正則表達式中的Possessive數量修飾詞的理解
正則表達式對於數量限定符如 ?, + , *, {n, m} 的匹配默認是貪婪模式,比如:
a.*b 匹配 acbab 的結果是 acbab 而不是acb
正則表達式支持懶惰模式,也就是在數量限定符後加一個數量修飾詞(quantifier),用問號表示, 比如:
a.*?b 匹配 acbab 的結果是 acb 而不是acbab
而Java語言在正則表達式中支持一種Possessive 數量修飾詞 ,用加號表示。其字面意思是像貪婪模式一樣匹配,但不回溯。這到底是什麼意思呢?其實這和匹配算法相關,比如:
在貪婪模式下,正則表達式 a.*b 在匹配 acbac時,在匹配成功第一個字符a後,匹配算法會繼續往後讀取字符a之後的字符來匹配.* , 這時貪婪模式就起作用了,a後面的cbac都能匹配.*,但當匹配算法繼續往後讀取字符時,發現已經沒有字符可讀了,無法匹配正則表達式中的b了,於是就回溯一個字符,看c是否能匹配b,不能,繼續回溯,直到回溯到b時,才匹配到了acb。 而a.*+b在匹配時是不會回溯的,也就是説當貪婪地讀到最後一個字符時發現無有字符與b匹配了,就認為匹配失敗了。
再舉幾個例子
(ab)*+a 匹配 ababacd 時 可以匹配到 ababa , 因為兩個ab之後沒有ab了,無法貪婪
a?+a 匹配aaaaa 時會匹配到 aa ,但 a++a和a{0, 10}+a卻會匹配失敗
struts2標籤中字符串及字符替換
1.替換內容為單個字符:
2.替換內容為多個字符:
Java虛擬機的垃圾收集算法
一 標記-清除算法(Mark-Sweep)
首先標記出所有需要回收的對象,標記完成後統一回收。
主要缺點: 1. 標記和清除效率都很低 2. 產生大量不連續的'內存碎片,導致後面分配大內存空間失敗
二 複製算法
將可用內存劃分為大小相等的兩塊, 每次只使用其中一塊。 當這塊用完後,就將還存活對象複製到另外一塊上面,再把已經使用的內存空間一次清理掉。
主要缺點: 代價太高,至少一半的內存不能使用。
三 標記-整理算法
標記過程和標記-清除算法一致,但是後續步驟是讓所有存活的對象都向一端移動,然後清理掉邊界以外的內存。
四 分代收集算法
當前商業虛擬機都採用此算法,分為不同對象代,去進行不同管理。
vector和ArrayList和linklist的內部數據結構
Java面試中關於容器類List,Set是必問題目。但在我的面試經歷中很難遇到滿意的答覆。大部分只能瞭解其大概使用方法,對其內部結構缺乏瞭解,錯誤的使用方式會導致性能大幅下降。
首先介紹ArrayList,顧名思義內部數據結構是數組
Java代碼
private transient Object[] elementData;
private int size;
public ArrayList(int initialCapacity){
}
在增加元素時,若容量不足進行擴充
Java代碼
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = th;
if (minCapacity > oldCapacity) {
Object oldData[] = elementData;
int newCapacity = (oldCapacity * 3)/2 + 1;
if (newCapacity < minCapacity)
JAVA打蜜蜂小遊戲源碼2
for (var upperspc = 0; upperspc < downno; upperspc++) {
if (missiley == upperspc) {
downlf = downlf + blankx[missilex]+"|"+cr;
} else { downlf = downlf+cr; }
}
if (inplay == 1) {
patno = patno + 1;
if (patno >= 3) { patno = 1; }
for (var addline = 1; addline < 5; addline++){
mestotal[addline] = totalblank;
rsmiss = "";
if (missiley == (downno+addline*2-2)) {
if (blankno <= missilex) {
hitflag = parseInt((missilex-blankno)/7, 10);
if (hitflag < 6) {
if ((missilex - blankno - (hitflag * 7)) >= 1) {
if ((missilex - blankno - (hitflag * 7)) <= 5) {
- 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-mo/itrz/java/0e3q5.html