笑傲Java面试-面霸修炼手册(源码视频码需练习)

385 阅读3分钟

笑傲Java面试-面霸修炼手册(源码视频码需练习)

笑傲Java面试-面霸修炼手册

第1章 需要学习的内容有:解读5个规则 、(学习vx(cmL46679910))如何写一份让面试官无法拒绝的简历、10年面试官脱敏简历点评、10年面试官脱敏简历点评。

image.png 一位同学的心路历程、"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、手写动态规划题目。

image.png