线程与进程

进程是可并发运行的程序在某个数据集合上的一次计算活动。也是操作系统进行资源分配和调度的基本单位。

线程是操作系统进程中能够并发运行的实体,是处理器调度和分派的基本单位。

每一个进程内可包括多个可并发运行的线程。

线程自己基本不拥有系统资源。仅仅拥有少量不可缺少的资源:程序计数器、一组寄存器、栈。

同属一个进程的线程共享进程所拥有的主存空间和资源。

在传统OS中,拥有资源、独立调度和分派的基本单位都是进程,在引入线程的系统中,线程是调度和分派的基本单位。而进程是拥有资源的基本单位。

在同一个进程内线程切换不会产生进程切换。由一个进程内的线程切换到还有一个进程内的线程时,将会引起进程切换。

线程切换

上下文切换的开销

当CPU从运行一个线程切换到运行另外一个线程的时候,它须要先存储当前线程的本地的数据。程序指针等,然后加载还有一个线程的本地数据,程序指针等,最后才開始运行。

这样的切换称为“上下文切换”(“context switch”)。

CPU会在一个上下文中运行一个线程,然后切换到另外一个上下文中运行另外一个线程。

单线程与多线程

多线程能够提高程序的并行性。能够把任务分开有序运行,有效利用cpu资源,提高响应速度。

可是并不代表它比单线程处理的速度快,在进行密集计算时。单线程的速度要比多线程快些。

多线程的缺点:

1)添加资源消耗

线程在运行的时候须要从计算机里面得到一些资源。除了CPU,线程还须要一些内存来维持它本地的堆栈。

它也须要占用操作系统中一些资源来管理线程。

多个线程在创建和切换时,消耗的时间和资源很多其它

2)多个线程共享1个cpu,须要cpu不停地切换运行线程。

java某些类为什么要实现Serializable接口?

当一个类实现了Serializable接口(该接口仅为标记接口,不包括不论什么方法定义),表示该类能够序列化.序列化的目的是将一个实现了Serializable接口的对象转换成一个字节序列,能够把该字节序列保存起来(比如:保存在一个文件中),以后能够随时将该字节序列恢复为原来的对象。

序列化能够将内存中的类写入文件或数据库中。比方将某个类序列化后存为文件。下次读取时仅仅需将文件中的数据反序列化就能够将原先的类还原到内存中。也能够将类序列化为流数据进行传输。总的来说就是将一个已经实例化的类转成文件存储,下次须要实例化的时候仅仅要反序列化即可将类实例化到内存中并保留序列化时类中的全部变量和状态。 甚至能够将该字节序列放到其它计算机上或者通过网络传输到其它计算机上恢复,仅仅要该计 算机平台存在对应的类就能够正常恢复为原来的对象。

序列化的实现:将须要被序列化的类实现Serializable接口,该接口没有须要实现的方法,implements Serializable仅仅是为了标注该对象是可被序列化的。然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就能够将參数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

hashmap与hashtable的差别?以及怎样使用。以及他的一些方法?

1、HashMap不是线程安全的

hashmap是一个接口,是map接口的子接口,是将键映射到值的对象,当中键和值都是对象,而且不能包括反复键,但能够包括反复值。

HashMap同意null key和null value,而hashtable不同意。

2、HashTable是线程安全的一个Collection。

HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完毕了Map接口。主要差别在于HashMap同意空(null)键值(key),由于非线程安全。效率上可能高于Hashtable。HashMap同意将null作为一个entry的key或者value,而Hashtable不同意。 HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。由于contains方法easy让人引起误解。

Hashtable继承自Dictionary类。而HashMap是Java1.2引进的Map接口的一个实现。

最大的不同是。Hashtable的方法是Synchronize的,而HashMap不是,在多个线程訪问Hashtable时。不须要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap採用的hash/rehash算法都大概一样,所以性能不会有非常大的差别。

总结:

hashmap线程不安全 同意有null的键和值 效率高一点、 方法不是Synchronize的,要提供外同步 有containsValue和containsKey方法

hashtable 线程安全 不同意有null的键和值 效率稍低、 方法是Synchronize的 有contains方法方法

Hashtable 继承于Dictionary 类 Hashtable 比HashMap 要旧

HashMap 是Java1.2 引进的Map interface 的一个实现。HashMap是Hashtable的轻量级实现。

利用hashmap对苹果的重量进行排序

一、按key值排序

假设HashMap存储的键-值对为(String,Integer),按key排序能够调用JDK函数sort(默认的按字典升序):

Set keySet = map.keySet();

Collections.sort(keySet);

for(Iterator ite = keySet.iterator(); ite.hasNext();) {

String temp = ite.next();

System.out.println(“key-value: “+temp+”,”+map.getValue(temp);

}

假设想要按字典的降序排列,则需改写sort方法里面的比較器Comparator:

Collections.sort(keySet, new Comparator() {

public int compare(Object o1, Object o2) {

if(Integer.parseInt(o1.toString())>Integer.parseInt(o2.toString())

return 1;

if(Integer.parseInt(o1.toString())==Integer.parseInt(o2.toString())

return 0;

else

return -1;

}

});

二、按value值排序

1)方法一:用两个list链表实现

List keyList = new LinkedList();

keyList.addAll(map.keySet());

List valueList = new LinkedList();

valueList.addAll(map.values());

for(int i=0; i

struts2拦截器

大部分时候,拦截器方法都是通过代理的方式来调用的。

Struts 2的拦截器实现相对简单。

当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并依据其配置实例化相对的拦截器对象,然后串成一个列表(list)。最后一个一个地调用列表中的拦截器。

其实,我们之所以能够如此灵活地使用拦截器。全然归功于“动态代理”的使用。动态代理是代理对象依据客户的需求做出不同的处理。对于客户来说,仅仅要知道一个代理对象即可了。

那Struts2中,拦截器是怎样通过动态代理被调用的呢?当Action请求到来的时候,会由系统的代理生成一个Action的代理对象,由这个代理对象调用Action的execute()或指定的方法,并在struts.xml中查找与该Action对应的拦截器。假设有对应的拦截器,就在Action的方法运行前(后)调用这些拦截器。假设没有对应的拦截器则运行Action的方法。当中系统对于拦截器的调用,是通过ActionInvocation来实现的。

struts2接受參数的方式

1.用Action的属性:

在action 里面定义要接收的參数,并提供对应的setter,getter,和提交參数的名称一致。并不用做数据类型的转换。

对应提交方式能够用get 和post,如:testAction? name=admin

2.使用DomainModel:

在Action 里面不用非常多的属性,而是用Model 层用到的模型,保存它的一个对象。

对应提交方式能够用get 和post,

如:testAction? resBananRc.name=admin

3.使用DTO–传输数据对象

它的作用是接收參数。传递參数,并非项目中的实体类。

如用户注冊时。会用到确认password,所以要先把參数接收过

来,做处理后,再传递给对应方法去创建User 对象。

提交參数的方式的Domain Model 方式的同样。

4.使用ModelDriven:

在创建Action 的时候。Action 实现了ModelDriven 接口。去调用接口的getModel()方法。取到了相关对象。

对应提交方式能够用get 和post,如:testAction? name=admin

5.使用request对象:

此方法与与传统的JSP 等传接參数一样,即使用request. getParameter(“”)方法

Java异常,error和exception





1.Error:全部都继承自Error,表示致命的错误,比方内存不够。字节码不合法等。

Error是程序无法处理的错误,比方OutOfMemoryError、ThreadDeath等。这些异常发生时。Java虚拟机(JVM)通常会选择线程终止。

2.Exception:这个属于应用程序级别的异常,这类异常必须捕捉。

Exception是程序本身能够处理的异常。这样的异常分两大类运行时异常和非运时异常。

MYSQL查看运行状态

1、用命令行的show语句

直接在命令行下登录Mysql,运行show status。

2、用Mysql自带的mysqladmin工具查看status,使用以下命令:mysqladmin -uroot -ppassword status

关于Collection的方法

Servlet的doPost、doGet方法以及一些内置对象

Serlvet接口仅仅定义了一个服务方法就是service。而HttpServlet类实现了该方法而且要求调用下列的方法之中的一个:

doGet:处理GET请求

doPost:处理POST请求

当发出client请求的时候,调用service 方法并传递一个请求和响应对象。Servlet首先推断该请求是GET 操作还是POST 操作。

然后它调用以下的一个方法:doGet 或 doPost。假设请求是GET就调用doGet方法。假设请求是POST就调用doPost方法。doGet和doPost都接受请求(HttpServletRequest)和响应(HttpServletResponse)。

doGet 是接收网页用get方法时调用的

doPost 是用来接收post方法的

get方法就像你在网页的地址栏里看到的一堆乱码,也就是url后面有參数

post就是用表单传过去的,就好象把数据都打成包发过去一样

1.request对象:

client的请求信息被封装在request对象中,通过它才干了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。

2.response对象:

response对象包括了响应客户请求的有关信息,但在JSP中非常少直接用到它。它是HttpServletResponse类的实例。

3.session对象:

session对象指的是client与server的一次会话。从client连到server的一个WebApplication開始。直到client与server断开连接为止。它是HttpSession类的实例.

4.out对象:

out对象是JspWriter类的实例,是向client输出内容经常使用的对象

5.page对象:

page对象就是指向当前JSP页面本身,有点像类中的this指针,它是java.lang.Object类的实例

6.application对象:

application对象实现了用户间数据的共享,可存放全局变量。它開始于server的启动。直到server的关闭,在此期间,此对象将一直存在。这样在用户的前后连接或不同用户之间的连接中。能够对此对象的同一属性进行操作;在不论什么地方对此对象属性的操作,都将影响到其它用户对此的訪问。server的启动和关闭决定了application对象的生命。它是ServletContext类的实例。

7.exception对象:

exception对象是一个例外对象。当一个页面在运行过程中发生了例外,就产生这个对象。假设一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象

8.pageContext对象:

pageContext对象提供了对JSP页面内全部的对象及名字空间的訪问,也就是说他能够訪问到本页所在的session,也能够取本页面所在的application的某一属性值,他相当于页面中全部功能的集大成者。它的本类名也叫pageContext。

9.config对象:

config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的。此信息包括Servlet初始化时所要用到的參数(通过属性名和属性值构成)以及server的有关信息(通过传递一个ServletContext对象)

阿里JAVA开发面试常问问题总结2的更多相关文章

  1. 各大互联网公司java开发面试常问问题

    本人是做java开发的,这是我参加58,搜狐,搜狗,新浪微博,百度,腾讯文学,网易以及其他一些小的创业型公司的面试常被问的问题,当然有重复,弄清楚这些,相信面试会轻松许多. 1. junit用法,be ...

  2. 面试常问的dubbo的spi机制到底是什么?

    前言 dubbo是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力.作为spring cloud alibaba体系中重要的一部分,随着spring cloud alibaba在 ...

  3. Java开发面试总结

    Java开发面试总结.. ----------------------- java 基础知识点这一块: 1.面向对象的三大特征.(继承,封装,多态) 1.1 在什么样的场合下面会使用到继承 1.2 什 ...

  4. 阿里JAVA开发手册零度的思考理解(一)

    转载请注明原创出处,谢谢! 缘由 阿里JAVA开发手册已经发表有很长时间了,值得认真研究思考推广 阿里官方的Java代码规范标准,这份开发手册不仅规范了一些开发细节,也提出了很多工程开发的哲学,值得好 ...

  5. 阿里JAVA开发手册零度的思考理解(二)

    转载请注明原创出处,谢谢! 说在前面 人生的大道上默默地走,就必须要有一盏灯亮着为你引导方向!而这盏灯抑或只是一句话,一句鼓励,一个赞美,一次承认,一次认可,一次相识一次交流-- 上篇文章:阿里JAV ...

  6. 面试常问的几个排序和查找算法,PHP实现

    冒泡,快排,二分查找,都是面试常问的几个算法题目,虽然简单,但是一段时间不用的话就很容易忘记,这里我用PHP实现了一下,温故而知新. 排序 冒泡排序 每一次冒出一个最大的值 function bubb ...

  7. 2019最新最全Java开发面试常见问题答案总结

    2019最新最全Java开发面试常见问题答案总结 马上准备9月份出去面试Java开发,自己学习丢西瓜捡芝麻,学了的都忘了,所以有机会自己做个学习笔记,摘录自各个博文以及总结. 1.JAVA面向对象的特 ...

  8. python基础之面试常问

    目录 python相对其他语言有什么特点? python内存管理机制,gc机制的了解,gc回收三种算法. lambda函数 高级函数 map.reduce.filter.sorted等. 简述六种基本 ...

  9. 阅读阿里Java开发手册记录

    概述 在阅读完阿里Java开发手册(嵩山版)后,发现自己在开发过程中有一些没有按照规范开发的情况,这里将容易忘记的规范记录下来,并且添加自己的理解,一方面方便自己巩固记忆,另一方面希望对其他同学能够提 ...

随机推荐

  1. gzip格式解压缩

    gzip格式解压缩 有时候网络请求中会出现gzip格式的数据,而我们无法通过常规办法进行解析: 这时候可以使用下面的这个工具来解决这个问题: https://github.com/mattt/Godz ...

  2. JQuery攻略(六)菜单导航

    jQuery菜单导航的基础应用 此章节有 1.0 页面导航 1.01面包屑菜单 1.02菜单悬停 1.03菜单快捷键 1.04两个单独的菜单 1.05折叠菜单 1.01面包屑菜单 html <b ...

  3. 制作高仿QQ的聊天系统(下)—— Adapter & Activity

    一.适配器 1.1 分页显示数据 因为聊天信息数目很多,所以adpter需要做分页处理,这里的分页处理是我自己实现的,如果有更好的办法欢迎在评论中告知.我们从友盟的反馈SDK中能得到聊天的list,我 ...

  4. [A类会议] 国内论文检索

    https://www.cn-ki.net/ http://www.koovin.com

  5. 我们为什么不用 MVC 拦截器

    一:MVC 中的拦截器 众所周知,MVC 存在如下几个主要的拦截器:IActionFilter.IExceptionFilter.IResultFilter.IAuthorizationFilter, ...

  6. kafak-python使用补充

    kafka-python的心跳报文使用的是一个独立的线程,以固定的时间(heartbeat_interval_ms,默认是3000ms)间隔发生心跳信息 member_id唯一标识一个客户端的cons ...

  7. 第二章 微服务网关基础组件 - zuul入门

    一.zuul简介 1.作用 zuul使用一系列的filter实现以下功能 认证和安全 - 对每一个resource进行身份认证 追踪和监控 - 实时观察后端微服务的TPS.响应时间,失败数量等准确的信 ...

  8. 不知不觉vs2012 update 4出来了

    今天早上起来原来看新闻说VISUAL STUIDO  2013 正式发布的日期是11月13日,今天打开微软VS2013下载页面,发现没有任何迹象,在浏览里面的新闻的时候发现了VS2012 UPDATA ...

  9. pthread_once重塑singleton模式

    单件模式是非线程安全的: // Single threaded version class Foo { private Helper helper = null; public Helper getH ...

  10. cesium原理篇(三)--地形(1)【转】

    转自:http://www.cnblogs.com/fuckgiser/p/5824743.html 简述 前面我们从宏观上分析了Cesium的整体调度以及网格方面的内容,通过前两篇,读者应该可以比较 ...