JAVA认证 百分网手机站

Java核心技术介绍

时间:2017-06-30 14:16:21 JAVA认证 我要投稿

Java核心技术介绍

  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流

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