基础知识备忘2

Posted Freeguy88

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础知识备忘2相关的知识,希望对你有一定的参考价值。

  • 二维数组的长度:arr[][]

行长度: arr.length

列长度: arr[i] .length

  • 判断字符串是否为空: str.trim().isEmpty()

eg: 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We

Are Happy. 则经过替换之后的字符串为We%20Are%20Happy。

public String replaceSpace(StringBuffer str) 

     for(int i=0;i<str.length();i++)

        if(str.substring(i,i+1).trim().isEmpty())
            str.replace(i,i+1,"%20"); //stringbuffer替换函数写法
        

     
     return str.toString();
  • 工具类Collections方法实现数组翻转:Collections.reverse(ArrayList) 
import java.util.ArrayList;

import java.util.Collections;

public class Main 

public static void main(String[] args) 

    ArrayList<String> arrayList = new ArrayList<String>();

    arrayList.add("A");

    arrayList.add("B");

    arrayList.add("C");

    arrayList.add("D");

    arrayList.add("E");

    System.out.println("反转前排序: " + arrayList);

    Collections.reverse(arrayList);

    System.out.println("反转后排序: " + arrayList);

    

反转前排序: [A, B, C, D, E] 反转后排序: [E, D, C, B, A]

  • JVM内存配置参数:

-Xmx:最大堆大小

-Xms:初始堆大小

-Xmn:年轻代大小

-XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值

 

  • jsp中静态include和动态include的区别:

静态的include:是jsp的指令来实现的,<% @ include file="xx.html"%> 特点是 共享request 请求域,先包含再编译,不检查包含页面的变化。

动态的include:是jsp动作来实现的,<jsp:include page="xx.jsp" flush="true"/>  这个是不共 享request请求域,先编译在包含,是要检查包含页面的变化的。

  • 异常:

运行时异常: 都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

        运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。 

非运行时异常 (编译异常): 是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

  • 关于sleep()和wait():

共同点 : 

1. 他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回。 

2. wait()和sleep()都可以通过interrupt()方法 打断线程的暂停状态 ,从而使线程立刻抛出InterruptedException。 

如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法。如果此刻线程B正在wait/sleep/join,则线程B会立刻抛出InterruptedException,在catch() 中直接return即可安全地结束线程。 

需要注意的是,InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线程调用 interrupt()时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到 wait()/sleep()/join()后,就会立刻抛出InterruptedException 。 

不同点 :  

1.每个对象都有一个锁来控制同步访问。Synchronized关键字可以和对象的锁交互,来实现线程的同步。 

sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。 

2.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用 

3.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常 

4.sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

5.wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

  • 加载驱动方法

1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

2. DriverManager.registerDriver(new com.mysql.jdbc.Driver());

3.System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");

  • Servlet的生命周期

1.加载:容器通过类加载器使用Servlet类对应的文件来加载Servlet

2.创建:通过调用Servlet的构造函数来创建一个Servlet实例

3.初始化:通过调用Servlet的init()方法来完成初始化工作,这个方法是在Servlet已经被创建,但在向客户端提供服务之前调用。

4.处理客户请求:Servlet创建后就可以处理请求,当有新的客户端请求时,Web容器都会创建一个新的线程来处理该请求。接着调用Servlet的Service()方法来响应客户端请(Service方法会根据请求的method属性来调用doGet()和doPost())

5.卸载:容器在卸载Servlet之前需要调用destroy()方法,让Servlet释放其占用的资源。

 

  • SPRING的事务传播特性

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 

PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 

PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。 

PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。 

PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 

PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。 

  • 设计模式分类:

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

  • 进程间通信机制:

# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

# 信号 ( signal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

以上是关于基础知识备忘2的主要内容,如果未能解决你的问题,请参考以下文章

基础知识备忘2

移动端web app开发备忘

Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux)

基础备忘 二叉树前序中序后序遍历相互求法

基础配置备忘录

201402579 《嵌入式系统程序设计》第七周学习总结