Java核心技术介绍
Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。下面本站小编为大家分享一篇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) {