1.当一个线程进入一个对象的一个synchronized方法时,其它线程是否可以同时进入此对象的其它方法? 请写出验证此问题的原代码。
答:不能,一个对象的一个synchronized方法只能由一个线程访问。
情况一:
当一个线程进入一个对象的一个synchronized方法后,其它线程访问该对象的非同步方法。
代码如下:
package com.mutithreading.Object;
public class InvokedObject
{
public synchronized void synchronizedMethod()
{
System.out.println("Invoked synchronizedMethod !") ;
try {
Thread.sleep(10000) ;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void generalMethod()
{
System.out.println("Invoked generalMethod ...") ;
}
}
package com.mutithreading.threads;
import com.mutithreading.Object.InvokedObject;
public class ThreadOne implements Runnable {
private InvokedObject object ;
public ThreadOne(InvokedObject object)
{
this.object = object ;
}
public void run() {
object.synchronizedMethod() ;
}
}
package com.mutithreading.threads;
import com.mutithreading.Object.InvokedObject;
public class ThreadTwo implements Runnable {
private InvokedObject object ;
public ThreadTwo(InvokedObject object)
{
this.object = object ;
}
public void run() {
object.generalMethod() ;
}
}
package com.mutithreading.client;
import com.mutithreading.Object.InvokedObject;
import com.mutithreading.threads.ThreadOne;
import com.mutithreading.threads.ThreadTwo;
public class Client {
public static void main(String[] args) {
InvokedObject object = new InvokedObject() ;
ThreadOne one = new ThreadOne(object) ;
ThreadTwo two = new ThreadTwo(object) ;
Thread threadOne = new Thread(one) ;
Thread threadTwo = new Thread(two) ;
threadOne.start() ;
threadTwo.start() ;
}
}
运行结果:
引用
一个线程在访问一个对象的同步方法时,另一个线程可以同时访问这个对象的非同步方法。
情况二:
当一个线程进入一个对象的一个synchronized方法后,其它线程也访问该同步方法。
package com.mutithreading.Object;
public class ThreadTwo implements Runnable {
private InvokedObject object ;
public ThreadTwo(InvokedObject object)
{
this.object = object ;
}
public void run() {
object.synchronizedMethod() ;
}
}
其它代码同情况一,运行结果:
引用
一个线程在访问一个对象的同步方法时,另一个线程不能同时访问这个同步方法。
情况三:
当一个线程进入一个对象的一个synchronized方法后,其它线程同时访问该对象的另一个同步方法。
此处仅给出对InvokedObject类做出的修改代码:
package com.mutithreading.Object;
public class InvokedObject
{
public synchronized void synchronizedMethod1()
{
System.out.println("Invoked synchronizedMethod1 !") ;
try {
Thread.sleep(10000) ;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public synchronized void synchronizedMethod2()
{
System.out.println("Invoked synchronizedMethod2 !") ;
}
}
运行结果:
引用
一个线程在访问一个对象的同步方法时,另一个线程不能同时访问这个对象的另一个同步方法。
2.使用httpclient的默认配置向某中文站点提交中文内容后,通过web访问访问该站点发现提交的内容都变成了乱码,请分析产生乱码问题的可能原因,并给出相应的解决思路。
httpclient的默认配置向站点提交采用“get”方式,请求编码与接收编码不一致,导致页面出现乱码,或者编码不在此编码标准范围内。
解决思路:统一编码或者增加过滤器
Public String translate (String str) {
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
tempStr = tempStr.trim();
} catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
3.假设存在一个服务器端的分配程序,它拥有包含足够多成员的数据池,当客户端的申请程序向分配程序发出请求时,分配程序会随机从池中分配一个空闲的成员(假设每个成员都有一个唯一标识,分配程序保证一个成员同时只会分配给唯一的申请程序),申请程序结束或再次申请时, 分配程序会自动将其上次申请的成员回收(置成空闲状态放入池中,这个数据成员就有机会被其它申请程序申请到)。
现在要求:
由你来设计一个客户端的申请程序,它连续多次执行申请、使用、释放成员的操作,并且该程序可能存在多个同时运行的实例,在指定时间区间内,每个实例每次都不能使用任一重复成员(申请到重复的成员时申请程序要放弃并重新申请),请描述一下你的实现方案。
如果该程序的多个实例不在同一计算机上运行,还需要考虑什么?
4.在Firefox浏览器内浏览下面页面:
<html>
<head>
<script language="javascript">
div_handle=function(e){
alert('div');
};
document_handle=function(e){
alert('document');
};
</script>
<head>
<body>
<div id='divclick'>click me</div>
<script language="javascript">
document.addEventListener('click',document_handle,true);
document.getElementById('divclick').addEventListener('click',div_handle,true);
</script>
</body>
</html>
当用户点击"click me"时,div_handle和document_handle哪个将被先执行?为什么?
先执行document_handle后div_handle,document_handle直接由document创建,当浏览器装入页面后立即触发,div_handle当浏览器装入document.getElementById('divclick')对象后立即触发
如果需要颠倒执行次序,最简单的修改方案是什么?
最简单的修改方案是:document.addEventListener('click',document_handle,false),将true改为false,事件捕获阶段div_handle函数先触发,而事件冒泡阶段document_handle后触发
5.页面加载时OnDomReady和OnLoad那个事件先被触发,为什么?
OnDomReady事件先被触发
OnDomReady:当浏览器执行到该行后立即触发。
OnLoad:当浏览器装入对象后立即触发。
6.请说明下面代码执行后提示"global"还是"local"?为什么?
var y = "global";
function factory() {
var y = "local";
return new Function("return y");
}
alert(factory()());
global,在全局函数factory()内重新反回一个新匿名函数,原有复写局部变量在新匿名函数中失效,它只对factory()复写,而不对factory()()复写。
7.简述cookie和session作用,区别和应用范围
cookie:表示在客户端创建一个cookie,用来存贮接收服务器的信息
session:表示一个请求的javax.servlet.http.HttpSession对象,Session可以存贮用户的状态信息
cookie:范围是一直存活在整个程序中,当用户将cookie清除时就失效
Session:范围是用户和服务器连接的那段时间,用户与服务器断开属性就失效
8.提供一段代码演示闭包
<script>
//创建Person函数
function Person()
{
//locVal是个局部变量,原本应该该函数结束后立即失效
var locVal = '疯狂Java联盟';
this.info = function()
{
//此处会形成闭包
document.writeln("locVal的值为:" + locVal);
return locVal;
}
}
var p = new Person();
//调用p对象的info()方法
var val = p.info();
//输出val返回值,该返回值就是局部变量locVal。
alert(val);
</script>
分享到:
相关推荐
Java开发工程师笔试题库主要涵盖了Java语言的基础知识,包括语法、运算符、对象与类、接口、数组、方法调用等多个方面。以下是这些题目涉及的知识点的详细解释: 1. **标识符规则**:在Java中,标识符可以包含字母...
Java开发工程师面试题涉及的知识点非常广泛,包括Java基础、面向对象编程、异常处理、多线程、集合框架等多个方面。下面详细解析这些问题背后的知识点: 1. Java基础部分: - 一个".java"源文件中是否可以包括多个...
【标题】2016年4月方正Java软件工程师笔试题 这是一份针对2016年4月方正公司招聘Java软件工程师时所使用的笔试题目集。方正集团是中国知名的IT企业,其对Java工程师的技术要求通常涵盖了基础语法、面向对象编程、...
一套Java开发工程师笔试试题 (请不要在试题上留任何痕迹,所有答案均写在答题纸上) 包括了选择题、填空题、简答题、程序读写题 都有答案 最后一道简答题关于设计模式的题目见博客: ...
Java 开发工程师面试题 本资源摘要信息涵盖了 Java 开发工程师面试的几个重要知识点,包括文件流的输入、输出、使用 JDBC 调用存储过程、业务知识及算法。 文件流的输入、输出: 在 Java 中,文件流的输入、输出...
java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助。java高级软件工程师面试题大全及答,一些公司的面试题,对于正在找工作应对面试的朋友或许有点帮助
Java开发工程师笔试题(带答案).docxJava开发工程师笔试题(带答案).docx
Java开发工程师面试题涉及到多个核心领域,包括数据库优化、SQL查询优化、事务管理、数据类型、性能评估、并发处理、数据库操作、JDBC交互、大数据分页、索引、存储过程、视图以及JAVA运算符等。以下是这些知识点的...
Java作为一门广泛使用的编程语言,其高级工程师面试题往往涵盖了多方面的知识点,旨在考察候选人的技术深度、广度以及实际问题解决能力。2018年最全的Java高级工程师面试题集锦,包含了十几个文档,可以预见这些文档...
【Java开发工程师笔试题解析】 本题为Java开发工程师的笔试题目,主要考察了编程题和选择题两大部分,涵盖排序算法、算术运算、序列化、类与对象、变量类型、构造方法、关键字super、设计模式、异常处理以及多线程...
JAVA高级工程师笔试题(技术部分)知识点总结 一、智力部分(30 分) 1. 错绳问题:如何用一个小时烧一根不均匀的绳子来判断半个小时?(5 分) 知识点:这是一个经典的智力题,考察的是候选人的逻辑思维能力和...
该文件为山大地纬Java开发岗笔试试题 该文件为山大地纬Java开发岗笔试试题 该文件为山大地纬Java开发岗笔试试题 该文件为山大地纬Java开发岗笔试试题 该文件为山大地纬Java开发岗笔试试题
结合自身春招经验整理得出的适合于应届毕业生面试java开发工作的常见面试题,内容以java基础与MySQL数据库为主,包括java基础、MySQL数据库、python基础、web框架、前端基础、爬虫基础、软件测试基础、操作系统基础...
java面试宝典,文档内容聚集了java的基础知识和面试题目。
【Java开发笔试题解析】 ...对于Java开发工程师来说,理解这些概念是非常重要的,它们是编写高效、健壮代码的基础。在面试或笔试中,掌握这些知识将有助于展示候选人的编程技能和对Java语言的理解。
Java开发软件工程师面试题是衡量求职者技能水平和专业素养的重要参考,涵盖了多个技术领域,包括Java编程语言、Oracle数据库、SQL查询语言、Linux操作系统以及Web服务器管理。这些知识点是Java开发者日常工作中不可...
【标题】"新希望六和 面试题 高级JAVA开发工程师"涉及的是一个针对高级Java开发工程师的面试考核,通常这样的面试会涵盖Java编程语言的深入理解、设计模式、并发处理、数据库操作以及软件架构等多个方面。...
Java开发工程师面试题通常涉及到Java语言的核心特性、集合框架、多线程、设计模式、ORM框架如Hibernate、以及Web开发中的MVC架构和框架如Struts。以下是对这些知识点的详细解释: 1. `final`、`finally`、`finalize...
### Java高级工程师面试知识点解析 #### JSP与Servlet的异同及联系 - **相同点**:JSP和Servlet都属于Java Web开发的核心技术之一,主要用于动态网页的生成。 - **不同点**: - **本质区别**:JSP本质上是简化版...