您的位置:首页 > 运维架构 > Shell

Shell 工作原理

2015-09-22 10:06 615 查看
1 重写与重载
重写:子类与父类之间 子类的方法重写父类的方法 要求方法名相同 参数类型 个数 相同 定义不同 访问权限必须不小于父类 返回值必须相同
重载:同一个类之间,多个方法名相同,但是参数类型或个数不同 不以返回值作为参考

2 String StringBuffer StringBuilder
String的值不能修改 如果要修改 必须重新新建对象 当内存中无效引用多了后 系统GC就会回收 速度就慢了 从而影响系统性能
StringBuffer 的值可以修改 无需新建对象 线程安全 效率低于StringBuilder
StringBuilder 除了值可以修改 另外不是线程安全

3 HashMap与HashTable 与TreeMap
共同点:通过key-value存储数据 无序
HashMap key value 可以为空 key必须唯一 value可以为空 线程不安全 需要额外的同步 ArrayList也是如此
HashTable key value 线程安全 效率低于HashMap key value 不允许为空
HashMap 是接口实现
HashTableo继承Dictionary类

TreeMap 有序
4 final finalize finally
final 不可变 可修饰属性 方法 类 属性值不可变 方法不可重写(父类与子类) 类不可继承
private static fianl int WIDTH = 40;
finalzie 是Object类的方法 可被重写 用于垃圾收集处理
finally 用于异常处理机制 表示总是执行

5 static
static修饰属性 方法 类
修饰属性 表示类成员变量 直接引用
修饰方法 表示类成员方法,直接引用 可以被重写 重载 static 要带上
修饰类 不能修饰类

6 单例模式

class Singleton{
private static Singleton singleton = null;
private Singleton(){

}

public static Singleton getInstance(){
if(singleton==null){
return new Singleton();
}else{
return singleton;
}
}
}

单例类需要提供实例化方法 获取单例对象 由于之前对象没有实例化 所以提供的方法 参数 必须是类成员方法和类成员变量
单例模式主要用于线程池 缓存 日志打印中

不过可以通过java反射机制实例化构造方法为private的类,那基本上可以使所有单例失效

单例模式是线程安全的

7 java 反射机制
利用java反射机制获取单例模式的实例类 不能获取私有构造方法 但是可以实例化
调用相关方法 根据用户名 获取相关私有方法 然后改变访问权限 从而调用相关私有方法
可以访问单例模式中的私有成员变量 私有成员方法 私有构造器 构造对象实例

8 如何抵御反射机制调用单例类私有构造器
解决方案一:在单例类的构造函数中 进行计数 根据计数的值 判断抛出运行时异常
解决方案二:利用枚举 可以 自己处理序列化
public class Singleton{
//initailzed during class loading
private static final Singleton INSTANCE = new Singleton();

//to prevent creating another instance of Singleton
private Singleton(){}

public static Singleton getSingleton(){
return INSTANCE;
}
}

9 java main方法中的参数值
main方法中字符串参数数组作用只是接受命令行输入参数的。命令行参数之间用空格隔开

10 什么情况下使用doGet()和doPost
Jsp页面中的form标签的method属性为get时用doGet 为post时用doPost()方法

11 在java中 如何跳出多重嵌套循环
用break return

12 sleep()与wait()之间的区别
1 这两个方法分别来自Thread和Object类
2 前者占用CPU 不释放同步锁 后者空闲CPU 释放同步锁
3 sleep可以在任何方法中使用 wait必须用于同步控制方法中或同步控制块中
4 sleep必须捕获异常 wait notify notifyall不需要

13 在项目中 spring ioc 如何实际应用
spring ioc 即控制反转 容器控制程序 spring之前是 程序控制 即new 一个对象
在项目中 拦截到请求后 需要进行一些业务处理 但是处理业务的对象在另一个类中
在spring之前 是程序控制 即new一个对象 这样侵入性很强 而现在是交给容器处理
将相关业务对象交给容器控制 通过接口 set 构造函数 注入 而实现上是xml配置文件
或者注解方式(可以实现set注入 效果相同)
关于set注入:属性注入即通过setXxx()方法注入Bean的属性值或依赖对象
关于接口注入:
关于构造函数注入:
基于注解

14 spring Bean 不同配置方式
基于xml配置 :Bean的实现类来自第三方类库 如数据源 因无法再类中标注注解 通过xml配置 命名空间的配置 如aop context
基于注解配置:Bean的实现类是当前项目开发的,可以直接在Java类中使用基于注解的配置
基于java类型配置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: