乐趣区

关于java:某鱼大厂建议的面试资料整理

1、java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请
说出他们别离是哪些类?
字节流,字符流。字节流继承于 InputStream OutputStream,字符流继承于 Reader Writer。在 java.io 包中还有许多其余的流,低层流与调层流,高层流次要是为了进步性能和使用方便。
2、启动一个线程是用 run()还是 start()?
启动一个线程是调用 start()办法,启动线程并调用 run 办法。
3、线程的基本概念、线程的根本状态以及状态之间的关系
线程是过程内的并发,没有自已内存空间,共享过程的,线程间的通信老本较低。Java 中的线程有四种状态别离是:运行、就绪、挂起、完结。
4、多线程有几种实现办法,都是什么?同步有几种实现办法,都是什么?用什么关键字润饰同步办法?stop()和 suspend()办法为何不举荐应用?
Extends Thread Implements Runnable 同步
Public synchronized aa()
{
Public void cc(object aa)
}
synchronized(aa)
用 synchoronized 润饰同步办法。
答:多线程有两种实现办法,别离是继承 Thread 类与实现 Runnable 接口同步的实现方面有两种,别离是 synchronized,wait 与 notify
拥护应用 stop(),是因为它不平安。它会解除由线程获取的所有锁定,而且如果对象
处于一种不连贯状态,那么其余线程能在那种状态下检查和批改它们。后果很难查看出真正的问题所在。suspend()办法容易产生死锁。调用 suspend()的时候,指标线程会停下来,但却依然持有在这之前取得的锁定。此时,其余任何线程都不能拜访锁定的资源,除非被 ” 挂起 ” 的线程复原运行。对任何线程来说,如果它们想复原指标线程,同时又试图应用任何一个锁定的资源,就会造成死锁。所以不应该应用 suspend(),而应在本人的 Thread 类中置入一个标记,指出线程应该流动还是挂起。若标记指出线程应该挂起,便用 wait()命其进入期待状态。若标记指出线程该当复原,则用一个 notify() 重新启动线程。
5、汇合框架有什么?Collection Map
List set HashMap
ArrayList linkedList HashSet TreeSet
6、设计 4 个线程,其中两个线程每次对 j 减少 1,另外两个线程对 j 每次缩小 1。写出程序
public class TestThread
{
private int j;
public synchronized void inc()
{
j++;
System.out.println(Thread.currentThread().getName() + “-inc:” + j);
}
public synchronized void dec()
{
j–;
System.out.println(Thread.currentThread().getName() + “-dec:” + j);
}
public static void main(String[] args)
{
TestThread t=new TestThread(); for (int i = 0; i < 2; i++)
{
Thread inc=new Thread(new Inc(t)); Thread dec=new Thread(new Dec(t)); inc.start();
dec.start();
}
}
}
class Inc implements Runnable
{
private TestThread obj;
public Inc(TestThread obj)
{
this.obj=obj;
}
public void run()
{
// for (int i = 0; i < 100; i++)
// {
this.obj.inc();
// }
}
}
class Dec implements Runnable
{
private TestThread obj; public Dec(TestThread obj)
{
this.obj=obj;
}
public void run()
{
// for (int i = 0; i < 100; i++)
// {
this.obj.dec();
// }
}
}
}
7、同步和异步有和异同,在什么状况下别离应用他们?举例说明。
同步:上一段代码没的实现,下一段必须等到上一段代码实现后才能够执行。如买票排队
异步:上一段代码没的实现,下一段不用等到上一段代码实现就能够执行。如手机发送
8、sleep() 和 wait() 有什么区别?
Sleep 是指休眠给定的工夫,当这个工夫达到之后,线程会再次醒来。Wait 是期待状态,多长时间不分明,由另一个线程将其唤醒。
9、当一个线程进入一个对象的一个 synchronized 办法后,其它线程是否可进入此对象的其它办法?
如只其它办法是同步办法,不能够进入。如果不是能够进入。
10、输入输出流的了解
在 java 应用流的机制进行数据的传送,从文件到内存是输出流,从内存到文件是输入流,输出流能够通过 read 读取,输入流以 write 或 print 写入,对于流能够是分为高层流和低层流,低层以一个字节或字符为单位进行解决,高层流以一批数据为单位进行解决。
FileInputStream(System.in)至 InputSteamReader 至 BufferReader OutputSteam(System.out)至 printStream
FileReader 至 BufferedReader
FileWriter 至 PrintWriter 或 bufferWriter 分类:
字节(二进制)
FileInputStream(低层输出流) FileOutputStream(低层输入流)
PrintStream(高层流) System.out.println() 字符(一个 char)
FileReader
FileWriter
11、请写一个程序的读写,要求用两种形式一种是低层流另一种是高层流。
import java.io.FileWriter; import java.io.InputStream; import java.io.BufferedWriter;
import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.FileReader;
public class Untitled1 {
public static void writeFileChar() throws Exception { FileWriter f = new FileWriter(“c:\aa.txt”); InputStream is = System.in;
int c = is.read();
while (((char) c) != ‘x’) {f.write(c);
c = is.read();
}
f.close();
is.close();
}
public static void writeFileString() throws Exception { FileWriter f = new FileWriter(“c:\aa.txt”); BufferedWriter bwr=new BufferedWriter(f);
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String c = bf.readLine(); while (!c.equals(“stop”)) {
bwr.write(c+”\r\n”);
12、如何列出某个目录下的所有文件
Import java.io.File; File f=new File(“C:\”);
File[] f1=f.listFiles();
for(int i=0;i<f1.length;i++)
{
if(f1[i].isDirectory())
{
System.out.println(“dirctory is”+f1[i].getName());
}
else
{
System.out.println(“file is”+f1[i].getName());
}
}
}
13、用 socket 通信写出客户端和服务器端的通信,要求客户发送数据后可能回显雷同的数据?
public class ServerSocket_1
{
public static void main(String[] args) throws Exception
{
ServerSocket ss = new ServerSocket(4001); Socket s = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(s. getInputStream()));
PrintStream ps=new PrintStream(s.getOutputStream()); String temp = br.readLine();
while (true)
{
System.out.println(“ 客户端:”+temp); ps.println(temp);
if (temp.equals(“stop”))
{
break;
public class ClientSocket
{
public static void main(String[] args) throws Exception
{
Socket s = new Socket(“localhost”, 4001);
PrintStream ps = new PrintStream(s.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader br_server = new BufferedReader(new InputStreamReader(s. getInputStream()));
String temp = br.readLine(); while (true)
{
ps.println(temp);
temp = br_server.readLine(); System.out.println(“ 服务器的信息:” + temp); if (temp.equals(“stop”))
{
break;
}
temp = br.readLine();
}
s.close();
br.close(); br_server.close();
}
}
jdbc 数据拜访技术
14、介绍 JAVA 中的 Collection FrameWork(包含如何写本人的数据结构)?
:Collection FrameWork 如下:Collection
├List
│├LinkedList
│├ArrayList
│└Vector
lse)
Con.setAutoCommit(fa
Con.commit(); Con.rollback();
│ └Stack
└Set Map
├Hashtable
├HashMap
└WeakHashMap
Collection 是最根本的汇合接口,一个 Collection 代表一组 Object,即 Collection 的元素(Elements)
Map 提供 key 到 value 的映射
15、请说出你所晓得的线程同步的办法
HashTable 中的 put,get,remove Vector 的相干办法。

退出移动版