java面试题06
第一部分
1.try{}里面有一個return語句,那么緊跟這個try后面的finally{}里面的code或不會執行,什么時候執行,在return前還是之后?
會執行
在return 執行之前執行
2.寫出通過主函數在控制臺打印出“hello,world”的程序。
package cn.ssdf.test;
public class Test01{
public static void main(String [] args) {
????? ????? System.out.println(“hello,world”);
}
}
3.JQuery選取頁面元素id為deptid的寫法
$(“#deptid”);
4.編程實現:將字符串“hello world,hello java”輸出為“hello world,world hello”.
String str = “hello world,hello java”;
str.replace(“hello java”,” world hello”);
5.簡述strut2、hibernate、spring三個框框架各自的功能
hibernate是一個持久層框架,對JDBC進行了封裝,負責對數據庫的CRUD操作;
strut2是三層開發中的表現層的框架,MVC模式中的model層;很好的實現頁面的跳轉和用戶輸入信息的驗證,處理用戶請求信息并返回顯示頁面給用戶;
spring是一個輕量級框架,兩大特性:IOC和AOP;通過IOC-控制反轉將對象的創建交給spring容器,解決各層業務層和dao層之間的過度依賴;AOP面向切面,對事物進行很好的管理,支持多個框架例如:hibernate、struts2、mybatis等。
6.簡述Spring框架中如何控制事務
Spring支持兩種類型的事務管理:這意味著你的業務代碼分開事務管理。你只用注釋或基于XML 配置來管理事務。
編程式事務管理:
編程式事務管理辦法允許您管理與編程的源代碼的幫助下事務。這就給了極大的靈活性,但它難以維護。
聲明式事務管理:
聲明式事務管理的方法可幫助您管理配置,而不是在源代碼中硬編碼的事務。這意味著,可以單獨從業務代碼事務管理。只用注釋或基于XML配置來管理事務。bean的配置將指定的方法是事務性。以下是聲明性與事務相關的步驟:
我們使用<tx:advice/>標簽,這將創建我們定義了一個切入點匹配所有我們想做成事務,并引用其中的事務通知方法的事務并同時處理建議。
7.寫出sql語法中左外連接的關鍵字,并且敘述左外連接的含義
關鍵字:left join ……on……
含義:查詢結果左表為準,左表內容全部顯示,右表對應的內容不管有沒有內容都顯示出來。
8.oracle數據庫表A中有類型為varchart2的deptcode的字段,通過sql實現deptcode字段中第二位到第四位等于03的所有記錄。
select * from A where substr(“deptcode”,2,4) = “03”;
9.如何看軟件產品的易用性、可擴展性
可維護性是說,對于前期開發的代碼,后期在進行機能改善和擴充時,修改方便。不會出現推倒重新編寫。
易用性是說,代碼簡潔明了,不冗余。
10.說說你個人的優點與缺點
?
第二部分
1.short S1=1;S1=S1+1;有什么錯?short S1=1;S1+= 1;有什么錯?
前面一句中,s1 = s1 + 1需要進行強轉,寫成s1 = (short)(s1 + 1),后面一句沒錯。
2.用最有效率的方法算出2乘以8等于幾?
2<<3
3.請說出作用域public,private,protected,以及不寫時的區別
public 所有地方都可以使用
protected 同一類、同包和子類中可以使用
private 僅限本包內使用
不寫時? 在同一類和本包中可以使用
4.構造器Constructor是否可被override
不可以被重寫,但是可以重載。
5.是否可以繼承String類
不可以,因為String類有final修飾符,而final修飾的類是不能被繼承的
6.描述一下JVM加載class文件的原理機制
類裝載器就是尋找類或接口字節碼文件進行解析并構造JVM內部對象表示的組件,在java中類裝載器把一個類裝入JVM,經過以下步驟:
(1)裝載:查找和導入Class文件
(2)鏈接:其中解析步驟是可以選擇的
(a)檢查:檢查載入的class文件數據的正確性
(b)準備:給類的靜態變量分配存儲空間
(c)解析:將符號引用轉成直接引用
(3)初始化:對靜態變量,靜態代碼塊執行初始化工作
類裝載工作由ClassLoder和其子類負責。JVM在運行時會產生三個ClassLoader:根裝載器,ExtClassLoader(擴展類裝載器)和AppClassLoader,其中根裝載器不是ClassLoader的子類,由C++編寫,因此在java中看不到他,負責裝載JRE的核心類庫,如JRE目錄下的rt.jar,charsets.jar等。ExtClassLoader是ClassLoder的子類,負責裝載JRE擴展目錄ext下的jar類包;AppClassLoader負責裝載classpath路徑下的類包,這三個類裝載器存在父子層級關系,即根裝載器是ExtClassLoader的父裝載器,ExtClassLoader是AppClassLoader的父裝載器。默認情況下使用AppClassLoader裝載應用程序的類
Java裝載類使用“全盤負責委托機制”。“全盤負責”是指當一個ClassLoder裝載一個類時,除非顯示的使用另外一個ClassLoder,該類所依賴及引用的類也由這個ClassLoder載入;“委托機制”是指先委托父類裝載器尋找目標類,只有在找不到的情況下才從自己的類路徑中查找并裝載目標類。這一點是從安全方面考慮的,試想如果一個人寫了一個惡意的基礎類(如java.lang.String)并加載到JVM將會引起嚴重的后果,但有了全盤負責制,java.lang.String永遠是由根裝載器來裝載,避免以上情況發生
7.java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是那些?
Java中的流分為兩種,一種是字節流,另一種是字符流,分別由四個抽象類來表示(每種流包括輸入和輸出兩種所以一共四個):InputStream,OutputStream,Reader,Writer。
8.STRUTS的應用(如STRUTS架構)
Struts 是采用Java Servlet/JavaServer Pages技術,開發Web應用程序的開放源碼的framework。采用Struts能開發出基于MVC(Model-View-Controller)設計模式的應用構架。 Struts有如下的主要功能:一.包含一個controller servlet,能將用戶的請求發送到相應的Action對象。二.JSP自由tag庫,并且在controller servlet中提供關聯支持,幫助開發員創建交互式表單應用。三.提供了一系列實用對象:XML處理、通過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和消息。
9.hibernate的inverse屬性的作用
hibernate的屬性inverse:它是用來指定關聯的控制方的,inverse屬性默認是false,若為false,則關聯由自己控制,若為true,則關聯由對方控制。
10.介紹一下hibernate的二級緩存
二級緩存是獨立于Hibernate的軟件部件,屬于第三方的產品,多個廠商和組織都提供有緩存產品,例如,EHCache和OSCache等等。在Hibernate中使用二級緩存,首先就要在hibernate.cfg.xml配置文件中配置使用哪個廠家的緩存產品,接著需要配置該緩存產品自己的配置文件,最后要配置Hibernate中的哪些實體對象要納入到二級緩存的管理中。一個SessionFactory可以關聯一個二級緩存,也即一個二級緩存只能負責緩存一個數據庫中的數據,當使用Hibernate 的二級緩存后,注意不要有其他的應用或SessionFactory來更改當前數據庫中的數據,這樣緩存的數據就會與數據庫中的實際數據不一致。
11.用table顯示n條記錄,每三行換一次顏色,即1、2、3用紅色字體,4、5、6用綠色字體,7、8、9用紅色字體
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>?
?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">?
<html>?
? <head>?
????? <script type="text/javascript">?
??????? window.οnlοad=function() {?
?????????????? var tbl = document.getElementById("tbl");?
?????????????? var rows = tbl.getElementsByTagName("tr");?
?????????????? for(i=0;i<rows.length;i++) {?
????????????????????? var j = parseInt(i/3); // 此語句的效果是,以3個為單位,000 111 222 333 444 ...?
????????????????????? if(j%2==0) rows[i].style.backgroundColor="#f00";?
????????????????????? else? rows[i].style.backgroundColor="#0f0";?
?????????????? }?
?????? ?};?
????? </script>?
? </head>?
? <body>?
??? <table id="tbl" border="1">?
?????? <tr><td>1</td></tr>?
?????? <tr><td>2</td></tr>?
?????? <tr><td>3</td></tr>?
?????? <tr><td>4</td></tr>?
?????? <tr><td>5</td></tr>?
?????? <tr><td>6</td></tr>?
?????? <tr><td>7</td></tr>?
?????? <tr><td>8</td></tr>?
?????? <tr><td>9</td></tr>?
?????? <tr><td>10</td></tr>?
?????? <tr><td>11</td></tr>?
?????? <tr><td>12</td></tr>?
?????? <tr><td>13</td></tr>
??? </table>?
? </body>?
</html>?
12.第一個人10,第二個比第一個大2歲,一次遞推,請用遞歸方式計算出第八個人多大?
package com.test;?
public class ComputeAge {?
? ??/**
???? * 遞歸函數的執行過程具有三個特點:?
???? * 1、函數名相同 2、不斷地自調用 3、最后被調用的函數要最先被返回
???? * @param n
???? * @return
???? */?
??? public static int getComputeAge(int n) {?
??????? int age = 0;?
??????? if (n == 1) {?
??????????? age = 10;?
??????? } else {?
??????????? age = getComputeAge(n - 1) + 2;?
??????? }?
??????? return age;?
??? }?
??? public static void main(String[] args) {?
??????? System.out.println(getComputeAge(8));?
??? }?
}?
13。請寫出用于校驗HTML文本框中輸入的內容全部為數字的javascript代碼
<input type="text" id="d1" οnblur=" chkNumber(this)"/>
<script type=”text/javascript” />??
function chkNumber(eleText) {
????????????? var value =eleText.value;
????????????? var len =value.length;
????????????? for(vari=0;i<len;i++) {
???????????????????? if(value.charAt(i)>"9"||value.charAt(i)<"0") {
??????????????????????????? alert("含有非數字字符");
??????????????????????????? eleText.focus();
??????????????????????????? break;
???????????????????? }
????????????? }
?????? }
</script>
14.查出比經理薪水還高的員工信息
wzg大于flx,lhm大于zxx
select e.*
from employees e,employees m
where e.managerid=m.id?
and e.salary>m.salary;
15.一個用戶表中有一個積分字段,假如數據庫中有100多萬個用戶,若要在每年第一天凌晨將積分清零,你將考慮什么,你將想什么辦法解決?
alter table drop column score;
alter table add colunm score int;
可能會很快,但是需要試驗,試驗不能拿真實的環境來操作,并且要注意,這樣的操作時無法回滾的,只有inert update delete等DML語句才能回滾,對于create table,drop table ,alter table等DDL語句是不能回滾。
? 解決方案一,update user set score=0;
? 解決方案二,假設上面的代碼要執行好長時間,超出我們的容忍范圍,那我就alter table user drop column score;alter table user add column score int。
?? 下面代碼實現每年的那個凌晨時刻進行清零。
Runnable runnable = new Runnable(){
?? public void run(){
?????? clearDb();
?????? schedule(this,new Date(new Date().getYear()+1,0,0));
??? }
?};
???? schedule(runnable,
???? new Date(new Date().getYear()+1,0,1));
轉載于:https://www.cnblogs.com/kuoAT/p/6681842.html
總結
- 上一篇: BZOJ 2820 莫比乌斯反演
- 下一篇: 重温JavaScript