Java核心技术介绍

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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流
1.what?
流的概念来自Unix的管道,在Unix中,管道是一条不间断的字节流,
用来实现进程间通讯,或者读写外围设备,文件等.
2.一个流,一定会有一个源端和目标端,它们分别可以是计算机内存的某个区域,
java中的'线程有jvm线程调度器负责调度1 多线程
多进程
每个进程间拥有独立的内存空间
0~4G
单核
系统将cpu所有时间分割为相同的时间片
有内核负责调度
线程属于进程内部
进程内部的所有线程共享进程的内存
让一个进程拥有同时执行多段代码的能力java中的线程有jvm线程调度器负责调度
线程控制
start() 启动线程
interrupt() 中断线程,唤醒正在休眠线程
检测当前线程是否被中断
isInterrupted() 只检查中断标志interrupted() 检查并清除中断标志
Java保留两位小数
采用四舍五入的方式:
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转换最简便
*/
public void m2() {
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(f));
}
一个java的DES加解密类转换成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[]转换成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 = 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) {。

相关文档
最新文档