1.1 基本数据类型
int(整型)、long(长整型)、float(浮点型)、double(双精度)、boolean(布尔型)
byte(字节) 、shot(短整型) 、char(字符型)
1.2 实例化
在面向对象的编程中,通常把用类创建对象的过程称为实例化,其格式如下:类名 对象名 = new 类名(参数1,参数2...参数n);多数语言中,实例化一个对象struts框架是干什么的 就是为对象开辟内存空间,或者是不用声明,直接使用。类是抽象。对象是类的实例。
数据库实例:每个数据库引擎实例各有一套不为其它实例共享的系统及用户数据库。数据库是数据以某中方式组织起来的数据集合,物理存储为数据库文件,数据库实例负责维护,访问这些数据。
1.3 静态变量
静态变量属于静态存储方式,其存储空间为内存中的静态数据区,该区域中的数据在整个程序
的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),也可以认为是其内存地址不变化。
1.4 JVM和GC
JVM:
Java虚拟机一个虚拟出的计算机,它屏蔽了与具体平台相关的信息,用于执行JAVA编译程序生成字节码程序。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。 “一次编译,到处运行”。
GC:
Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。
对标记为“不可达的对象“占用的内存进行回收释放。程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。当GC确定一些对象为\"不可达\"时,GC就有责任回收这些内存空间。什么时间回收,GC有一些自己算法。比如指令计数器,根搜索算法等。
1.5 JAVA反射
动态获取类的名称、变量属性等信息以及动态调用类的方法的一种技术。
1.6 JAVA代理
为代理对象提供一种可以控制被代理对象的方式。java通过实现InvocationHandler类来实现代理。
代理类为被代理类的方法动态添加了某些功能,实现了调用者和被调用者之间的解耦。
如:
TimeInvocationHandler timeHandler = new TimeInvocationHandler();
UserService u = (UserService) wProxyInstance(ClassLoader(), Interfaces(), timeHandler);
UserService u = (UserService) wProxyInstance(ClassLoader(), Interfaces(), timeHandler);
u.update(2);
u.save();
1.7 注解
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
spring注解:跟踪代码依赖性,实现替代配置文件功能。
1.8 泛型类
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
比如:
public class UserAction extends BaseAction<UserVo> {
1.9 多线程
线程是进程中的一个实体,是被系统独立调度和分派的基本单位,一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。线程有就绪、阻塞和运行三种基本状态。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
JAVA线程的实现用的是继承extend和实现runable接口。
大多数多线程都是用实现runable接口实现的,可以达到资源共享的目的。
线程的起动由一个线程调度器来分别调用你的所有线程的RUN方法,
我们普通的RUN方法如果没有执行完是不会返回的,可是线程里的RUN方法,只有一定的CPU时间,执行过后就给别的线程了,这样反复的把CPU的时间切来切去,因为切换的速度很快,所以
我们普通的RUN方法如果没有执行完是不会返回的,可是线程里的RUN方法,只有一定的CPU时间,执行过后就给别的线程了,这样反复的把CPU的时间切来切去,因为切换的速度很快,所以
我们就感觉是很多线程在同时运行一样.
1.10 string和stringbuffer区别
string:为不可变对象,一旦被创建,就不能修改它的值;对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
stringbuffer: 是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象.
在字符串连接操作中,stringbuffer要比string效率高的多
1.11 arrayList 、linkList、vector的区别
arrayList、vector底层为数组结构,查询速度快,增加和删除慢。vector某些方式支持线程同步的。
linkList底层为链表结构,查询速度慢,增加和删除很快。
1.12 HashMap和HashTable
1、HashMap:通过键值可快速到自己需要的对象。线程不安全的。它的key、value都可以为null。
2、HashTable:线程安全的。
1.13 struts1和struts2区别
1、struts1 Action 依赖于Servlet ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法或ActionForward。可extends DispatchAction或Action(抽象类)。单例模式。线程不安全。用ActionForm作为数据传递。
2、Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。可extends Action Support 。Struts2 Action仍然可以通过ActionContext访问初始的request和response。多例模式。线程安全。
单例和多例区别:
所谓单例就是所有的请求都用一个对象来处理,比如我们常用的service和dao层的对象通常都是单例的,而多例则指每个请求用一个新的对象来处理,比如action;
之所以用单例,是因为没必要每个请求都新建一个对象,这样子既浪费CPU又浪费内存;
之所以用多例,是为了防止并发问题;即一个请求改变了对象的状态,此时对象又处理另一个请求,而之前请求对对象状态的改变导致了对象对另一个请求做了错误的处理;
1.14 IOC容器
通过反射机制访问java对象的属性,方法,构造方法,获取类以后我们来创建它的对象。JAVA提供了一些反射机制中的类。
IOC(Inverse of Control)可翻译为“控制反转”,但大多数人都习惯将它称为“依赖注入”。
通过IOC可以将实现类 、参数信息等配置在其对应的配置文件中 ,那么当需要更改实现类或参数信息时,只需要修改配置文件即可,这种方法在上例的基础上更进一步的降低了类与类之间的耦合。
Spring的工厂类会帮我们完成配置文件的读取、利用反射机制注入对象等工作,我们可以通过bean的名称获取对应的对象。
通过注解声明的bean在项目启动时被创建,通过xml配置的bean在项目第一次加载时被创建。
singletion 默认的,每个IOC容器只创建一个Bean实例,该实例就会一直放在缓存里供大家使用,直到项目关闭。
prototype 每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。比如购物车bean应该用此作用域。
request 每次http请求创建一个bean实例
session 每次会话创建一个bean实例
globalsession 每个全局Http请求创建一bean个实例
1.15 AOP(面向切面)
原理:
AOP基于动态代理实现的,动态代理又是基于反射实现的。
AOP(Aspect-OrientedProgramming,面向切面编程),动态给程序添加统一添加功能的一种技术,实现了调用者和被调用者之间的解耦。
⏹ 切面(Aspect):“切面”就是类TestAspect。
⏹ 连接点(Joinpoint):被拦截的类的方法。
⏹ 通知(Advice):“切面”对于某个“连接点”所产生的动作,一个“切面”可以包含多个“Advice”。
⏹ 切入点(Pointcut): 切面中所有通知所关注的连接点,都由切入点表达式execution(* com.spring.service.*.*(..))来决定。
⏹ 目标对象(Target Object):被一个或者多个切面所通知的对象。例如,AServcieImpl和BServiceImpl,当然在实际运行时,Spring AOP采用代理实现,实际AOP操作的是TargetObject的代理对象。
⏹ AOP代理(AOP Proxy):在Spring AOP中有两种代理方式,JDK动态代理和CGLIB
代理。默认情况下,TargetObject实现了接口时,则采用JDK动态代理,例如,AServiceImpl;反之,采用CGLIB代理,例如,BServiceImpl。强制使用CGLIB代理需要将 <aop:config>的 proxy-target-class属性设为true。
通知(Advice)类型:
⏹ 前置通知(Before advice):在某连接点(JoinPoint)之前执行的通知。
⏹ 后置通知(After advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
⏹ 返回后通知(After return advice):在某连接点正常完成后执行的通知,不包括抛出异常的情况。
⏹ 异常后通知(After throwing advice):在方法抛出异常退出时执行的通知。
⏹ 环绕通知(Around advice):包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。
1.16 MVC架构
模型-视图-控制器:struts是一个典型的MVC框架。
1)"视图层"(View): 提供给用户的操作界面。
2)"数据层"(Model):需要操作的数据或信息。
3)"控制层"(Controller):它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。
1.17 SSH框架
SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活、易于扩展的多层Web应用程序。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论