黑马程序员技术交流社区

标题: 【上海校区】java面试题之编程题(1) [打印本页]

作者: chenquanyi626    时间: 2018-11-5 16:59
标题: 【上海校区】java面试题之编程题(1)
本帖最后由 chenquanyi626 于 2018-11-5 17:04 编辑

java面试题之编程题

1、写一个Singleton出来
   Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
   一般Singleton模式通常有几种种形式:

   第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
[Java] 纯文本查看 复制代码
public class Singleton {
private Singleton(){}
      //在自己内部定义自己一个实例,是不是很奇怪?
      //注意这是private 只供内部调用
      private static Singleton instance = new Singleton();
      //这里提供了一个供外部访问本class的静态方法,可以直接访问  
      public static Singleton getInstance() {
        return instance;   
      }
    }
第二种方式:
[Java] 纯文本查看 复制代码
public class Singleton { 
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
  //使用时生成实例,提高了效率!
  if (instance==null)
    instance=new Singleton();
return instance;   }
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些 。
2、JAVA实现一种排序JAVA类实现序列化的方法(二种) 如在COLLECTION框架中,实现比较要实现什么样的接口?
[size=13.3333px]  用插入法进行排序代码如下:
[Java] 纯文本查看 复制代码
package cn.itcast.test;
import java.util.*;
class  InsertSort
{
ArrayList al;
public InsertSort(int num,int mod)
{
  al = new ArrayList(num);
  Random rand = new Random();
  System.out.println("The ArrayList Sort Before:");
  for (int i=0;i<num ;i++ )
  {
   al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));
   System.out.println("al["+i+"]="+al.get(i));
  }
}
public void SortIt()
{
  Integer tempInt;
  int MaxSize=1;
  for(int i=1;i<al.size();i++)
  {
       tempInt = (Integer)al.remove(i);
    if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())
    {
     al.add(MaxSize,tempInt);
     MaxSize++;
     System.out.println(al.toString());
    } else {
     for (int j=0;j<MaxSize ;j++ )
     {
      if
(((Integer)al.get(j)).intValue()>=tempInt.intValue())
      {
       al.add(j,tempInt);
       MaxSize++;
       System.out.println(al.toString());
       break;
      }
     }
    }
  }
  System.out.println("The ArrayList Sort After:");
  for(int i=0;i<al.size();i++)
  {
   System.out.println("al["+i+"]="+al.get(i));
  }
}
public static void main(String[] args)
{
  InsertSort is = new InsertSort(10,100);
  is.SortIt();
}
}
3、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如ABC”4,应该截为AB”,输入ABCDEF”6,应该输出为ABC”而不是ABC+汉的半个
  
[Java] 纯文本查看 复制代码
package cn.itcast.test; 
class  SplitString
{
String SplitStr;
int SplitByte;
public SplitString(String str,int bytes)
{
  SplitStr=str;
  SplitByte=bytes;
  System.out.println("The String is:'"+SplitStr+"';SplitBytes="+SplitByte);
}
public void SplitIt()
{
  int loopCount;
   
loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split
Byte+1);
  System.out.println("Will Split into "+loopCount);
  for (int i=1;i<=loopCount ;i++ )
  {
   if (i==loopCount){
     
System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
   } else {
     
System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));
   }
  }
}
public static void main(String[] args)
{
  SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人
0ewldfls=103",4);
  ss.SplitIt();
}
}
4、可能会让你写一段JdbcOracle的程序,并实现数据查询.
[Java] 纯文本查看 复制代码
package cn.itcast.jdbcdemo;
import java.sql.*;
public class  jdbc
{
String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String theUser="admin";
String thePw="manager";
Connection c=null;
Statement conn;
ResultSet rs=null;
public jdbc()
{
  try{
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
          c = DriverManager.getConnection(dbUrl,theUser,thePw);
    conn=c.createStatement();
  }catch(Exception e){
   e.printStackTrace();
  }
}
public boolean executeUpdate(String sql)
{
   try
   {
     conn.executeUpdate(sql);
     return true;
   }
   catch (SQLException e)
   {
     e.printStackTrace();
     return false;
   }
}
public ResultSet executeQuery(String sql)
{
   rs=null;
   try
   {
     rs=conn.executeQuery(sql);
   }
   catch (SQLException e)
   {
     e.printStackTrace();
   }
   return rs;
}
public void close()
{
   try
   {
     conn.close();
     c.close();
   }
   catch (Exception e)
   {
     e.printStackTrace();
   }
}
public static void main(String[] args)
{
  ResultSet rs;
  jdbc conn = new jdbc();
  rs=conn.executeQuery("select * from test");
  try{
  while (rs.next())
  {
   System.out.println(rs.getString("id"));
   System.out.println(rs.getString("name"));
  }
  }catch(Exception e)
  {
   e.printStackTrace();
  }
}
}

5Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示?
[Java] 纯文本查看 复制代码
//Server端程序:
package cn.itcast.socket.test;
import java.net.*;
import java.io.*;
public class Server
{
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public Server()
{
  try
  {
   ss=new ServerSocket(10000);
   while(true)
   {
    socket = ss.accept();
    String RemoteIP = socket.getInetAddress().getHostAddress();
    String RemotePort = ":"+socket.getLocalPort();
    System.out.println("A client come in!IP:"+RemoteIP+RemotePort);
    in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
    String line = in.readLine();
    System.out.println("Cleint send is :" + line);
    out = new PrintWriter(socket.getOutputStream(),true);
    out.println("Your Message Received!");
    out.close();
    in.close();
    socket.close();
   }
  }catch (IOException e)
  {
   out.println("wrong");
  }
}
public static void main(String[] args)
{
  new Server();
}
};
[Java] 纯文本查看 复制代码
//Client端程序:
package cn.itcast.socket.test;
import java.io.*;
import java.net.*;
public class Client
{
Socket socket;
BufferedReader in;
PrintWriter out;
public Client()
{
  try
  {
   System.out.println("Try to Connect to 127.0.0.1:10000");
   socket = new Socket("127.0.0.1",10000);
   System.out.println("The Server Connected!");
   System.out.println("Please enter some Character:");
   BufferedReader line = new BufferedReader(new
InputStreamReader(System.in));
   out = new PrintWriter(socket.getOutputStream(),true);
   out.println(line.readLine());
   in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
   System.out.println(in.readLine());
   out.close();
   in.close();
   socket.close();
  }catch(IOException e)
  {
   out.println("Wrong");
  }
}
public static void main(String[] args)
{
  new Client();
}
};

6、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出个某种编码的字符串?
[Java] 纯文本查看 复制代码
Public String translate (String str) {
    String tempStr = "";
    try {
      tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
      tempStr = tempStr.trim();
    }
    catch (Exception e) {
      System.err.println(e.getMessage());
    }
    return tempStr;
  }

6编写一个Java程序,用if-else语句判断某年份是否为闰年。
[Java] 纯文本查看 复制代码
public class LeapYear{
public static void main(String args[]){
int year=2010;
if(args.length!=0)
  year=Integer.parseInt(args[0]);
if((year%4==0 && year%100!=0)||(year%400==0))
System.out.println(year+" 年是闰年。");
else
System.out.println(year+" 年不是闰年。");
   }
}

7编写一个Java程序在屏幕上输出1+2+3+……+10!的和。
[Java] 纯文本查看 复制代码
public class ForTest { 
public static void main( String args[] ) {
  int  i,j,mul,sum=0;
for(i=1;i<=10;i++) {
mul=1;
for(j=1,j<=i;j++) {
mul=mul*j;
}
      sum=sum+mul;
}
System.out.println(“1!+2!+3!+……+10!= ”+sum);
}
}

8编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个函数分别实现这两个字符串的拼接、整数相加和浮点数相加。要进行异常处理,对输入的不符合要求的字符串提示给用户,不能使程序崩溃。
[Java] 纯文本查看 复制代码
import java.io.*;
public class Strinput
{
  public static void main(String args[]) {
       String s1,s2,ss,si,sf;
       int i1,i2;
       float f1,f2;
       BufferedReader strin=new  BufferedReader(new InputStreamReader(System.in));
       try{System.out.print ("输入第一个字符串:" );
           s1= strin.readLine();
           System.out.print ("输入第二个字符串:" );
           s2= strin.readLine();}
       catch(Exception e){ System.out.println(e.getMessage());}
       i1 = Integer.parseInt(s1);
       i2 = Integer.parseInt(s2);
       f1 = Float.parseFloat(s1);
       f2 = Float.parseFloat(s2);
       ss = strAdd(s1,s2);
       si = strAdd(i1,i2);
       sf = strAdd(f1,f2);
       System.out.println ("输入的二个字符串相加结果为:"+ss );
       System.out.println ("输入字符串转换为整数相加结果为:"+si );
       System.out.println ("输入字符串转换为浮点数相加结果为:"+sf );
    }
   String strAdd(String str1,String str2) {
return str1+str2;
}
String strAdd(int int1,int int2) {
return  String.valueOf(int1+int2);
}
String strAdd(float flt1,float flt2) {
return  String.valueOf (flt1+flt2);
}
}

9编写一个Java程序实现多线程,在线程中输出线程的名字,隔300毫秒输出一次,共输出20次。
[Java] 纯文本查看 复制代码
// 声明一个子线程类Threaddemo;
class ThreadDemo extends Thread {
  public ThreadDemo(String str) {
super(str);
}
  public void run() {
    for(int i=0;i<20;i++){
System.out.print(“  ”+this.getName());
Try {
Sleep(300);
}catch(InterruptedException e){
System.out.println(e.getMessage());
Return;
}
}
System.out.println(“  /end”);
}
}
public class TestThread {
public static void main( String args[] ) {
   ThreadDemo thread1=new ThreadDemo(“T1”);
   ThreadDemo thread2=new ThreadDemo(“T2”);
   ThreadDemo thread3=new ThreadDemo(“T3”);
   thread1.start();
   thread2.start();
   thread3.start();
}
}
10古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
[Java] 纯文本查看 复制代码
public class Feb {
public static void main(String[] args) {
System.out.println("第1个月的兔子对数:    1");
System.out.println("第2个月的兔子对数:    1");
int f1 = 1, f2 = 1, f, M=24;
     for(int i=3; i<=M; i++) {
      f = f2;
      f2 = f1 + f2;
      f1 = f;
      System.out.println("第" + i +"个月的兔子对数: "+f2);
         }
}
}












作者: 不二晨    时间: 2018-11-7 09:01
ヾ(◍°∇°◍)ノ゙
作者: 梦缠绕的时候    时间: 2018-11-8 16:46

作者: 魔都黑马少年梦    时间: 2018-11-8 16:59





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2