笑傲Java面试-面霸修炼手册(源码视频码需练习)
笑傲Java面试-面霸修炼手册
第1章 需要学习的内容有:解读5个规则 、(学习vx(cmL46679910))如何写一份让面试官无法拒绝的简历、10年面试官脱敏简历点评、10年面试官脱敏简历点评。
一位同学的心路历程、"10年面试官脱敏简历点评"反馈、在中小厂成为Leader、简历没有人设的同学进、从“典型”中发现自己得不足。
serverSocket = new ServerSocket(port);
while(true) {
this.accept();
}
}
void accept() throws IOException {
// Blocking...
// Thread--->Sleep ---> Other Threads
try {
var socket = serverSocket.accept();
System.out.println("A socket created");
var iptStream = new DataInputStream(socket.getInputStream());
var bfReader = new BufferedReader(new InputStreamReader(iptStream));
(视频资源vx(cmL46679910))
var requestBuilder = new StringBuilder();
String line = "";
// Readline -> line end '\n'
while (true) {
line = bfReader.readLine();
if(line == null || line.isBlank()) {
break;
}
requestBuilder.append(line + '\n');
}
var request = requestBuilder.toString();
System.out.println(request);
var bfWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
var response = this.handler.apply(request);
bfWriter.write(response);
bfWriter.flush();
socket.close();
}catch(SocketException e) {
e.printStackTrace();
}
}
第2章 需要学习的内容有:Java精通、 容器、集合、映射: 随机序列产生器 、IDEA开发环境和Java配置、容器、集合、映射:实现Key-Value的LRU、Java8 StreamT接口:流和管道是基础用法、Java8 StreamT接口:手写流的并行计算。
serverSocket = new ServerSocket(port);
while(true) {
this.accept();
}
}
void accept() throws IOException {
// Blocking...
var socket = serverSocket.accept();
new Thread(() -> {
try {
this.handler(socket);
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
void handler(Socket socket) throws IOException {
// Blocking...
// Thread--->Sleep ---> Other Threads
try {(视频资源vx(cmL46679910))
System.out.println("A socket created by Thread:" + Thread.currentThread().getId());
var iptStream = new DataInputStream(socket.getInputStream());
var bfReader = new BufferedReader(new InputStreamReader(iptStream));
var requestBuilder = new StringBuilder();
String line = "";
// Readline -> line end '\n'
while (true) {
line = bfReader.readLine();
if(line == null || line.isBlank()) {
break;
}
requestBuilder.append(line + '\n');
}
var request = requestBuilder.toString();
System.out.println(request);
var bfWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
var response = this.handler.apply(request);
bfWriter.write(response);
bfWriter.flush();
socket.close();
}catch(SocketException e) {
e.printStackTrace();
}
}
和面试官聊聊实现管道和流计算的基石:函数式的Monad、Buffer的原理和使用场景-面试题解读、 深入Buffer-Coding-阿里面试题:中文乱码处理和大文件词频统计。
static Pattern methodRegex = Pattern.compile("(GET|PUT|POST|DELETE|OPTIONS|TRACE|HEAD)");
public String getBody() {
return body;
}
public String getMethod() {
return method;
}
public HashMap<String, String> getHeaders() {
return headers;
}
private final String body;
private final String method;
private final HashMap<String, String> headers;
public Request(Socket socket) throws IOException {
// DataInputStream -> primitives(Char, Float)
// InputStream -> bytes
var iptStream = new DataInputStream(socket.getInputStream());
var bfReader = new BufferedReader(new InputStreamReader(iptStream));
// GET /path HTTP/1.1
var methodLine = HttpParser.readLine(iptStream, "UTF-8");
var m = methodRegex.matcher(methodLine);
m.find();
var method = m.group();
// Content-Type:xxxx
// Length : xxx
var headers = HttpParser.parseHeaders(iptStream, "UTF-8");
var headMap = new HashMap<String, String>();
for(var h : headers) {
headMap.put(h.getName(), h.getValue());
}
var bufferReader = new BufferedReader(new InputStreamReader(iptStream));
var body = new StringBuilder();
char[] buffer = new char[1024];
while(iptStream.available() > 0) {
bufferReader.read(buffer);
body.append(buffer);
}
this.body = body.toString();
this.method = method;
this.headers = headMap;
}
}
同步和阻塞、异步和非阻塞等不等价、(视频资源vx(cmL46679910))反射+元编程面试题目、两道反射、Coding训练:实现AOP注解、元编程面试专项 、Java8-11新特性、Java8~11整理文档。
Socket socket;
private int status;
static HashMap<Integer, String> codeMap;
public Response(Socket socket) {
this.socket = socket;
if(codeMap == null) {
codeMap = new HashMap<>();
codeMap.put(200, "OK");
}(视频资源vx(cmL46679910))
}
public void send(String msg) throws IOException {
var resp = "HTTP/1.1 " + this.status + " " + this.codeMap.get(this.status) + "\n";
resp += "\n";
resp += msg;
this.sendRaw(resp);
}
public void sendRaw(String msg) throws IOException {
var bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write(msg);
bufferedWriter.flush();
socket.close();
}
}
第3章 需要学习的内容有:算法数据结构的入门水平、插入、选择、冒泡 、分治策略、快速排序方案、排序 、复杂度分析和性能思考、手写链表相关算法。
ServerSocketChannel ssc;
public void listen(int port) throws IOException {
ssc = ServerSocketChannel.open();
ssc.bind(new InetSocketAddress(port));
// Reactive / Reactor
ssc.configureBlocking(false);
var selector = Selector.open();
ssc.register(selector, ssc.validOps(), null);
ByteBuffer buffer = ByteBuffer.allocate(1024*16);
for(;;) {
int numOfKeys = selector.select();
Set selectedKeys = selector.selectedKeys();
Iterator it = selectedKeys.iterator();
while(it.hasNext()) {
var key = (SelectionKey)it.next();
if(key.isAcceptable()) {
var channel = ssc.accept();
if(channel == null) {
continue;
}
// Kernel -> mmap(buffer) -> Channel -> User(Buffer)
channel.configureBlocking(false);
channel.register(selector, SelectionKey.OP_READ);
} else {
var channel = (SocketChannel)key.channel();
// _ _ _ _ _ _ _
// P(position)
// L
buffer.clear();
channel.read(buffer);
String request = new String(buffer.array());
// Logic...
buffer.clear();
buffer.put("HTTP/1.1 200 ok\n\nHello NIO!!".getBytes());
// H T T P / 1 ... ! _ _
// P(L)
// P (视频资源vx(cmL46679910)) L
buffer.flip();
channel.write(buffer);
channel.close();
}
如何用栈和队列实现表达式解析、手写树相关算法、八皇后和搜索问题 、手写栈、队列相关算法、哈希表:HashMap实现原理和ConcurrentHashMap、手写动态规划题目。