某鱼大厂建议的面试资料整理
Posted 马小乎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了某鱼大厂建议的面试资料整理相关的知识,希望对你有一定的参考价值。
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 的相关方法。
以上是关于某鱼大厂建议的面试资料整理的主要内容,如果未能解决你的问题,请参考以下文章