- 相關推薦
Java核心技術(shù)介紹
Java建立在擴展TCP/IP網(wǎng)絡平臺上。庫函數(shù)提供了用HTTP和FTP協(xié)議傳送和接受信息的方法。下面yjbys小編為大家分享一篇Java核心技術(shù),希望大家喜歡!
java中的線程有jvm線程調(diào)度器負責調(diào)度2
主要相同點:Lock能完成synchronized所實現(xiàn)的所有功能
主要不同點: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(調(diào)停者模式), Memento(備忘錄模式),
Observer(觀察者模式), State(狀態(tài)模式), Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)
IO流
1.what?
流的概念來自Unix的管道,在Unix中,管道是一條不間斷的字節(jié)流,
用來實現(xiàn)進程間通訊,或者讀寫外圍設備,文件等.
2.一個流,一定會有一個源端和目標端,它們分別可以是計算機內(nèi)存的某個區(qū)域,
java中的線程有jvm線程調(diào)度器負責調(diào)度1
多線程
多進程
每個進程間擁有獨立的內(nèi)存空間
0~4G
單核
系統(tǒng)將cpu所有時間分割為相同的時間片
有內(nèi)核負責調(diào)度
線程屬于進程內(nèi)部
進程內(nèi)部的所有線程共享進程的內(nèi)存
讓一個進程擁有同時執(zhí)行多段代碼的能力
java中的線程有jvm線程調(diào)度器負責調(diào)度
線程控制
start() 啟動線程
interrupt() 中斷線程,喚醒正在休眠線程
檢測當前線程是否被中斷
isInterrupted() 只檢查中斷標志
interrupted() 檢查并清除中斷標志
Java保留兩位小數(shù)
采用四舍五入的方式 :
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class format {
double f = 111231.5585;
public void m1() {
BigDecimal bg = new BigDecimal(f);
double f1 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(f1);
}
/**
* DecimalFormat轉(zhuǎn)換最簡便
*/
public void m2() {
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(f));
}
一個java的DES加解密類轉(zhuǎn)換成C#
一個java的des加密解密代碼如下:
//package com.visionsky.util;
import java.security.*;
//import java.util.regex.Pattern;
//import java.util.Hashtable;
import javax.crypto.*;
import javax.crypto.spec.*;
import sun.misc.*;
/**
* 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[]轉(zhuǎn)換成String
private static BASE64Decoder dec = new BASE64Decoder(); //將String轉(zhuǎn)換成byte[]
Java正則表達式中的Possessive數(shù)量修飾詞的理解
正則表達式對于數(shù)量限定符如 ?, + , *, {n, m} 的匹配默認是貪婪模式,比如:
a.*b 匹配 acbab 的結(jié)果是 acbab 而不是acb
正則表達式支持懶惰模式,也就是在數(shù)量限定符后加一個數(shù)量修飾詞(quantifier),用問號表示, 比如:
a.*?b 匹配 acbab 的結(jié)果是 acb 而不是acbab
而Java語言在正則表達式中支持一種Possessive 數(shù)量修飾詞 ,用加號表示。其字面意思是像貪婪模式一樣匹配,但不回溯。這到底是什么意思呢?其實這和匹配算法相關,比如:
在貪婪模式下,正則表達式 a.*b 在匹配 acbac時,在匹配成功第一個字符a后,匹配算法會繼續(xù)往后讀取字符a之后的字符來匹配.* , 這時貪婪模式就起作用了,a后面的cbac都能匹配.*,但當匹配算法繼續(xù)往后讀取字符時,發(fā)現(xiàn)已經(jīng)沒有字符可讀了,無法匹配正則表達式中的b了,于是就回溯一個字符,看c是否能匹配b,不能,繼續(xù)回溯,直到回溯到b時,才匹配到了acb。 而a.*+b在匹配時是不會回溯的,也就是說當貪婪地讀到最后一個字符時發(fā)現(xiàn)無有字符與b匹配了,就認為匹配失敗了。
再舉幾個例子
(ab)*+a 匹配 ababacd 時 可以匹配到 ababa , 因為兩個ab之后沒有ab了,無法貪婪
a?+a 匹配aaaaa 時會匹配到 aa ,但 a++a和a{0, 10}+a卻會匹配失敗
struts2標簽中字符串及字符替換
1.替換內(nèi)容為單個字符:
2.替換內(nèi)容為多個字符:
Java虛擬機的垃圾收集算法
一 標記-清除算法(Mark-Sweep)
首先標記出所有需要回收的對象,標記完成后統(tǒng)一回收。
主要缺點: 1. 標記和清除效率都很低 2. 產(chǎn)生大量不連續(xù)的內(nèi)存碎片,導致后面分配大內(nèi)存空間失敗
二 復制算法
將可用內(nèi)存劃分為大小相等的兩塊, 每次只使用其中一塊。 當這塊用完后,就將還存活對象復制到另外一塊上面,再把已經(jīng)使用的內(nèi)存空間一次清理掉。
主要缺點: 代價太高,至少一半的內(nèi)存不能使用。
三 標記-整理算法
標記過程和標記-清除算法一致,但是后續(xù)步驟是讓所有存活的對象都向一端移動,然后清理掉邊界以外的內(nèi)存。
四 分代收集算法
當前商業(yè)虛擬機都采用此算法,分為不同對象代,去進行不同管理。
vector和ArrayList和linklist的內(nèi)部數(shù)據(jù)結(jié)構(gòu)
Java面試中關于容器類List,Set是必問題目。但在我的面試經(jīng)歷中很難遇到滿意的答復。大部分只能了解其大概使用方法,對其內(nèi)部結(jié)構(gòu)缺乏了解,錯誤的使用方式會導致性能大幅下降。
首先介紹ArrayList,顧名思義內(nèi)部數(shù)據(jù)結(jié)構(gòu)是數(shù)組
Java代碼
private transient Object[] elementData;
private int size;
public ArrayList(int initialCapacity){
}
在增加元素時,若容量不足進行擴充
Java代碼
public void ensureCapacity(int minCapacity) {
modCount++;
int oldCapacity = elementData.length;
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) {
【Java核心技術(shù)介紹】相關文章:
SUN JAVA認證介紹08-09
java認證考試介紹07-31
sun java認證考試介紹10-23
java認證考試細則介紹08-19
J2EE核心技術(shù)08-05
電腦速記的核心技術(shù)是什么06-16
Sun認證Java開發(fā)員考試介紹10-09
Java與Java web的區(qū)別08-10
嵌入式系統(tǒng)開發(fā)核心技術(shù)06-25
J2EE的13種核心技術(shù)09-01