java面试题2

oracle分页语句

 select  t1.* from 
 (select t.*,rownum n from t_user t where rownum<=5)t1
 where n>=3
 
 select t2.* from 
 (select t1.* ,rownum  n from t_user t1) t2  where n between 3 and 5;


MySql分页语句

SELECT * FROM t_user LIMIT 0,5;


懒汉饿汉设计模式

//饿汉模式 线程安全 效率比较低
//-----------------------------
public class Singleton{


//定义一个私有的构造方法
private Singleton(){}


//设置属性,实例化自身,添加static final
private static final Singleton single=new Singleton();


//用静态方法返回该类的实例对象
public static Singleton getInstance(){


return single;
}




}


//懒汉模式 非线程安全
//-----------------------
public class Singleton{


private Singleton(){}


private static Singleton single=null;


public static Singleton getInstance(){


if(single==null){
single = new Singleton();
}
return single;
}


}
//懒汉模式 线程安全简单实现  避免多线程
//------------------------------------------
public class Singleton{
private Singleton(){}


private static Singleton single=null;


public static synchronized Singleton getInstance(){
if(single==null){
single=new Singleton();
}
return single;
}
}
//懒汉模式 效率高,线程安全 最佳方案
//---------------------------------------
 public class Singleton{


  private Singleton(){}


  private static volatile Singleton single=null;


  public static Singleton getInstance(){


  if(single==null){


  synchronized(Singleton.class){
  if(single==null){
  single=new Singleton();
  }
  }
  }


  return single;
  }


 }

线程基础代码

public class MyThread extends Thread{


@Override
public void run() {

for(int i=0;i<3;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {

e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+i);
}
}


public static void main(String[] args) {
MyThread m1=new MyThread();
m1.start();

MyThread m2=new MyThread();
m2.start();
}

}



public class MyThread1 implements Runnable{


@Override
public void run() {

for(int i=0;i<3;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {

e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+i);
}



}
public static void main(String[] args) {
MyThread1 m2 = new MyThread1();  
Thread thread1 = new Thread(m2);  
Thread thread2 = new Thread(m2);
thread1.start();  thread2.start(); 
}


}

写出常见的异常(一般面试写出5个就行)

ArithmeticException  ClassCastException NoSuchElementException NullPointerException SecurityException


map遍历

public class MapTest {

public static void main(String[] args){
Map map=new HashMap();
map.put("key1", "value1");
map.put("key2", "value2");

for(Iterator it=map.keySet().iterator();it.hasNext();){
Object o=it.next();
System.out.println(o+""+map.get(o));
}

for(Iterator i=map.entrySet().iterator();i.hasNext();){
Entry e=(Entry) i.next();
System.out.println("键"+e.getKey () + "的值为" + e.getValue());
}
}



}

分页思想

数据的结果集合 每页显示3条数据 当前页面是第2页

list<UserBean> list

每页显示的记录数 int pageSize=3  当前页面 int currentPage=2

求第二页的数据时从第几条开始到第几条结束?

   开始下标:startIndex = (currentPage-1)*pageSize

结束下标:endIndex=currentPage*pageSize

总记录数:totalCount=list.size()

list集合中的下标是从0开始 list.subList(startIndex,endIndex) 包括startIndex 而不包含endIndex

显示所有数据需要多少页?

int pageCount= (totalCount-1)/pageSize+1


servlet 3.0配置   2.5配置

 完成了一个使用注解描述的Servlet程序开发。
   使用@WebServlet将一个继承于javax.servlet.http.HttpServlet的类定义为Servlet组件。
   @WebServlet有很多的属性:
       1、asyncSupported:    声明Servlet是否支持异步操作模式。
       2、description:      Servlet的描述。
       3、displayName:       Servlet的显示名称。
       4、initParams:        Servlet的init参数。
       5、name:           Servlet的名称。
      6、urlPatterns:     Servlet的访问URL。
       7、value:           Servlet的访问URL。
   Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义。
   像上面的Servlet3Demo可以描述成@WebServlet(name="Servlet3Demo",value="/Servlet3Demo")。
   也定义多个URL访问:
   如@WebServlet(name="Servlet3Demo",urlPatterns={"/Servlet3Demo","/Servlet3Demo2"})
   或者@WebServlet(name="AnnotationServlet",value={"/Servlet3Demo","/Servlet3Demo2"})


  <servlet>
    <description></description>
    <display-name>Test</display-name>
    <servlet-name>Test</servlet-name>
    <servlet-class>pers.kp.test.Test</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/Test</url-pattern>
  </servlet-mapping>
</web-app>


冒泡排序

public class Test01 {
public static void main(String[] args) {

int arr[]=new int[]{1,2,5,3,4};
fun1(arr);
System.out.println(Arrays.toString(arr));
fun2(arr);
System.out.println(Arrays.toString(arr));
}
//[1, 2, 3, 4, 5]
public static void fun1(int[] arr){
int temp;
for(int i=0;i<arr.length;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[i]){
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
}
//[5, 4, 3, 2, 1]
public static void fun2(int[] arr){
int temp;
for(int i=0;i<arr.length;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[j]>arr[i]){
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
}
}

Servlet  json ajax

      //Test08Servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List list=new ArrayList();
for(int i=0;i<3;i++){

list.add(i);

}
JSONArray json=new JSONArray(list);
PrintWriter out=response.getWriter();
out.write(json.toString());
out.flush();
out.close();



}

<script type="text/javascript">
function fun(){

//1.获取XMLHttpRequest对象
var xmlhttp = new XMLHttpRequest();
//2.向服务器发出请求
//第一个参数表示请求提交的方法
//第二个参数表示的是请求的地址
//第三个参数表示的是是否是异步处理  true表示异步   false 同步
xmlhttp.open("GET","Test08",true);
xmlhttp.send();
//3.监听请求服务的状态
xmlhttp.onreadystatechange = function(){
//4.判断请求的状态是否成功,响应的数据是否就绪
if(xmlhttp.readyState==4&&xmlhttp.status==200){
//5.获取服务器端发送过来的数据

var data = xmlhttp.responseText;
var d=eval("("+data+")");

for(var i=0;i<d.length;i++){
alert(d[i]);
}

}
};

}

</script>

文件上传

struts2中

导入架包:commons-fileupload-1.3.1.jar           commons-io-2.4.jar

jSP页面:引入 <%@taglib uri="/struts-tags" prefix="s" %> 标签库

表单配置:

<s:form action="file_save" namespace="/file" method="post" enctype="multipart/form-data">
    <s:textfield name="uploadname" label="用户名"></s:textfield>
    <s:file name="img" label="图片"></s:file>
    <s:submit value="上传"></s:submit>
    </s:form>


Struts2配置中:

<package name="file" extends="struts-default" namespace="/file" strict-method-invocation="false">
   
    <action name="file_*" class="pers.kp.action.UploadAction" method="{1}">
    <result name="success">/index.jsp</result>
    <result name="input">/front/upload.jsp</result>
   
    <interceptor-ref name="fileUpload">
    <param name="maximumSize">104857</param>
    <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg,</param>
    </interceptor-ref>
   
    <interceptor-ref name="defaultStack"></interceptor-ref>
    </action>

         </package>


aciton 中:

public class UploadAction extends ActionSupport {
private String uploadname;
private File img;
private String imgFileName;
private String imgContentType;
public String save() throws IOException{
System.out.println(uploadname+"----"+imgFileName+"----"+imgContentType);
File file=new File("/upload/"+imgFileName);
FileUtils.copyFile(img, file);
return this.SUCCESS;
}

   省略setget


servlet中

<!-- 
注意事项:
method:提交方式必须是post提交
enctype:默认属性表示是提交的数据都要进行编码
multipart/form-data:表示提交数据不进行编码(字节码 二进制流数据)
-->
<form method="post" enctype="multipart/form-data" action="TestServlet">
用户名:<input type="text" name="username" /><br />
文件:<input type="file" name="fileName" /><br />
<input type="submit" value="提交" />
</form>


/*
* 表单提交的数据指定的是multipart/form-data(二进制字节码)个数的数据,
* 使用之前常用的获取数据的方式已经不能够获取数据了
*/
/*String username = request.getParameter("username");
System.out.println(username);*/

//设置文件乱码 保存文件 文件名乱码处理
request.setCharacterEncoding("utf-8");
//1.创建对象DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
//2.获取ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
try {
//3.将request中的数据获取,保存到FileItem对象中,返回FileIteam集合
//在表单中一个输入项表示一个FileItem对象
List<FileItem> list = upload.parseRequest(request);
//4.循环遍历集合取出数据
for (FileItem fileItem : list) {
//判断表单中的输入项是否是普通输入项
if(fileItem.isFormField()){
//表示普通输入项
//获取表单中的name属性值
String name = fileItem.getFieldName();
//获取表单提交过来的数据 并设置名字格式 控制台中乱码处理
String value = fileItem.getString("utf-8");
System.out.println(name+", "+value);
}else{
//文件上传
//获取上传文件的文件名称
String fileName = fileItem.getName();
//创建一个文件(与上传的文件名相同文件)
File file = new File("D:\\upload\\"+fileName);
//将FileItem中的数据写入到文件中
fileItem.write(file);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

页面中:

 EXCEL文件上传<br>


    <s:form action="car_uploadExcel" enctype="multipart/form-data" method="post" namespace="/car">
    <s:file name="excel" label="文件"></s:file>
    <s:submit value="提交"></s:submit>
    </s:form>

struts.xml配置文件中

<package name="car" extends="struts-default" namespace="/car" strict-method-invocation="false">


<action name="car_*" class="pers.kp.action.OwnedVehicleAction" method="{1}">

<result name="query" type="redirectAction">car_query</result>


</action>

</package>


Action中

  public String uploadExcel() throws Exception{
System.out.println("文件已上传:"+excel);
carService.readExcel(excel);
return "query";
}

  service层中

/**
* 读取Excel文件,并将读取的内容保存到数据库中
*/
public void readExcel(File file) throws Exception{
InputStream in = new FileInputStream(file);
// 1.获取HSSFWorkbook对象
HSSFWorkbook wb = new HSSFWorkbook(in);
// 2.获取读取内容所在的sheet页
HSSFSheet sheet = wb.getSheetAt(0);
System.out.println(sheet.getSheetName());
// 3.获取第一行第一列的内容
// 获取第一行
int lastRow = sheet.getLastRowNum();
List<OwnedVehicle> list = new ArrayList<OwnedVehicle>();
for (int i = 2; i <= lastRow; i++) {
HSSFRow row = sheet.getRow(i);
// 获取对应的单元格

HSSFCell c0 = row.getCell(0);

HSSFCell c1 = row.getCell(1);

HSSFCell c2 = row.getCell(2);

HSSFCell c3 = row.getCell(3);

HSSFCell c4 = row.getCell(4);


OwnedVehicle ow = new OwnedVehicle();
ow.setVehicleId(getValue(c1));
ow.setMemo(getValue(c2));
ow.setModel(getValue(c3));
ow.setLicenseCode(getValue(c4));
list.add(ow);

//性能优化 保存一定数量
if(i % 10 == 0){
// 将数据提交到dao中
dao.readSaveExcel(list);
// 清空集合中的数据
list.clear();
}

}

dao.readSaveExcel(list);

}


//事务处理 保存方法

public void readSaveExcel(List<OwnedVehicle> list) {

Session session = factory.openSession();
Transaction tx = session.beginTransaction();
try {
for (OwnedVehicle ow : list) {
session.save(ow);
}
tx.commit();
} catch (Exception e) {

e.printStackTrace();
tx.rollback();
} finally{
session.close();
}


}

spring mvc中

<form action="work/save" role="form" method="post" enctype="multipart/form-data">

<td>上传附件</td>
<td colspan="3"><input type="file" name="upload"/></td>
<td colspan="3"><input type="file" name="upload"/></td>

@RequestMapping("/save")
   public String save(MultipartFile[] upload){
   
   
    if(upload!=null){
    for(MultipartFile file:upload){
    if(!file.isEmpty()){
    Workattach attach=new Workattach();
   
    String oldname=file.getOriginalFilename();
    // 获取旧名字中的后缀
    int n=oldname.lastIndexOf(".");
    String ext=oldname.substring(n);
    //获取新名字
    String newname=PrimaryKey.getFileNewName()+ext;
    //获取空的文件
    File basefile=new File("D:\\upload\\" + newname);
   
try {
file.transferTo(basefile);
} catch (IllegalStateException | IOException e) {

e.printStackTrace();
}

    }
    }
   
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值