面试会遇到的一些问题




1.应用服务器有哪些?
BEA  的weblogic server
IBM的 Websphere Application Serve
Oracle9i的 Application server
jboss    tomcat




2.抽象方法是否可以同时是static的,native或者synchronized?为什么


首先要了解abstract,static,synchronized,native这些关键字干什么用的。
abstract是抽象的,指的是方法只有声明而没有实现,他的实现要放入声明该类的子类中实现。
static是静态的,是一种属于类而不属于对象的方法或者属性,而我们知道,类其实也是一个对象,他是在class文件加载到虚拟机以后就会产生的对象,通常来说它是单利的,就是整个虚拟机中只有一个这样的类对象(当然,如果用新的类加载器也会生成新的类的对象)。
synchronized 是同步,是一种相对线程的锁。
native 本地方法,这种方法和抽象方法及其类似,它也只有方法声明,没有方法实现,但是它与抽象方法不同的是,它把具体实现移交给了本地系统的函数库,而没有通过虚拟机,可以说是java与其它语言通讯的一种机制。
那么我们就来谈谈这些关键字为什么不能和abstract混用。
首先abstract与static,其实一看他们的作用和属性就很容易辨别,abstract是没有实现的,而static一定要有实现,因为被static修饰的类在内存中只有一份,子类可以继承但不能重写,这样一来被static修饰的抽象方法已经没有了意义。
synchronized 是同步,然而同步是需要有具体操作才能同步的,如果像abstract只有方法声明,那同步一些什么东西就会成为一个问题了,当然抽象方法在被子类继承以后,可以添加同步。
native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢? 




3.constructor即构造方法,不能被继承所以不能被override但可以overload


4.try里面若有return语句则是在finally语句执行完再执行,return表示结束方法故结束之前必须执行完该执行的内容


5.Java方法中只有值传递参数??


程序设计语言中,将参数传递给方法(或函数)有两种方法。按值传递(call by value)表示方法接受的是调用者提供的值;按引用调用(call by reference)表示方法接受的是调用者提供的变量地址,在方法内修改的是对象的引用变量所指向的具体对象地址而不是像值传递时修改的是传递进来的对象。Java程序设计语言都是采用按值传递。当然基本数据类型是Java语言内置的的常量,进行值传递时和字符串一样是不能在方法内被修改的或者说方法内的修改是影响不到外面的,故分为局部变量和全局变量


6.LOB如何存入oracle


方法一
就是你提到的存储在数据库中,但是没听过也没见过谁真这么干过。
不这么做的原因至少有如下两点:


比如一张图片1M左右,多了导致数据库文件体积急剧膨胀


数据的体积大了,查询的时候加载出来也会很慢很慢


方法二
文件像普通文件一样放在磁盘上,数据库中记录文件在文件系统中的路径。
读取文件的时候,先从数据库读取文件在磁盘上的位置,然后服务器(nginx或tomcat等皆可)将文件回送给客户端


方法一的步骤:
除数字、字符串、日期,还会存储大对象(图片,其他数据…)。在SQL中,二进制大对象称为BLOB,字符型大对象称为CLOB。 
读取LOB,需要执行select语句,然后再ResultSet上调用getBlob或getClob方法,或者BLOB或CLOB对象。 
要从Blob中获取二进制,可以调用getByte或getInutStream。 
如果获取了Clob对象,那么久可以通过调用getSubString或getCharacterStream方法来获取其中的字符数据。 
如果要将LOB置于数据库中,需要在Connection对象上调用createBlob或createClob,然后获取一个用于该LOB的输出流或写入流,写出数据,并将该对象存储到数据库中。


代码示例:


//从表中获取一张图像
PreparedStatement stat = conn.prepareStatement(“select Cover from boookcovers where ISBN = ?”);
Stat.set(1, isbn);
ResultSet result = stat.executeQuery();
If (result.next()) {
    Blob coverBlob = result.getBlob(1);//获得数据库的Blob对象
Image coverImage = ImageIO.read(coverBlob, getBinaryStream());//读取
}


//存储一张图片
Blob coverBlob = connection.createBlob();
Int offset = 0;
OutputStream out = coverBlob.setBinaryStream(offset); //读取文件
imageIO.write(coverImage, “PGN”, out);
PreparedStatement stat = conn.prepareStatement(“insert into Cover valus(?, ?)”);
Stat.set(1, isbn);
Stat.set(2, coverBlob);
Stat.executeUpdate();










7. 子程序  存储过程和事务  触发器  函数


事务:保证对数据库的操作组合要么全部成功,要么全部失败。具有四个特性ACID即:原子性,要么一起成功,要么一起失败,这些操作不能够分开执行;一致性,要么都是改变前的状态,要么都是改变后的状态;隔离性,多个事务之间互不影响,独立执行;持续性,一旦改变将永久改变。


PL/SQL程序块是oracle中特有的模块,分为命名模块和匿名模块;匿名模块只能一次使用,无法进行调用,命名模块可以进行调用,又分为子程序和触发器;




子程序是进行业务操作的模块,包括存储过程和函数。存储过程不一定有返回值而函数则必须返回值,存储过程可以返回多个值而函数一般只返回一个值。


触发器是当对数据库进行操作时可以自定义对某些事件发生时进行处理,比如增加数据时进行操作日志记录








8.字节流是否可以读写双字节的中文字符流?
可以读写中文字符流,但若只读取其中的一部分时刚好遇到只读取了汉字的一个字节时会发生乱码现象


9.反射?


反射是实现对象属性和方法进行动态加载的基础即生成Class对象后不必知道具体的对象(Class  cla=Student.Class或者Class.forName()或者对象的getClass()方法),然后根据需要进行方法属性加载,这里尤其要注意的是cla的getDeclared***()方法可以破坏封装实现对象所有属性方法的访问。






10.获取数据源方式:
1)驱动 url 用户名和密码直接用Java代码实现
2)Java代码加载配置文件方式
3)tomcat的context.xml 配置数据源jndi方式
4利用mybatis、hibernate、spring等的配置文件实现


前两种是jdbc的实现方式,后两种是配置数据源的方式


11.web应用程序的组成:
1)前台jsp+jdbc+servlet+javabean
2)jsp+ssm或ssh


12.求职时必须弄清楚的:
1)企业性质:软件开发、互联网、外包、系统集成
2)企业主要业务,个人的待遇:培训晋升、带薪休假、报销等


13.缓存  高并发


    缓存根据作用范围可以划分为事务范围、进程范围、集群范围。事务范围的缓存属于一级缓存,主要缓存的是预编译的sql语句和对象的元数据。二级缓存属于进程范围和集群范围的缓存,缓存的是根据ID查询出来的对象数据,不是默认开启的缓存。针对二级缓存的缺陷又设计了查询缓存,实现了二级缓存所不能的按条件查询结果的缓存。
     二级缓存不适合存储重要的,修改频次比较高的数据。




高并发的解决方法有俩种:


一种是使用缓存比如redis、另一种是使用生成静态页面;还有就是从最基础的地方优化我们写代码减少不必要的资源浪费
还有一种就是使用多台服务器实现负载均衡




14.spring如何管理事务  springMVC原理


   Spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活方便。 
   编程式:
    (1) 声明数据源。 


  (2) 声明一个事务管理类,例如:DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等 


  (3) 在我们的代码中加入事务处理代码


  声明式即xml配置方式:
    (1)定义数据源,事务管理类 


  (2)定义事务拦截器
     3)声明并使用代理类进行 




springMVC的工作原理:


1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.


2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。


3-4、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。


5、Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。


6、Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。


7、Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。










15.web服务器和应用服务器都有哪些?区别?
web服务器:apache  tomcat IIs 
应用服务器:tomcat weblogic  websphere
web服务器主要是使用通信协议比如http接受客户端的请求以及返回服务器端的响应。
应用服务器主要是提供程序处理时需要的接口以简化开发比如tomcat中的request对象等可以直接调用


16.如何加载文件夹内特定类型的文件名字,比如mp3


使用文件的listfiles(new FileFileter(){
return name.endsWith(".mp3");
})就可以实现。主要使用了用文件过滤器的匿名内部类为参数的listfiles()方法。






17. Java后台有一万条数据,如何导入数据库?如果有1万条数据,数据库中取出相似结果的值?


18.连接池都有哪些?


现在常用的开源数据库连接池主要有c3p0、dbcp、proxool三种,其中:
Spring                         推荐使用dbcp;
Hibernate                 推荐使用c3p0和proxool; 






19.mysql的分区  redis   硬件缓存
 redis是将读取的内容缓存在内存中,属于硬件缓存的类别


  mysql的分区是数据库优化设计的一部分


20. 内聚   组合   耦合?
     内聚指的是代码内部各元素之间联系的紧密程度主要指单一职责原则;
     组合,顾名思义指的是一个对象是另一个对象的组成部分即可理解为前者是后者的成员属性元素可以构造后者,比如叫声接口作为鸟类的属性;
     耦合则指的是对接口的调用,用在业务逻辑处理中的service接口即是


21.下列几种xmldom中,那个对中文的支持最好:(

A.MSXML2.XMLHTTP.5.0B.MSXML2.XMLHTTP.4.0C.MSXML2.XMLHTTP.3.0D.MSXML2.XMLHTTP




22. Java虚拟机?
   Java虚拟机包含在jdk中,是一个虚拟的计算机,可以屏蔽程序运行的实际平台环境,实现跨平台运行,主要包括五个部分:指令集,栈,堆,寄存器,存储区。Java程序的编译器是javac.exe 编译后生成字节码文件,然后交给虚拟机进行解释执行。


23. 问在用数据库的时候,遇到什么问题。(其实是问SQL的优化方面的东西) 答: 
  1)查询时使用索引   2)少用in,exist等 
  3)查询条件尽量要多,能过滤掉最多记录的条件放在右边,因为orcale中是从右向左执行的。 
  4)多用左联接,右联接 
  5)多表查询时,数据少的表作为基表,放在右边 




24. EJB ?  .ejb的配置文件有哪些?ejb的事务的地方在哪个配置文件和哪个关键字节点处进行配置? 


ejb配置文件ejb-jar.xml  
节点   <trans-attribute>Supports</trans-attribute>






25.Jdbc数据库连接的过程,步骤   事务
加载驱动   建立连接   发送sql语句获得返回结果集    处理结果集   关闭资源












26. 怎样使一个类在网络上传输?
进行序列化  任何类型只要实现了
Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。这样子极大的简化了类的设计
 Serializable里有哪些方法:没有方法
public abstract interface java.io.Serializable {
}




27. oracle中如何合理使用索引?
频繁用作搜索的列,频繁查询的列,经常排序分组的列,经常用作连接的列应该使用索引;
索引应经常进行更新,删除无用的索引;
对于小型表一般不建议索引。
尽可能使用字节比较少的字段作为索引。


28. UML 建模?E-R图


29. 关于A块说法正确的是


public void method(){
   List list = new ArrayList();
   synchronized(list){
   System.currentTimeMillis(); //A
}
}


a. method方法需要同步;
b. method方法需要不需要同步;
c. ...
d. 以上说法都不对;




30. number(p,s)
解释:
    p表示有效数字的位数即会对有效数字以外的数字进行舍去;
    s表示精度即精确到哪位数(若为负数则表示精确到小数点左侧的与其为正数时的权位相同的位数s=2时精确到小数点后两位即百分位比如-2表示精确到百位)




31. 使用Java语言读写Microsoft文档:
   使用Apache POI 提供的接口进行操作,其是将文档当作对象进行处理的:
HSSF[1]  - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF[1]  - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF[1]  - 提供读写Microsoft Word DOC格式档案的功能。
HSLF[1]  - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF[1]  - 提供读Microsoft Visio格式档案的功能。
HPBF[1]  - 提供读Microsoft Publisher格式档案的功能。
HSMF[1]  - 提供读Microsoft Outlook格式档案的功能。































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值