本文共 4094 字,大约阅读时间需要 13 分钟。
1.Tomcat服务器的默认端口是多少?怎样修改tomcat的端口?
默认端口为8080,可以通过server.xml的Connector元素的port属性修改端口号。 2.多线程的一种实现方法,都是什么?同步的方法有几种?都是什么? 多线程有两种实现方法:继承Thtead类或者实现Runnable接口 实现同步也有两种方法:一种是同步方法,另一种是同步代码块。 同步方法是在方法返回类型前面奖赏synchronized关键字 同步代码快是synchronized(这里写需要同步的对象){.....} 3.谈一下聚簇索引和非聚簇索引的区别以及各自的优缺点 聚簇索引:表中存储的数据按照索引的顺序存储,检索效率比普通索引高,但对数据新增/修改/删除的影响比较大 非聚簇索引:不影响表中的数据存储顺序,检索效率比聚簇索引,对数据新增/修改/删除的影响很小 4.死锁的必要条件?怎么克服? 产生死锁的四个必要条件: 互斥条件:一个资源每次只能被一个进程使用 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 这四个是死锁的必要条件:只要系统发生死锁,这些条件必然成立,二只要上述条件之一不满足,就不会发生死锁。 死锁的解决方法: a.撤销限于死锁的全部进程 b.逐个撤销限于死锁的进程,直到死锁不存在 c.从限于死锁的进程中逐个强迫放弃所占用的资源,知道死锁小时 d.从另外一些进程哪里强行剥夺足够数量的资源分配给死锁,以接触死锁状态。 115.描述重做与回滚的认识 重做日志生成日志文件,是为将来恢复数据使用的。 回滚段保存未提交数据,是为支持事务而其作用的。1.索引组织表,聚簇表的用途
索引组织表:数据按主码存储和排序,同索引结构一样,不过数据直接存储于主码后面。使用与信息检索、空间和OLAP程序。
索引组织表的使用情况: a.代码查找表 b.经常通过主码访问的表 c.构建自己的索引结构 d.加强数据的共同定位,要数据按特定顺序物流存储 e.经常用between...and...对主码或唯一码进行查询。数据物理上分类查询。如一张订单表,按日期装载数据,想查单个客户不同时期的订货和统计情况。 索引聚簇表:索引聚簇表相关的表共享统一数据块中的相同列,并把相关数据存储中同一个数据块上。创建索引聚簇表中最重要的是对SIZE参数有很好的估量,否则聚簇将会降低空间利用,降低效率。 使用索引聚簇表的注意点: a.如果表中数据由大量DML数据的话,那么聚簇将不适用,因为会消极地影响到DML性能。 b.聚簇中,全表扫描将受到影响。这是因为将扫描聚簇中不同的数据,额外增加很多无用的数据。 c.如果经常Truncate表和装载表的话,聚簇将不适用。聚簇中的表无法被Truncate的,这是因为每块中不只是存储一张表的数据。SQL>truncate table emp; ORA-03292:table to be truncated is part of a cluster. d.如果大部分是读取操作,且通过聚簇码索引或聚簇表中其他索引来读取的话,聚簇将会比较适用。 2.消耗资源的SQL的定位方法 Select sql_text from v$sql where disk_reads >1000 or (executions > 0 and buffer_get/executions>30000); SELECT * FROM (SELECT sql_text,buffer_gets,disk_reads from v$sql ORDER BY buffer_gets,disk_reads DESC) WHERE ROWNUM<=10; 3.对触发器的认识 触发器是表上的程序,只要提供数据添加、修改、和删除后的处理方法,可以用来检查数据及进行数据更新,也可以分担一些前端应用程序撰写的逻辑规则。用场景:触发器可以查询其他表,而且可以包含复杂的SQL语句。他们主要用于强制复杂的业务规则或要求。 触发器的主要应用场合概括起来讲有以下几种: 1)当向一张表中添加或删除记录时,需要在相关表中进行同步操作。比如,当为应用系统添加一个系统用户时,需要同时向权限表中添加该用户的缺省权限,此时就编写系统用户表的触发器在添加记录动作时触发。 2)当表上某列数据的值与其他表中的数据有关联时。比如,当客户进行欠款消费,可以生成订单时通过设计触发器判断客户的累计欠款是否超出了最大限额。 3)当需要对某张表进行跟踪时。比如,当人事表中有人离职时,第一时间通知或更改相关标的值。 4.对于ORA-01555错误的认识 ORA-01555错误的产生:一致性读(Consistent Get)和延迟块清除(Delayed Block Cleanout)第一,谈谈final, finally, finalize的区别。
final修饰符(关键字)
如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载 finally在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 finalize方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。 Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。 注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 第四,&和&&的区别。 &是位运算符。&&是布尔逻辑运算符。 第五,HashMap和Hashtable的区别。 都属于Map接口的类,实现了将惟一键映射到特定的值上。 HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。 第六,Collection 和 Collections的区别。 Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。 Collection是个java.util下的接口,它是各种集合结构的父接口。 第七,什么时候用assert。 断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的: assert(a > 0); // throws an AssertionError if a <= 0 断言可以有两种形式: assert Expression1 ; assert Expression1 : Expression2 ; Expression1 应该总是产生一个布尔值。 Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。 断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记: javac -source 1.4 Test.java 要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。 要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。 要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。 可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。转载于:https://blog.51cto.com/13688896/2118038