阿里巴巴java笔试 准备笔记
- 格式:docx
- 大小:20.99 KB
- 文档页数:4
诚信、创新、开放、合作Java计算机二级考试学习课堂笔记。
Java的内部类及其使用内部类字节码文件的取名是外部类的名称加上$再加上内部类的名称。
在内部类当中可以访问外部类的私有的成员变量,在内部类中,可以通过this.成员变量名来访问内部类的成员变量,可以通过外部类名.this.外部类的成员变量名来访问外部类的成员变量。
直接访问内部类是不可以的,必须加上外部类的名称才可以访问不能直接产生内部类的对象,必须先产生外部类的对象,后才能产生内部类的对象,如Java代码复制代码内部类如果放到一个方法当中的话,在其方法外面是无法直接调用的,一个内部类还可以放到条件语句,如if中,无论其放到哪里,它都可以访问外部类的变量。
可以通过在外部类里面定义一个方法,这个方法来实现实例化这个外部类里面的内部类,那么在main中就可以通过外部类的对象来调用这个方法来生成内部类对象了。
如:Java代码复制代码JAVA的面向对象编程--------课堂笔记面向对象主要针对面向过程。
面向过程的基本单元是函数。
什么是对象:EVERYTHING IS OBJECT(万物皆对象)所有的事物都有两个方面:有什么(属性):用来描述对象。
能够做什么(方法):告诉外界对象有那些功能。
后者以前者为基础。
大的对象的属性也可以是一个对象。
为什么要使用面向对象:首先,面向对象符合人类看待事物的一般规律。
对象的方法的实现细节是屏蔽的,只有对象方法的实现者了解细节。
方法的定义非常重要。
方法有参数,也可能有返回值。
注意区分:对象(本身)、对象的实现者、对象的调用者。
分析对象主要从方法开始。
我们通过类来看待对象,类是对象的抽象。
其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。
对象之间的耦合性一定要低(比如不同硬盘和不同主板之间的关系)。
这样才能使每个对象本身做成最好的。
对于对象的要求:高内聚、低耦合,这样容易拼装成为一个系统。
实现高内聚就是要最大限度低提高复用性(复用性好是因为高内聚)。
Java-课堂笔记-第一章至第八章知识点梳理1.控制台程序开发1.1 开发Java程序的步骤(1)编写源程序:Java源程序文件后缀名.java(2)编译源程序:使用javac命令编译源程序,编译之后的文件后缀名.class (3)运行使用java命令运行编译之后的.class文件1.2 程序开发环境记事本、Eclipse或MyEclipse1.3 控制台输入/输出(1)从控制台输入信息使用Scanner对象第一步:创建一个Scanner扫描器对象Scanner input = new Scanner(System.in);第二步:导入Scanner包import java.util.Scanner;第三步:获取从控制台输入的整数int num = input.nextInt();获取从控制台输入的小数double num = input.nextDouble();获取从控制台输入的字符char ziFu = input.next().charAt(0);获取从控制台输入的字符串String str = input.next();(2)从控制台输出信息使用System.out.print();System.out.println();转义字符:\n:换行\t:一个制表符(8个空格)1.4 程序注释Java中的注释有3种:(1)单行注释://这里是注释内容(2)多行注释:/*这里是注释内容*/(3)文档注释:/**这里是注释内容*/1.5 程序调试2.变量和运算符2.1 变量变量:变量就是变化的量,是数据存储空间的表示,即数据在内存空间地址的别名(1)变量的声明语法:数据类型变量名;举例:int score;//声明一个int类型的变量score,保存成绩(2)变量的赋值(初始化)基本数据类型的赋值使用“=”赋值语法:变量名 = 值;举例:score = 98;引用数据类型使用new关键字语法:数据类型变量名 = new 数据类型();举例:Scanner input = new Scanner(System.in);2.2 常量2.3 运算符(1)赋值运算符:=、+=、-=、*=、/=、%=举例:sum += i;//相当于sum = sum + i;(2)算术运算符:+、-、*、/、%(3)关系运算符:>、<、>=、<=、==、!=(4)逻辑运算符:&&、||、!(5)自增运算符:i++或++ii++ 相当于 i = i + 1;(6)自减运算符:i--或--ii-- 相当于 i = i - 1;(7)三目运算符:?:3.数据类型与数组3.1 数据类型(1)基本数据类型整型:byte、short、int、long浮点型:float、double字符型:char布尔型:boolean(2)引用数据类型String、数组、类(class)、接口(3)数据类型转换自动数据类型转换自动数据类型转换的条件1.目标类型和源类型数据类型要兼容,数值类型(整型和浮点型)相互兼容2.目标类型要大于源类型,double型可以存放int型数据,因为double型变量分配的空间宽度足够存储int型变量强制数据类型转换语法:(数据类型)表达式;3.2 数组(1)数组的基本用法数组声明语法:数据类型[] 数组名;或数据类型数组名[];数组分配空间语法:数组名 = new 数据类型[数组长度];数组赋值静态赋值:给数组元素单个赋值如:scores[0] = 98;scores[1] = 87;动态赋值:使用for循环动态给数组元素赋值如:for(int i=0;i<scores.length;i++){ //每次循环把输入的数值赋值给数组元素scores[i] = input.nextDouble();}直接创建数组:方式一:数据类型[] 数组名={值1,值2,值3,....};方式二:数据类型[] 数组名=new 数据类型[]{值1,值2,值3,..};访问数组元素:语法:数组名[下标值];获取数组长度:语法:数组名.length;(2)数组应用数组排序:1.import java.util.Arrays;//导入Arrays工具包2.Arrays.sort(数组名);求最大值:(见第七章数组课堂笔记)求最小值:(见第七章数组课堂笔记)4.流程控制语句4.1 分支结构(选择结构)(1)if选择结构if(判断条件){执行语句;}(2)if-else选择结构if(判断条件){执行语句1;}else{执行语句2;}(3)多重if选择结构if(判断条件1){执行语句1;}else if(判断条件2){执行语句2;}else if(判断条件3){执行语句3;}else{执行语句4;}(4)嵌套if选择结构if(判断条件1){if(判断条件2){执行语句1;}else{执行语句2;}}else{执行语句3;}(5)switch选择结构switch(表达式){case 常量1:代码块1;break;case 常量2:代码块2;break;case 常量3:代码块3;break;.......default:代码块n;break;}4.2 循环结构(1)while循环while(循环条件){循环操作;}特点:先判断,后执行(2)do-while循环do{循环操作;}while(循环条件);特点:先执行,后判断(3)for循环for(循环初始变量;循环条件;循环变量的更新){循环操作;}循环次数固定的时候,优先选用for循环while、do-while、for三种循环的对比,需要重点看下4.3 跳转语句(1)break用在switch选择结构中,表示跳出switch选择结构用在循环结构中,表示跳出整个循环或结束整个循环用在二重循环结构中,表示结束内层循环,继续执行外层循环(2)continuecontinue只能用在循环结构中,表示结束本次循环,进入下一次循环用在二重循环结构中,表示结束内层循环的本次循环,进入下一次循环(3)return。
阿里笔试范文这次阿里巴巴校园实习生招聘笔试题,总体还算简单,但是我没做好,郁闷。
悲剧。
记得几道题目,和大家分享下。
公共题部分:有一道二叉树的题,大慨述10个有2个度的节点,问这颗树有好多个叶子节点。
还有一道是二叉搜索树,给定一个序列,按照顺序输入,构建一颗二叉搜索树,不考虑平衡性,问这颗二叉搜索树的度。
还有一道题:两个人为一组,现在要求先组合两个人的体重是102斤的,问最高效的算法的时间复杂度。
有两道大题:归并排序,还有个是在一个序列里面找组合的和等于给定的数字,输出所有组合,写一种高效的算法。
专业部分JAVA:有一道大题:第一个小问,写一个缓存的简单实现,要求当缓存一定大小,当大于预先设定的大小时,可以删除最近最久没使用的缓存数据。
第二个小问,是一个关于session的问题,具体的记不清楚了。
Question 1. (单选) 在60年代初石油危机的时候,美国总统肯尼迪要求美国石油公司不要将石油的价格提得太快,但是美国石油公司拒绝了肯尼迪的要求。
因此,肯尼迪总统在记者招待会上说:“很久以前,我的父亲告诉我,所有的商人都是见钱眼开的……直到今天我才相信这是真的。
”肯尼迪总统的讲话是以下面哪项假设为前提的? 1. 美国的企业应该听从政府的指示。
2. 美国的企业完全与政府不相干。
3. 美国石油公司在石油危机时的提价措施使自己有利可图。
4. 美国的石油价格应该不受世界石油价格的影响。
Question 2. (单选) 我国多数企业完全缺乏“专利意识”。
根据中国专利局最近对500家大中型企业专利工作的一次调查结果表明,在做科研或新产品规划时制定了专利计划的仅有27%。
下列各项如果为真,哪一个最能削弱上述观点? 1. 在被调查的500家企业以外,有一部分企业也制定了专利计划。
2. 一些企业不知道怎样制定专利计划。
3. “专利意识”和申请专利是两回事。
4. 没制定专利计划的企业不一定没有“专利意识”。
答案:D内联函数:Tip:只有当函数只有10 行甚至更少时才将其定义为内联函数.定义: 当函数被声明为内联函数之后, 编译器会将其内联展开, 而不是按通常的函数调用机制进行调用.优点: 当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联.缺点: 滥用内联将导致程序变慢. 内联可能使目标代码量或增或减, 这取决于内联函数的大小. 内联非常短小的存取函数通常会减少代码大小, 但内联一个相当大的函数将戏剧性的增加代码大小. 现代处理器由于更好的利用了指令缓存, 小巧的代码往往执行更快。
结论: 一个较为合理的经验准则是, 不要内联超过10 行的函数. 谨慎对待析构函数, 析构函数往往比其表面看起来要更长, 因为有隐含的成员和基类析构函数被调用!另一个实用的经验准则: 内联那些包含循环或switch 语句的函数常常是得不偿失(除非在大多数情况下, 这些循环或switch 语句从不被执行).注意:有些函数即使声明为内联的也不一定会被编译器内联, 这点很重要; 比如虚函数和递归函数就不会被正常内联. 通常, 递归函数不应该声明成内联函数.(递归调用堆栈的展开并不像循环那么简单, 比如递归层数在编译时可能是未知的, 大多数编译器都不支持内联递归函数). 虚函数内联的主要原因则是想把它的函数体放在类定义内, 为了图个方便, 抑或是当作文档描述其行为, 比如精短的存取函数.-inl.h文件:Tip:复杂的内联函数的定义, 应放在后缀名为-inl.h 的头文件中.内联函数的定义必须放在头文件中, 编译器才能在调用点内联展开定义. 然而, 实现代码理论上应该放在 .cc 文件中, 我们不希望 .h 文件中有太多实现代码, 除非在可读性和性能上有明显优势.如果内联函数的定义比较短小, 逻辑比较简单, 实现代码放在 .h 文件里没有任何问题. 比如, 存取函数的实现理所当然都应该放在类定义内. 出于编写者和调用者的方便, 较复杂的内联函数也可以放到 .h 文件中, 如果你觉得这样会使头文件显得笨重, 也可以把它萃取到单独的-inl.h 中. 这样把实现和类定义分离开来, 当需要时包含对应的-inl.h 即可。
day01计算机分类1.PC机:家用个人电脑2.服务器:处理大量数据的超级计算机3.智能终端:手机,IPAD4:嵌入式设备:除了上面三种以外,带CPU的Windows操作系统--------PC机Linux操作系统--------其他三类java程序主要是服务器端程序一、Java开发环境(一)、认识Linux系统1.Linux是操作系统,并且开源(开放源代码,免费)2.java主要用于服务器端开发,而Linux是主流的服务器操作系统,所以java 应用部署环境多为LinuxLinux与Windows的差别1.文件结构不同,Windows以盘符为单位,盘符里面是文件夹,而Linux以目录为单位2.外部设备映射不同Windous----盘符Linux-------挂载点3.安全级别不同,Linux比较高,而Windows较低注:/:根目录/home/soft01:主目录Linux常用命令pwd:显示当前工作目录ls:显示当前工作目录的内容cd:改变当前工作目录JDK目录:/opt/jdkEclipse:/usr/local/eclipse蓝色:文件夹红色:压缩文件黑色:文件绿色:可执行文件(二)、Java开发环境1.不同操作系统的编码指令是不同的(0,1不同)2.java编译运行过程编译期:.java源文件编译为.class字节码文件运行期:JVM加载.class并运行.class注:JA V A能实现跨平台3.JDK、JRE、JVM的关系JDK----Java Development Kit(Java开发工具包)除了包含JRE,还包括开发JA V A程序所需的编译、运行等等工具JRE----Java Runtime Environment(Java运行环境)提供运行JA V A程序所需要的环境,包括JVM和JA V A系统类库JVM----Java Virtual Machines(Java虚拟机)加载并运行字节码文件运行JA V A最小环境-------JRE开发JA V A最小环境-------JDKJA V A_HOME:指向jdk安装路径CLASSPATH:类(.class)路径,一般简写为“.”PATH:指向jdk下的bin路径,bin中包括javac,java等等命令。
阿里巴巴笔试记2008-10-1021:25考点(不分先后次序):C++:1.关于DOM的描述;2.网络蜘蛛系统;3.UTF-8;4.数据库检索:查准率和查全率;5.索引压缩;6.设计cralwer;7.Trie树查询;8.HTML&HTTP协议;9.信息检索模型;10.分布式通信协议;11.分布式搜索引擎;12.双向循环链表;13.快速排序;14.32位系统。
1.关于DOM的描述:javascrip里面的dom(文档对象模型)它是一种模型,将格式化文档对象化处理。
在xml和html的处理中广泛应用。
//dom是定义超文本结构的对象及方法,分层次的,有容器类的对象,也有基本元素对象,而这些对象,都包含有相应的属性和对应的操作方法(接口)。
//一般而言,DOM结构准确地反映了HTML文档所包含的内容,也就是说,每个HTML标记表现为一个标记节点(tag node),每个文本项内容表现为一个文本项节点(text node)。
//是W3C组织推荐的处理可扩展置标语言的标准编程接口。
2.网络蜘蛛系统网络蜘蛛即Web Spider,是一个很形象的名字。
把互联网比喻成一个蜘蛛网,那么Spider 就是在网上爬来爬去的蜘蛛。
网络蜘蛛是通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。
如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。
对于搜索引擎来说,要抓取互联网上所有的网页几乎是不可能的,从目前公布的数据来看,容量最大的搜索引擎也不过是抓取了整个网页数量的百分之四十左右。
这其中的原因一方面是抓取技术的瓶颈,无法遍历所有的网页,有许多网页无法从其它网页的链接中找到;另一个原因是存储技术和处理技术的问题,在抓取网页的时候,网络蜘蛛一般有两种策略:广度优先和深度优先(如下图所示)。
Java基础知识总结Java基础知识总结写代码:1,明确需求。
我要做什么?2,分析思路。
我要怎么做?1,2,3。
3,确定步骤。
每一个思路部分用到哪些语句,方法,和对象。
4,代码实现。
用具体的java语言代码把思路体现出来。
学习新技术的四点:1,该技术是什么?2,该技术有什么特点(使用注意):3,该技术怎么使用。
demo4,该技术什么时候用?test。
-----------------------------------------------------------------------------------------------一:java概述:1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器;1994年将Oak语言更名为Java;Java的三种技术架构:JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;JAVAME:Java Platform Micro Edition,开发电子消费产品和嵌入式设备,如手机中的程序;1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre。
2,JRE:Java Runtime Environment,java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。
3,配置环境变量:让java jdk\bin目录下的工具,可以在任意目录下运行,原因是,将该工具所在目录告诉了系统,当使用该工具时,由系统帮我们去找指定的目录。
环境变量的配置:1):永久配置方式:JAVA_HOME=%安装路径%\Java\jdkpath=%JAVA_HOME%\bin2):临时配置方式:set path=%path%;C:\Program Files\Java\jdk\bin特点:系统默认先去当前路径下找要执行的程序,如果没有,再去path中设置的路径下找。
纯⼲货分享!2020阿⾥java岗笔试⾯试题总结(附答案)前⾔2020⾦九银⼗马上结束,现为⼤家整理了这次⾦九银⼗⾯试阿⾥的⾯试题总结,都是我从朋友那拿到的⾯试真题,话不多说,满满的⼲货分享给⼤家!int a=10是原⼦操作吗?是的。
注意点:i++(或++i)是⾮原⼦操作,i++是⼀个多步操作,⽽且是可以被中断的。
i++可以被分割成3步,第⼀步读取i的值,第⼆步计算i+1;第三部将最终值赋值给i。
* int a = b;不是原⼦操作。
从语法的级别来看,这是也是⼀条语句,是原⼦的;但是从实际执⾏的⼆进制指令来看,由于现代计算机CPU架构体系的限制,数据不可以直接从内存搬运到另外⼀块内存,必须借助寄存器中断,这条语句⼀般对应两条计算机指令,即将变量b的值搬运到某个寄存器(如eax)中,再从该寄存器搬运到变量a的内存地址:mov eax, dword ptr [b]mov dword ptr [a], eax既然是两条指令,那么多个线程在执⾏这两条指令时,某个线程可能会在第⼀条指令执⾏完毕后被剥夺CPU时间⽚,切换到另外⼀个线程⽽产⽣不确定的情况。
innodb⽀持全⽂索引吗?5.6版本之后InnoDB存储引擎开始⽀持全⽂索引,5.7版本之后通过使⽤ngram插件开始⽀持中⽂。
之前仅⽀持英⽂,因为是通过空格作为分词的分隔符,对于中⽂来说是不合适的。
MySQL允许在char、varchar、text类型上建⽴全⽂索引。
innodb⽀持表锁吗?⽀持,补充:普通的增删改是表锁,加⼊索引的增删改是⾏锁,执⾏查询时不加任何锁的。
HTTP短连接怎么变成长连接。
在header中加⼊ --Connection:keep-alive。
调⽤yeild()会阻塞吗?阻塞指的是暂停⼀个线程的执⾏以等待某个条件发⽣(如某资源就绪)。
yield() ⽅法:yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执⾏状态,随时可能再次分得 CPU 时间。
B) java C) exeD) htmlprivate void run() public void run() public voidstartOpublic voidbeginQA) 组合框允许选择多个元素 B )组合框的缺省是可编辑的C )组合框只允许选择一个元素D )组合框用JComboBox 类表示.它是由JList 类派生过来的A)・abMainB) +okC) _tcstwindowOpcncdO windowCloscdC) window/\ctivatcd()niouscDraggcdO6.有关Jnva 语言的说法中.哪种是错课的(CA ) java 是高级语言B ) Mva 是编译型语言C ) java 是结构化设计语言D ) java 是移植性强的语言A ・一种全新的程序语言B 一种程序开发辅助工具C ・一种由J AR 写成的,并支持Java Applet 的浏览器 D.—种游戏软件8、Java 用來定义一个类时, 所使用的关键字为(AC)structA )可以有一个或多个main 方法B )最多只能何两个main 方法C )可以育一个或零个main 方法D )只能有一个main 方法A.42,421R 设数组Array 由以下语句定义int Array-new int[10]*则数组最后 •个元素的正确引用方法为( A) Array[10] B) Array[9) C)arrayllO] l» array|9| A.只中断最内层的循环B.只中断最外层的循环 C )借助于标号.可以实现任何外层循环中断D )只中断某一层的循环A )可被其它程序包中的类使用仅能被本程序包中的类使用 C )不能被任意其它类使用 D )不能被其它类继承A )在Java 中类只允许中一继承B )在Java 中一个类只能实现一个接口C )在Java 中一个类不能同时继承一个类和实现一个接口D )以上A )基本类型B )数组类型C)D) 界面类型A) Java 编译器(jawac) Java 解释器(java)C)Appletviewer D)HotJava18xA )循环结构B )分支结构顺序结构 跳转结构B)protected C)extendsD)privateA )不具冇优先级的区别B )相同优先级的运算符.计算顺序是从右到左C )圆括号具冇最高优先级D ) 7"号的优先级高于 关于被私有访问控制符private 修饰的成员变最,以下说法正确的是(C )A )可以被二种类所引川:该类白身、与它在同一个包中的英他类、在英他包中的该类的子类B )可以被两种类访问和引用:该类本身、该类的所有子类C )只能被该类自身所访问和修改D )只能被同一个包中的类访问下列关于修饰符混用的说法,错误的是(D )A ) abstract 不能与final 并列修饰同•个类B ) abstract 类中不可以冇private 的成员C ) abstract 方法必须点abstract 类中D ) static 方法中能处1. Java 源程序经編译生成的字节码文件的扩展名为,字节码文件由解释器执行。
1~3 逻辑题(就是那些有点考验你智商的或者考验你逻辑能力的题目)JAVA基础题4、抽象类与接口有什么不同?5、关于线程的题目,记不清了。
算法题6、写出2乘以17效率最高的算法?7、编程题(题目太长,略)。
好像还是关于JAVA的知识点8、简述final、fianlly和finalize的区别?final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如关闭文件等。
9、简述ArrayLists和LinkedList的区别?ArrayList使用数组方式存储数据索引快,插入删除慢LinkedList使用双向链表实现存储,插入删除快,索引慢10、在try的括号里面有return一个值,那是否还执行finally里的代码。
是在return前执行还是return后执行。
是,在return后执行11、题目太长,略。
设计模式题简述templates和××××(忘了)的区别?数据库题12、创建学生表S,课程表C,学生选课表SC。
写出建表的SQL语句。
13、写出返回选了全部课程的学生的SQL语句。
14、写出返回至少选了5门课的学生的SQL语句。
javascript题15、实现点击页面上的一个链接,然后隐藏这个链接的javascript代码。
<a href=”#” onclick=”javascript:window.open(’a.htm’)”>打开窗口</a>当鼠标打向打开窗口时,出现的链接信息是#,而不是a.htm,从而达到隐藏真实的超级链接地址的效果!测试知识题16、简述什么是测试驱动开发(TDD)。
测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。
1.Java语言中,字符串是对象类型,而字符是数据类型。
2.一旦使用了关键是strictfp来申明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规定的。
如果一个类被声明为strictfp,那么该类中所有的方法都是strictfp。
3.String s1 = new String(“abc”)该语句创建了两个对象。
”abc”被创建与文字池中,s1在堆中被创建。
4.数组不能直接指定列数或者行数,应在创建对象时指定。
Int iArray[][] = new int[3][4]。
5.请描述Java Servlet API中forward()与redirect()的区别?答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址。
后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。
这样,从浏览器的地址栏中可以看到跳转后的链接地址。
所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。
在有些情况下,比如,需要跳转到一个其他服务器上的资源,则必须使用sendRedirect()方法。
6.JSP和Servlet有哪些相同点和不同点?它们之间的联系是什么?答:JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。
JSP编译后是”类Servlet”。
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离出来。
而JSP的情况是Java和HTML 可以组合在一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑。
7.Servlet执行时一般实现哪几个方法?答:public void init(ServletConfig config)Public ServletConfig getServletConfig()Pubic String getServletInfo()Public void service(ServletRequest request, ServletResponse response)Public void destroy()8.请简介依赖注入机制。
答:所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助,无须在代码中创建被调用者,而是依赖于外部的注入。
Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间的依赖关系的管理。
依赖注入通常有两种:设值注入和构造注入。
9.Hibernate的优点是什么?答:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲地使用对象编程思维来操纵数据库。
Hibernate 可以应用在任何使用JDBC的场合,既可以在Java的客户端使用,也可以在Servlet/Jsp 的Web应用中使用。
最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据库持久化的任务。
10.Session和Cookie的区别和联系。
答:cookie机制采用的是在客户保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
11.算法的定义:输入:0个或多个输入输出:1个或多个输出确定性:算法的每一步都应确切、无歧义地定义有穷性;一个算法无论在什么情况下都应该执行有穷步后结束有效性:算法中每一步运算都必须是足够基本的。
12.XML的技术规范:(a)文档模式技术:DTD(Document Type Definition 文档类型定义)XML Schema(b)文档样式技术:CSS(Cascading Style Sheets 级联样式单)XSL(Extensible Style Language 可扩展样式语言)(c)文档查询技术:XQuery1.0(d)文档解析技术:DOM(Document Object Model文档对象模型),一种对平台和语言中立的接口,它基于XML 文档在内存中的树状结构,它的一个主要不足是将整个XML文档装入内存所引起的巨大开销。
SAX(Simple API for XML),使用事件驱动的XML解析,并不要求将整个XML文档一起装入内存。
(e)文档链接技术:XLink(f)文档定位技术:XPath(XML Path Language)13.与DTD相比,Schema的优点有哪些?答:值的类型,例如整数,串等,对应数据库中的预定义的值域类型;支持对元素出现最下次数/最大次数加以限制;支持自定义的数据类型;支持数据元素的继承;与DTD不同的是,语言本身是用XML语法说明的,是更标准的表示,但是表达也就更复杂。
14.Servlet通过HttpServletResponse.addCookie方法来向浏览器发送Cookie,Cookie被添加到HTTP的相应头中,每次一个。
浏览器应该可以接受发自统一Web服务器的20个Cookie。
浏览器也是通过在HTTP请求头中添加域的方法向服务器回送Cookie。
可以通过HttpServletRequest.getCookies方法从请求中一次获得所有的Cookie.少数Cookie可能具有相同的名称,但具有不同的路径属性。
15.Junit:setUp() teardown()assertEquals( ) 内部逻辑判断使用equals()方法assertSame()内部逻辑判断使用”==”16.Struts(a)控制层包括:ActionServlet和 Struts-config.xmlController的基本组件是一个叫ActionServlet的servlet类,这个servlet通过Struts-config.xml文件定义一组映射来配置。
(b)显示层包括:JSP,taglib技术,ApplicationResourcesJSP用来显示视图。
taglib用来控制请求的流程以及辅助处理结果的显示。
ApplicationResources资源文件为JSP和taglib提供支持多国语言的文本数据。
(c)模型层包括:Action,ActionForm,JavaBean或EJBAction是继承org.apache.struts.action.Action的类,它用来处理用户请求,并将结果封装在HttpServletRequest中,返回给ActionServlet。
Struts框架通常为你的应用程序中每一个输入请求创建了一个AcitonForm bean(即一个实现了ActionForm接口的类),它为Action提供用户请求数据。
17.Validator使用两个配置文件来分别确定安装哪个验证例行程序,以及如何将它们应用于给定的应用程序。
Validator-rules.xml 和validation.xml。
18.Struts最初的标记库有4类标记组成。
Bean标记:用来在JSP页中管理bean。
逻辑标记:用来在JSP页中控制流程。
HTML 标记:用来生成HTML标记,在表单中显示数据,使用会话ID对URL进行编程。
模版标记:使用动态模版构造普通格式的页。
19.Hibernate是一个面向Java环境的对象/关系数据库映射工具。
对象/关系数据库这个术语表示一种技术,用来把对象模型表示的对象映射到SQL的关系模型数据结构中去。
Hibernate 不仅仅管理Java类到数据库表的映射,还提供数据查询和获取数据的方法,以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
(a)持久化层(Persistent Objects)包括3部分:关于整体数据库的hibernate.cfg.xml 文件、每个表的POJO/JavaBean类和每个表的hbm.xml文件。
hibernate.cfg.xml主要管理数据库的整体信息,比如URL、driver class、dialect等,同时管理数据库持久化类不是短暂存在的,它的实例会被持久存在保存于数据库中,所有需要实现Serializable接口。
(b)DAO(Data Access Object):它是PO的客户端,负责所有与数据操作有关的逻辑,例如,数据查询、增加、删除及更新。
(c)Hibernate支持三种查询方式:HQL(Hibernate Query Language)、条件查询(CriteriaQuery)和原生SQL查询。
20.Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。
框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。
(a)IOC(Inversion of Control 控制反转) 也称为依赖注入。
所谓依赖注入,是指程序运行过程中,如果需要调用另一个对象协助,无须在代码中创建被调用者,而是依赖于外部的注入。
Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间的依赖关系的管理。
依赖注入通常有两种:设值注入和构造注入。
(b)AOP(Aspect Oriented Programming 面向方面编程)AOP将应用系统分为两部分,核心业务逻辑以及横向的通用逻辑,也就是所谓的方面,例如,所有大中型应用都要涉及到的持久化管理、事务管理、安全管理、日志管理和调试管理等。
使用AOP,你可以将处理aspect的代码注入主程序,通常主程序的主要目的并不在于处理这些aspect。
AOP可以防止代码混乱。
(c)声明式事务处理(Declarative transactions)声明式事务处理是有Spring AOP实现的,类似于EJB的容器管理事务,可以在配置文件中声明对事务的支持,可以精确到单个方法的级别,这通常通过TransactionProxyFactoryBean设置Spring事务代理。
21.import javax.servlet.jsp.tagext.TagSupport;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;TagSupport public int doStartTag() throws JspException22.Java中创建一个线程有两种方法:实现Runnable接口;扩展Thread类。