/\*\*
* @param args */ public static void main(String[] args) { Subject sj = new ConcreteSubject(); Observer ob = new ConcreteObserver(); sj.attach(ob); sj.notifyObserversByPush("Hello"); sj.notifyObserversByPull(); } }
interface Subject{ // 添加订阅者 public void attach(Observer ob); // 删除订阅者 public void detach(Observer ob); // 以推方式通知订阅者 public void notifyObserversByPush(String str); // 以拉方式通知订阅者 public void notifyObserversByPull(); }
interface Observer{ // 推模式 public void updateByPush(String str); // 拉模式(注意参数为接口) public void updateByPull(Subject s); }
class ConcreteSubject implements Subject{ List list = new ArrayList(); private String name = "demo"; private int age = 10;
public String getName(){
return name;
}
public int getAge(){
return age;
}
// 添加订阅者
public void attach(Observer ob){
if(!list.contains(ob))
list.add(ob);
}
// 删除订阅者
public void detach(Observer ob){
if(list.contains(ob))
list.remove(ob);
}
// 以推方式通知订阅者
public void notifyObserversByPush(String str){
for(Observer o : list){
o.updateByPush(str);
}
}
// 以拉方式通知订阅者
public void notifyObserversByPull(){
for(Observer ob : list){
ob.updateByPull(this);
}
}
}
class ConcreteObserver implements Observer{ // 推模式 public void updateByPush(String str){ System.out.println(str); } // 拉模式 public void updateByPull(Subject s){ String name = ((ConcreteSubject)s).getName(); System.out.println(name); } }
### 六、附 群硕笔试题
#### 6.1 同一进程的多线程共享那些资源?
线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。
PCB、堆

#### 6.2 Http中get与post的区别
>
> * GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如: login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。POST把提交的数据放置在是HTTP包体中。
> * GET方式提交的数据最多只能是1024字节(因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。),理论上POST没有限制,可传较大量的数据。
> * 在ASP中,服务端获取GET请求参数用Request.QueryString,获取POST请求参数用Request.Form。在JSP中,用request.getParameter(\”XXXX\”)来获取,虽然jsp中也有request.getQueryString()方法,但使用起来比较麻烦,比如:传一个test.jsp?name=hyddd&password=hyddd,用request.getQueryString()得到的是:name=hyddd&password=hyddd。
> * POST的安全性要比GET的安全性高。比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为 (1)登录页面有可能被浏览器缓存; (2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了; (3)除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。
>
>
>
#### 6.3 MVC设计模式的含义,各层的作用。
#### 6.4 计算第10001个质数。
package cn.edu.ujn.practice; /** * * @author SHQ * *前6个质数为:2,3,5,7,11,13,那第6个质数为13,求第10001个质数 * */ public class test { public static void main(String[] args) { System.out.println(resolution(10001)); }
private static Long resolution(int num){
if (num <= 0)
return null;
else if(num == 1)
return (long)2;
else{
int cnt = 1;
Long init = (long) 3;
Long result = null;
while(cnt < num){
if(isPrimeNumber(init)){
result = init;
cnt++;
}
init += 2;
}
return result;
}
}
/\*\*
* 判断是否是素数
*
* @param n
* @return
*/
private static boolean isPrimeNumber(Long n) {
if (n < 2) {
return false;
}
double max = Math.sqrt(n);
for (int i = 2; i <= max; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
JavaScript
-
js的基本类型有哪些?引用类型有哪些?null和undefined的区别。
-
如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种)
-
Object是引用类型嘛?引用类型和基本类型有什么区别?哪个是存在堆哪一个是存在栈上面的?
-
JS常见的dom操作api
-
解释一下事件冒泡和事件捕获
-
事件委托(手写例子),事件冒泡和捕获,如何阻止冒泡?如何组织默认事件?
-
对闭包的理解?什么时候构成闭包?闭包的实现方法?闭包的优缺点?
-
this有哪些使用场景?跟C,Java中的this有什么区别?如何改变this的值?
-
call,apply,bind
-
显示原型和隐式原型,手绘原型链,原型链是什么?为什么要有原型链
-
创建对象的多种方式
-
实现继承的多种方式和优缺点
-
new 一个对象具体做了什么
-
手写Ajax,XMLHttpRequest
-
变量提升
-
举例说明一个匿名函数的典型用例
-
指出JS的宿主对象和原生对象的区别,为什么扩展JS内置对象不是好的做法?有哪些内置对象和内置函数?
-
attribute和property的区别
-
document load和document DOMContentLoaded两个事件的区别
-
JS代码调试