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) {