Java核心技术介绍

来源:文书网 1.03W

Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。下面yjbys小编为大家分享一篇Java核心技术,希望大家喜欢!

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

热门标签