博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客 - Java专项练习题知识点整理(二)
阅读量:3905 次
发布时间:2019-05-23

本文共 3010 字,大约阅读时间需要 10 分钟。

目录

■ char的编码

Java中的char是Unicode编码。

Unicode编码占两个字节,就是16位,足够存储一个汉字。

 

■ ASCII编码

1. 标准ASCII 只使用了7个bit,扩展的ASCII使用了8个bit

2. ASCII码包含一些特殊空字符,所以不能打印

3. 中文一般是GBK2312

 

■ join

       这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。

 

■ 什么是正则表达式的贪婪与非贪婪匹配

如:String str="abcaxc";

贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。结果就是匹配到:abcaxc(ab.*c)。  

非贪婪匹配:就是匹配到结果就好,就少的匹配字符。结果就是匹配到:abc(ab*c)。

 

案例:

private static Pattern pattern1 = Pattern.compile("ab.*c");private static Pattern pattern2 = Pattern.compile("ab*c");public static void main(String[] args) {    String str = "abcaxc";    Matcher matcher1 = pattern1.matcher(str);    Matcher matcher2 = pattern2.matcher(str);    if (matcher1.find()) {        // abcaxc        System.out.println(matcher1.group(0));    }    if (matcher2.find()) {        // abc        System.out.println(matcher2.group(0));    }}

编程中如何区分两种模式

默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。ab*?c

 

量词:{m,n}:m到n个

 

*:任意多个

+:一个到多个

?:0或一个

 

. 表示除\n之外的任意字符

* 表示匹配0-无穷

+ 表示匹配1-无穷

(?=Expression) 顺序环视,(?=\\()就是匹配左括号,\\表示转义

 

■ 正则表达式

\d  匹配一个数字字符。等价于[0-9]。grep要加上-P,perl正则支持

\D  匹配一个非数字字符。等价于[^0-9]。grep要加上-P,perl正则支持

 

■ Properties类

        Properties继承自HashTable, Properties中的 store()方法把一个Properties对象的内容以一种可读的形式保存到一个文件中。load()方法正好相反,用来读取文件,并设定Properties对象来包含keys和values。

class Properties extends Hashtable

 

        Properties类用来方便的读写配置文件,支持key-value形式和xml形式的配置文件,以key-value为例,Properties的load方法直接将文件读取到内存中并且以map形式来保存,用 getProperty("key")方法来取得对应的vaule值。

 

■ Socket编程

服务器端:ServerSocket提供的实例

ServerSocket server = new ServerSocket(端口号) 

 

客户端:Socket提供的实例

Socket client = new Socket(IP地址,端口号)

 

■ Scoket通信

 

■ 线程调度算法是平台独立的

        线程调度分为协同式调度和抢占式调度,Java使用的是抢占式调度,也就是每个线程将由操作系统来分配执行时间,线程的切换不由线程本身来决定(协同式调度)。这就是平台独立的原因。

 

■ Servlet线程安全问题

        由于Servlet是单例的,当多个用户访问Servlet的时候,服务器会为每个用户创建一个线程。当多个用户并发访问Servlet共享资源的时候就会出现线程安全问题。

 

原则:

       如果一个变量需要多个用户共享,则应当在访问该变量的时候,加同步机制synchronized (对象){}

       如果一个变量不需要共享,则直接在 doGet() 或者 doPost()定义,这样不会存在线程安全问题

 

■ tomcat容器是如何创建servlet类实例?用到了什么原理?

        当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对 xml文件进行解析,并读取servlet注册信息。然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。(有时候也是在第一次请求时实例化)

 

        在servlet注册时加上 <load-on-startup>1</load-on-startup>,如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

 

■ Object类默认方法

getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(), wait(), finalize()

 

■ 线程间通信

        Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition。

             

使用Contdition和Lock代替Object和Synchronized。

 

1. Contdition和Lock模板

lock.lock();try{    // wait 条件:一般都是使用while    while(meet the condition){        condition.await();    }    // 满足条件进行一系列操作    ... your operation    otherCondition.signal()// otherCondition.signalAll()}catch(){}finally{    lock.unlock();}

 

2. Object和Synchronized

synchronized (lock){    while (meet the condition){        try {            lock.wait();        } catch (InterruptedException e) {            e.printStackTrace();        }    }    // 满足条件进行一系列操作    ... your operation    lock.notify();}

 

■ 保留字、关键字和直接量

goto、const既是保留字也是关键字

3个特殊直接量(常量):true、false、null

转载地址:http://fpqen.baihongyu.com/

你可能感兴趣的文章
AWT事件的继承关系图
查看>>
设计模式之迭代器(Iterator Pattern)-笔记
查看>>
Python入门(P_SDK的安装与使用)
查看>>
为什么XML文档的格式是否规范如此重要呢?为何W3C规定XML处理器不应尝试修复不规范的文档
查看>>
编写高效的Android代码
查看>>
位运算符的使用总结(编辑网络的资源)
查看>>
RMS使用时要注要的地方
查看>>
android简单demo学习系例之菜单实现
查看>>
显示python库路径
查看>>
android简单demo学习系例之排版(LinearLayout)[xml-based]
查看>>
J2ME相关的开源项目
查看>>
android简单demo学习系例之排版(TableLayout)[code-based]
查看>>
android简单demo学习系例之排版(TableLayout)[xml-based]
查看>>
bash日期格式转换(去掉无意义的零)的可选方法
查看>>
常用计算机端口解释
查看>>
转载)保护眼睛,把电脑窗口背景设置成绿颜色
查看>>
FireFox 的强大Web开发插件
查看>>
MIME相关
查看>>
WAP1.0与WAP2.0页面的DTD
查看>>
如何学好C++语言
查看>>