七牛云暑期实习二面
看看简历
你们学的是啥课啊
学了些啥, 熟悉啥语言啊,
项目, 为啥加id 啊? 怎么实现你们的想法的? 开销大吗? 怎么生成id的啊? 好处是啥啊?
毕业后打算干嘛啊
基础问题
final
finally
finalize
- finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法 . Java语言规范并不保证finalize方***被及时地执行、而且根本不会保证它们会被执行
抽象类和接口的区别,
反射干嘛用的. 用来获得一个类的属性 , getclass 不过用的不多
集合有哪些? 我说 vector, hashmap, hashtable, treemap, arraylist, linkedlist,
concurrentmap用过吗?
用过, 可以实现线程安全,
怎么实现多线程? 我说 1. 线程池提交handler,执行runnable 2. thread类,
用共享屏幕写一个 程序, 两个线程 运行,
我也不太会写,
算法, n个数, 找最大k个数
写了快排, 发现不对劲, 然后冒泡, O(nk),
然后最大堆, O(nlogn)? 最大堆push (1+log2n)*n/2 好像是 O(nlogn)
问问题
测试开发人人是开发,是qa.
自动化, cicd 持续交付持续集成
测试平台开发.
之后翻了翻我写的代码
两个线程 运行,大概是这样
public class Server { private ExecutorService executorService = Executors.newCachedThreadPool();// 用cached 线程池,线程池不使用 Executors 去创建,而是通过 ThreadPoolExecutor 构造函数的方式.因为CachedThreadPool 和 ScheduledThreadPool允许创建的线程数量为 Integer.MAX_VALUE ,可能会创建大量线程,从而导致 OOM。 Handler handler = new Handler(s); class Handler implements Runnable{ public void run() { System.out.println("New connection accept:" + socket.getInetAddress()); } } public void Service() throws IOException{ while(true) { Socket s = null ; Handler handler = new Handler(s); executorService.execute(handler);//提交一个任务到线程池中去 } } }或者是这样
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; // 多线程和并行程序设计 30章 demo代码 public class TaskThreadDemo { public static void main(String[] args) { //ExecutorService executor = Executors.newFixedThreadPool(3); //ExecutorService executor = Executors.newFixedThreadPool(1);//会依次执行 ExecutorService executor = Executors.newCachedThreadPool();// 一个任务可以用thread类,多个任务可以用线程池. executor.execute(new PrintChar('a', 100)); executor.execute(new PrintChar('b', 100)); executor.execute(new PrintNum(100)); executor.shutdown(); // Runnable printA = new PrintChar('a',100); // Runnable printB = new PrintChar('b',100); // Runnable print100 = new PrintNum(100);// 把任务从线程中分离出来. // // Thread thread1 = new Thread(printA); // Thread thread2 = new Thread(printB); // Thread thread3 = new Thread(print100); // // thread1.start(); // thread2.start(); // thread3.setPriority(Thread.MAX_PRIORITY); // thread3.start(); } } class PrintChar implements Runnable{ private char charToPrint; private int times; public PrintChar(char c, int t ) { charToPrint = c; times = t; } @Override //jvm 会自动调用这个方法 public void run() { for(int i = 0 ; i < times ; i++) { System.out.print(charToPrint); } } } class PrintNum implements Runnable{ private int lastNum; public PrintNum( int n ) { lastNum = n; } @Override public void run() { // Thread thread4 = new Thread( new PrintChar('c', 40)); // thread4.start(); try { for(int i = 0 ; i <= lastNum ; i++) { System.out.print(" "+ i); //Thread.yield();//给其他线程让出cpu时间 // if( i > 50 ) Thread.sleep(1);//sleep 一定要catch 异常 可能休眠后有interrupt 异常 // if( i > 1 ) thread4.join();// 等待thread4结束后再继续打印3-100 } } catch (Exception e) { // TODO: handle exception } } }