1、java中自己觉得重要的部分——未完待续

版权声明:未经允许,不得转载 https://blog.csdn.net/cincoutcin/article/details/80395078

一、JAVA基础语言:

1、集合/容器部分:

1、Collection 增加、遍历、删除:

public interface Collection<E> extends Iterable<E> 



2、List:

public interface List<E> extends Collection<E> 


3、LinkedList——List——Collection:

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable



4、ArrayList——List——Collection:

public class ArrayList<E> extends AbstractList<E>

        implements List<E>, RandomAccess, Cloneable, java.io.Serializable



5、Set:

public interface Set<E> extends Collection<E> 


6、LinkedHashSet——HashSet——Set——Collection:

public class LinkedHashSet<E>
    extends HashSet<E>
    implements Set<E>, Cloneable, java.io.Serializable {

public class HashSet<E>
    extends AbstractSet<E>

    implements Set<E>, Cloneable, java.io.Serializable

public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {

public abstract class AbstractCollection<E> implements Collection<E> {



7、TreeSet——SortedSet——Set:

public class TreeSet<E> extends AbstractSet<E>

    implements NavigableSet<E>, Cloneable, java.io.Serializable

public interface NavigableSet<E> extends SortedSet<E> {

public interface SortedSet<E> extends Set<E> {


8、Map:


9、HashMap——Map:

public class HashMap<K,V> extends AbstractMap<K,V>

    implements Map<K,V>, Cloneable, Serializable {


10、TreeMap——SortedMap——Map:

public class TreeMap<K,V>
    extends AbstractMap<K,V>

    implements NavigableMap<K,V>, Cloneable, java.io.Serializable


11、ArrayList和Vector的区别?

答:
这两个类都实现了List接口(List接口继承了Collection接口),他们都是 有序集合,即存储
在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以 按位
置索引号取出某个元素
,,并且其中的数据是 允许重复的,这是HashSet之类的集合的最大
不同处, HashSet之类的集合不可以按索引号去检索其中的元素也不允许有重复的元素
本来题目问的与hashset没有任何关系,但为了说清楚ArrayList与Vector的功能,我们使用对
比方式,更有利于说明问题)。
接着才说ArrayList与Vector的区别,这主要包括两个方面: .
(1)同步性:
Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序
不安全的,它的方法之间是线程不同步的。
如果只有一个线程会访问到集合,那最好是使
用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最
好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。
备注:对于Vector&ArrayList、 Hashtable&HashMap,要记住线程安全的问题,记住Vector
与Hashtable是旧的,是java一诞生就提供了的,它们是线程安全的, ArrayList与HashMap是
java2时才提供的,它们是线程不安全的。所以,我们讲课时先讲老的。
(2)数据增长:
ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了
容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加
一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程
序效率之间要取得一定的平衡。 Vector默认增长为原来两倍,而ArrayList的增长策略在文
档中没有明确规定(从源代码看到的是增长为原来的1.5倍)
。 ArrayList与Vector都可以设
置初始的空间大小, Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空
间的方法。

总结:即Vector增长原来的一倍, ArrayList增加原来的0.5倍。

12、 HashMap和Hashtable的区别?

public class Hashtable<K,V>
    extends Dictionary<K,V>
    implements Map<K,V>, Cloneable, java.io.Serializable {

一.历史原因:

Hashtable是基于陈旧的Dictionary类的, HashMap是Java1.2引进的Map接口的一个实现

二.同步性:

Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

三.值:

只有HashMap可以让你将空值作为一个表的条目的key或value 


13、 List 和 Map 区别?

         一个是存储单列数据的集合另一个是存储键和值这样的双列数据的集合List中存储的
数据是有顺序,并且允许重复
; M ap中存储的数据是没有顺序的,其键是不能重复的,它
的值是可以有重复的。


14、 List、 Map、 Set三个接口,存取元素时,各有什么特点?

set:

        Set里面不允许有重复的元素,所谓重复,即不能有两个相等(注意,不是仅仅是相同)的对象

Set集合的add方法有一个boolean的返回值,当集合含有与某个,元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。

Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。

List:

        add(Obj e)方法时,先来后到的顺序排序。

也可以插队,即调用add(int index,Obje)方法。

一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进集合中一次,其实,并不是把这个对象本身存储进了集合中,而是在集合中用一个索引变量指向这个对象。

List除了可以以Iterator接口取得所有的元素,再逐一遍历各个元素之外,还可以调用get(index i)来明确说明取第几个。

map:

        put(obj key,objvalue),每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等.

            取则可以根据key获得相应的value,即get(Object key)返回值为key所对应的value。另外,也可以获得所有的key的结合,还可以获得所有的value的结合,还可以获得key和value组合成的Map.Entry对象的集合。

总结:List 以特定次序来持有元素,可有重复元素。 Set 无法拥有重复元素,内部排序。 Map保存key-value值, value可多值。


15、说出ArrayList,Vector, LinkedList的存储性能和特性?

        说出ArrayList,Vector, LinkedList的存储性能和特性ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。

Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差。

LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

LinkedList也是线程不安全的, LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用


16、String StringBuffer StringBuilder

String:线程不安全—每次新建一个对象—频繁拼接不建议用

StringBuffer:线程安全—每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象——频繁操作字符串可考虑使用

StringBuilder:线程不安全—与StringBuilder方法差不多——但是效率高

2、线程部分:

2、1程序——进程——多任务——线程——并发——并行:

2、2线程生命周期:

新建(new)—就绪(start())—运行(执行run)—阻塞(sleep()\yield()\wait()\join())—消亡(正常结束\故障\异常)

2、3调度及优先级:

调度分类:

    分时模型:分一个时间片给你

    抢占模型:高优先级执行(java支持的)

优先级:1——10 10级 普通优先级是5


2、4实现方式:

1、继承Thread   2、实现Runnable接口   3、线程池创建

4、如何选取:

当你继承了一个类了,那只能用实现接口或则是线程池这种了嘛。


2、4并发/同步控制:

1、synchronized(对像){临界代码块}  共享变量是私有静态变量。

2、public synchronized int fun1(){方法块}

3、一个对象的互斥锁在某一时刻只能被一个线程拥有,但一个线程同一时刻可以拥有多个对象的互斥锁,拥有一个对象的互斥锁后才可以调用互斥方法。


2、4通信:

基本方法:

1、wait()

2、notify \notifyAll()

详见:点击打开链接


3、JVM部分(GC、类加载机制、内存):

3、1GC:

3、2类加载机制:

3、3内存:点击打开链接

3、4执行:就是一个虚拟的计算机、处于JDK最底层,将.java文件执行以后的二进制文件.class文件翻译成具体平台的机器码去执行,实现了”一次编译到处运行的关键异步“。

详见:点击打开链接


4、NIO/IO模式:

5、接口抽象类:

1、构造方法:抽象可以有、接口不可以有

2、成员方法:

     抽象类:可以有abstract的,也可以有一般的普通成员变量。

     接口:只能是public abstract 的。

3、成员变量:

     抽象类:private public protected 缺省都行 final static 任意。

      接口:只能是public static final 。

4、单继承多实现:一个类已经继承了一个类,那只能拿接口来实现一下了。

6、设计模式:

二、数据库:

三、算法数据结构P272:

1、时间复杂度:

2、链表、增、删、查、改:

点击打开链接

3、栈和队列:

5、堆:

6、串:

7、树遍历与二叉树性质、森林转化、哈夫曼树、哈夫曼编码:

8、图广度优先、深度优先、最小生成树(Kruskal、Prim):

9、查找:顺序查找、有序查找、分块查找

10、二叉排序树:插入、删除

11、B树插入、删除:

12、哈希表:哈希函数、各种方法

13、直接排序:直接插入排序、折半插入、表插入、希尔排序、

14、交换排序:冒泡排序、快速排序

15、选择排序:简单选择排序、树形选择排序、堆排

16、归并排序:

17、基数排序:多关键字排序、链式基数


四、J2EE:

1、jsp

1、1内置对象有哪些?

1、1、1 request:

request.getParameter();获取参数

requet.getMethod():客户提交方式

request.getProtocol();使用的协议

request.getRequestURL():请求字符串客户端的地址

request.getRemoteAddr():客户端IP

request.getServerName():服务器主机名

request.getServerPort();服务器端口

request.getRemotoHost();客户端主机名

request.getHeader("host");获取协议定义头信息host

request.getHeader("user-agent");获取定义头信息user-agent


1、1、2 response

<%response.setHeader("refresh","10");%>自动刷新

<%response.setHeader("refresh","10;URL=index.jsp")%>页面跳转

<%response.sendRedirect("login.jsp")%>地址会变


1、1、3 out

1、1、4 session

1、生命周期:同一个浏览器各页面的跳转,服务器为每一个session对象其实是给了一个ID,且唯一,关闭浏览器就结束。

2、方法:get/setAttribute()/removeAttribute()/getCreateTime()/setMaxInactionInterval()/invalidate()

3、应用:传数据的时候使用

4、session ID唯一的保证:客户访问服务器上的JSP页面时,JSP容器会自动创建一个session对象,并为其分配一个唯一的ID,然后JSP容器还会将此ID传到客户端中保存下来,具体保存在cookie中。

5、JSP运行原理:JSP为每个客户启动一个线程,即JSP容器为每个线程分配不同的session对象,当客户同一WEB应用的其他页面,或则是从该服务器转到其他服务器在回来的时候,不会重建Session,直到客户关闭浏览器,服务器上的session才被撤销。


1、1、5 application

1、生命周期:一个WEB应用一个application,服务器关闭,application被销毁。

2、方法:

3、应用:存一些全局信息,一个网页被访问多少次

4、servletContext对象提供的服务:


1、1、6 page

1、1、7 pageContext

1、1、8 config

1、1、9  exception


1、2JSP执行过程:

1)首先,客户端发出请求(request ),请求访问JSP网页

2)接着,JSP Container将要访问的.JSP文件 转译成Servlet的源代码(.java文件)

3)然后,将产生的Servlet的源代码(.java文件)经过编译,生成.class文件,并加载到内存执行

4)最后把结果响应(response )给客户端

   执行JSP网页文件时,需要经过两个时期:转译时期(TranslationTime)和请求时期(RequestTime)。

   转译时期:JSP转译成Servlet类(.class文件)。

   请求时期:Servlet类(.class文件)执行后,响应结果至客户端。

  转译期间主要做了两件事情:

   (1)将JSP网页转译为Servlet源代码(.java),此段称为转译时期(Translation time);

   (2)将Servlet源代码(.java)编译成Servlet类(.class),此阶段称为编译时期(Compilation time)。

其实,JSP就是一个Servlet。


1、3JSP的运行原理

(1)WEB容器JSP页面的访问请求时,它将把该访问请求交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面。
(2)每个JSP页面在第一次被访问时,JSP引擎先将它翻译成一个Servlet源程序接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。
(3)Tomcat 5把为JSP页面创建的Servlet源文件和class类文件放置在“apache-tomcat-5.5.26\work\Catalina\localhost\<应用程序名>\”目录中,Tomcat将JSP页面翻译成的Servlet的包名为org.apache.jsp(即:apache-tomcat-5.5.26\work\Catalina\localhost\org\apache\jsp\文件下)


1、4JSP标签:

<jsp:include>先编译在插入

<%@ include file="url"%>先插入在编译

<jsp:forward page="url">:重定向到另一页面,地址栏是当前的,内容是另一个页面的。

<jsp:useBean>

<jsp:setProperty>

<jsp:getProperty>


1、5JSP乱码

访问参数乱码:

<%String name=new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8")%>

表单提交信息乱码:

<%request.setCharacterEncoding("UTF-8")%>


2、servlet

2、1、生命周期(执行过程)?

详见:点击打开链接


3、struct


五、SSM

详见:点击打开链接

六、SSH

详见:点击打开链接

MH对比

详见:点击打开链接

七、项目:

1、电子文件安全管理系统

2、基于微信小程序的教学辅助软件

3、基于j2ee的互联网金融平台开发


八、概率统计:

1、期望

2、概率

九、计算机组成原理

十、操作系统

十一、计算机网络

1、两个模型对应的协议及作用

OSI:

物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)

数据链路层:将比特组装成帧和点到点的传递(帧Frame)

网络层:负责数据包从源到宿的传递和网际互连(包PackeT)

传输层:提供端到端的可靠报文传递和错误恢复(段Segment)

会话层:建立、管理和终止会话(会话协议数据单元SPDU)

表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)

应用层:允许访问OSI环境的手段(应用协议数据单元APDU)


2、分层优点:

2、1将复杂的网络划分为更容易管理的层。

2、2较低层为较高层提供服务。

2、3更容易讨论学习每层具体的协议。

2、4层间有标准接口方便工程模块化。

2、5各层更好的互连。

2、6降低了复杂度,程序容易修改,开发产平更快。

3、三次握手/四次挥手:

更多详见点击打开链接


十二、个人发展潜力部分

1、阅读源码:

1、1String 的 equals:

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

1、先判断是不是自己本身   2、再用instanceof判断对象是不是String类型的  3、然后比两个串的长度  4、值转成数组遍历一次判断每个字符是不是相同。


1、2 Thread/ Runnable的源码:

Runable:

@FunctionalInterface
public interface Runnable {
    /**
     * When an object implementing interface <code>Runnable</code> is used
     * to create a thread, starting the thread causes the object's
     * <code>run</code> method to be called in that separately executing
     * thread.
     * <p>
     * The general contract of the method <code>run</code> is that it may
     * take any action whatsoever.
     *
     * @see     java.lang.Thread#run()
     */
    public abstract void run();
}

Thread:实现了Runnalbe



2、维护博客

2、1  目前多是偏java语言基础\设计模式\框架



3、在开发中遇到的问题


猜你喜欢

转载自blog.csdn.net/cincoutcin/article/details/80395078