日常笔记

一、继承成员变量和继承方法之间的差别:对于一个引用类型的变量而言,当通过该变量访问它所引用的对象的实例变量时
,该实例变量的值取决于声明该变量时的类型;当通过该变量来调用它所引用的对象的方法时,该方法行为取决于它所
实际引用的对象的类型。
二、jquery框架

jQuery.validate.js 是一个验证的框架 可以迅速的验证一些常见的输入,并且还可以扩充自己的验证方法。
三、jdbc和hibernate区别

hibernate 是对jdbc的封装,为了java的面向对象考虑 和使用简单,来操作对象来实现和数据库的交互
jdbc是直接来操作数据。
对于多个联表的查询复杂的查询语句来说,jdbc性能更好,内存占用的更少。对性能要求比较高,系统比较复杂和大,如有报表方面要求的系统一般都用jdbc

四、IOC技术(控制反转、依赖注入-设置注入、构造器注入) 全部的操作通过applicationContext.xml进行配置
spring两大特性:ioc、aop。ioc将对象交由spring去管理,自己无需关注对象的创建。只需要关注需要什么而不需要关注如何去获取。
面向切面编程 比如事务管理,通过配置把事务切到指定的方法上,在调用方法前开启事务,在方法结束的时候关闭事务,发生异常的时候可以事务回滚。
动态代理类实现。
五、 socket(套接字) 是对tcp和udp的一层封装,是调用tcp的接口。 tcp需要进行3次握手,客户端发送报,服务端接收报,并发送一个包,客户端收到包并发送确认报
建立socket连接至少需要一对套接字,其中一个运行于客户端clientsocket 另一个运行于服务端serverletsocket
套接字之间的连接过程分为三个步骤,服务器监听、客户端请求、连接确认。tcp连接是面向连接的 通信前需要三次握手,而udp不是面向连接的,不需要进行三次握手,所以udp传输的速度会快些 比如qq。
六、调一个过程,用thread_join,一个线程可以等待一个线程退出
或者常见的线程调用是thread_yield,它允许线程自动放弃cpu从而让另一个线程运行。
七、线程(thread):随着cpu频率增长开始出现停滞,而开始向多he方向发展。多线程,作为实现软件并发执行的一个重要的方法,也开始具有越来越重、要的地位。

一个标准的线程由线程id、当前指令指针、寄存器集合和堆栈组成。各个线程之间共享程序的内存空间(包括代码、数据段和堆等)。
在线程数少于处理器数量的时候可以实现真正的并行。反之,至少有一个处理器需要同时运行多个线程,。这种并发可以模拟出来,操作一小段的时间(
0每次执行系统会让多线程程序轮流的执行,()

这样一个在不断的处理器上切换不同的线程的行为称之为线程调度(Thread Schedule)
在线程调度中,线程通常拥有至少三种状态,<font style="background-color: #000000"></font>分别为 :运行、就绪、阻塞。


同步和锁:
为了避免多个线程同时读写同一个数据而产生不可预料的后果,我们需要将各个线程对同一个数据的访问同步(Synchronization)。所谓同步就是指在
一个线程访问数据未结束的时候,其他线程不得对同一个数据进行访问,如此对数据的访问被原子化了。同步最常用的方法就是锁(lock)
如何控制并发:先通过乐观锁控制,然后使用悲观锁,在并发较高的地方想更新版本号,让数据库先锁住着一条数据,防止其他线程进行读写操作。
Java控制并发的三种方式:在方法前加上synchronized;在方法里面加上synchronized块;给代码上锁java.util.concurrent.locks.Lock
lock.lock try{} finally {lock.unlock}
八、集合和数组

Vector(矢量):addElement()插入对象,elementAt()一次提取出来一个对象。

九、接口
面向接口编程,接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极好地降低程序各模块之间的耦合,从而提高系统的可扩展性和可维护性。

基于这种原则,很多软件架构设计理论都倡导 面向接口编程,而不是面向实现类编程,
希望通过面向接口编程变成来降低程序的耦合。面向接口编程的优势。
十、算法
十一、 servelt struts1 Struts2(FilterDispatcher控制器)
Struts1是直接依赖于servt的api的,导致了类之间耦合度很高,需要修改的时候会牵扯到视图层。
servlet是j2ee的核心技术的一部分,Struts1 、2 都是以它为基础的。它是服务器端负责处理客户端发送过来的请求并产生回应的
一个控制器。
struts1是从servlet演变而来的,一个servlet请求,不过它做了一些转发,转发到不同的业务逻辑里面,就跟switch类似。
struts2去掉了actionform的概念,集成了一些其他的功能。
1、sturts1 action是单例模式,线程是不安全的。
struts2 action线程是安全的,action为每一个请求都生成了一个实例。
2、Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。
Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。
3、执行流程
a)struts1
jsp发起httprequest请求->servlet捕获->struts.xml->namespace+ActionName-> Action->填充表单setXxx()->action.execute()->”success”->Result->设置request属性->跳转目标页
b) Action(jsp发起httprequest请求,被过滤器捕获)->FilterDispatcher->struts.xml->namespace+ActionName->new Action->填充表单setXxx()->action.execute()->”success”->Result->设置request属性->跳转目标页

十二、
查询节点:根据元素的id来查找节点,document.getElementById().通过指定的id来返回元素的节点 忽略文档的结构。
十三、AJAX
Asynchronous JavaScript and xml(异步)其实质是使用xmlhttprequest对象异步的向服务器发请求
服务器返回部分数据,而不是完整的页面,以页面无刷新的效果更改页面中的局部的内容。
从 Web 表单中获取需要的数据。
建立要连接的 URL。
打开到服务器的连接。
设置服务器在完成后要运行的函数。
发送请求。
示例 Ajax 方法就是按照这个顺序组织的:
发出 Ajax 请求
function callServer() {
// Get the city and state from the web form
var city = document.getElementById("city").value;
var state = document.getElementById("state").value;
// Only go on if there are values for both fields
if ((city == null) || (city == "")) return;
if ((state == null) || (state == "")) return;
// Build the URL to connect to
var url = "/scripts/getZipCode.php?city=" + escape(city) + "&state=" + escape(state);
// Open a connection to the server
xmlHttp.open("GET", url, true);
// Setup a function for the server to run when it's done
xmlHttp.onreadystatechange = updatePage;
// Send the request
xmlHttp.send(null);
}

十四、单例模式
饿汉式(类内部创建一个静态的实例)、懒汉式(创建一个静态变量,在方法调用的时候实例化,只在第一次调用的时候实例化以后不用了)。

我认为使用单例模式的时机是当实例存在多个 会引起程序逻辑错误的时候。比如类似有序的号码生成器这样的东西,怎么可以允许一个应用上存在多个呢?

使用单例模式的一个必要条件:在一个系统中要求只有一个类的实例时应当使用单例模式。反过来说,如果一个类可以有几个实例共存,那么就没有必要使用单例类。java语言中的Runtime对象就是一个单例模式。
第一种形式:懒汉式,也是常用的形式。
public class SingletonClass{
private static SingletonClass instance=null;
public static synchronized SingletonClass getInstance()
{
if(instance==null)
{
instance=new SingletonClass();
}
return instance;
}
private SingletonClass(){
}
}
第二种形式:饿汉式
//对第一行static的一些解释
// java允许我们在一个类里面定义静态类。比如内部类(nested class)。
//把nested class封闭起来的类叫外部类。
//在java中,我们不能用static修饰顶级类(top level class)。
//只有内部类可以为static。
public static class Singleton{
//在自己内部定义自己的一个实例,只供内部调用
private static final Singleton instance = new Singleton();
private Singleton(){
//do something
}
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance(){
return instance;
}
}
十五、instanceof
a instanceif b: a的编译时的类型必须是如下的2种才能编译通过:1a 和b的类是相同的 2 a是后面类b的父类或者子类。
如果a实际引用对象是第二个操作数的实例或者是子类实现类的实例可以返回true
静态方法属于类的 属于前面声明的类型。如 Animal a1 = new Animal();Animal a2 = new Wolf(); a1 a2 调用各自的静态方法 结果一样 都是调用animal的
十六、工厂模式
工厂模式是用来创建实例对象的, 虽然这样可能需要多做一些工作,但会给我们的系统带来更大的可扩展性和尽量少的修改量。
工厂模式主要是为创建对象提供了接口。一般,工厂模式分为三类,简单工厂模式,工厂方法模式,抽象工厂模式。

你可能感兴趣的:(日常笔记)