2017 has been a busy year for me. I have been preparing for the spring recruitment for internship since the beginning of the year, and I have been busy with JDK source code in the 30th of the year. In March, I went through five interviews with Ali and successfully received the internship offer in April. Then In May, I began my internship in Ant Financial with anxiety. In August, after two rounds of interviews, I finally got the offer of full-time employment. At this point, I can finally enjoy my last time on campus. I hope my experiences and insights can help you.

My graduate school experience

Ali is an important goal of my postgraduate study. When I entered the first year of postgraduate study, I set up a Flag and planned what I would do and learn in the third year of postgraduate study. If YOU look through my blog, I can still find my master’s plan written at that time (how time flies!). Ali in my mind has always been a pilgrimage site for technologists, gathering a group of technology fanatics, in order to improve a little bit of performance can sleep and sleep. After setting this flag, I told everyone around me that I wanted to go to Ali. I don’t want to leave my options open, so if I’m out of the loop, I need to follow through.

My plan at that time was to study hard and devote myself to the project. After all, writing code is a technology that makes perfect, and writing more code will naturally deepen my understanding of the technology. And so it proved. That summer vacation of my senior year graduation, first contact “deep understanding JVM virtual machine”, after reading at that time is a face meng force, all Chinese characters all know, but connect into a sentence zha don’t understand? Then with such a face of meng forced state, forced to read the book, but because of the understanding is not deep enough, soon forgotten. And then after a year of crazy projects, when I pick up the book again, my feelings about the book have changed 180 degrees, and it’s easy to understand. I wonder why I was such a fool. In this year, I have done four projects altogether. So writing code can subtly improve your understanding of technology.

I remember that it was at the end of March when the result of our school’s postgraduate entrance examination was announced. I was temporarily happy when I learned that I was admitted. The next day, I went to my tutor’s lab to participate in the project. Because I knew in my mind that ALI was my target. When I first went to the lab, I felt completely helpless. I couldn’t understand a single word of what my brothers discussed at the meeting, and it was difficult for me to finish the work assigned at the beginning. But I am a naturally disobedient person, the more I do not understand, the more I want to conquer. (PS: Chasing girls is the same, at that time saw a tall cold goddess. The colder it gets, the more I have to take… Ten thousand words… It worked). I gradually catch up with the pace of my brothers, and I have been in charge of the project since the second project. I set myself the direction of Java, and the lab projects are varied, Qt, C++, graphics… But I know that these projects can broaden my horizon and exercise my learning ability and way of thinking, but the technology I need to deeply understand is Java. So I took advantage of the lull in the project to read a lot of Books on Java, and AT the end of this article I put together a list for you to consider.

After one year of working on the project, I feel that my ability to solve problems and quickly learn new technologies has been improved. However, my understanding of many technologies is only superficial because I always strive for speed and rush time. So most of the time I felt like I was moving bricks and it was hard to write high-quality code. At that time, I decided that in the first semester of my second year of postgraduate study, I would consolidate the foundation, deeply understand the principle behind the technology, and slow down the pace of my projects instead of blindly pursuing fast.

However, due to various reasons, I went to a start-up company for internship. Since I don’t have a choice, I embrace change. Take things as they come, and I hope my time has paid off. So I threw myself into my work. The company assigned me to do the front end, although this is not what I want to do, but at the moment there is no choice, if we do that we have to do well. I spent a month brushing the front end knowledge, learning Angular and React, understanding their design ideas, learning the principle behind JS, and seeing the current development of the front end. The technology on the front end iterates quickly, but the principles behind the technology are similar, so it’s important to get to the essence behind the technology. This internship lasted until January this year. I knew that ali’s internship recruitment would start at the end of February and early March, so I squeezed out rest time at noon, time after work in the evening and time on weekends to review what I had accumulated before.

March 3rd, the first interview of my life, when I saw hangzhou’s phone, I felt both nervous and excited at that moment. Before this, I do not know their level in all the fresh graduates in a what level, before the phone call I have made full psychological preparation, imagine all kinds of interview by the hanging screen. The first interview lasted 54 minutes, and the interviewer seemed to have a lot of patience. That interview gave me great confidence, because I knew that I was one step closer to my goal. In the following month, I received five interview phone calls one after another. Every interview was a learning opportunity to discover my shortcomings and learn the latest technology and the best implementation method in the process of communicating with the interviewer.

On April 14th, I remember that I received the offer from Ali after dinner after I had just finished the algorithm class for undergraduates on behalf of my tutor. The joy was palpable, and the effort had paid off. But I also know that Ali’s internship conversion rate is always low, and it is not easy to stay through the internship. Therefore, the night after I received the offer from Ali, I re-planned the following study plan and updated my short-term goal to win the offer of Ali to become a regular employee.

On May 20, a beautiful day, I entered the Alipay building with longing, apprehension and excitement, and began my three-month internship. I have learned a lot from the three-month internship. I have seen my progress every day and my shortcomings. I have experienced so many things in the past 100 days, and I have learned so much. I will write a separate article about my feelings during the internship to share with you.

At 11 PM on September 1, my status changed from “in the interview” to “offer to follow up”. I smiled and realized the goal of the first stage of my life. I was not too excited at that moment. After eight months of continuous struggle in 2017, this offer had been expected for a long time.

The next day was Saturday, and I gave myself two days off this weekend. Although I have stayed in Hangzhou for 102 days and the Alipay building is near the West Lake, I have never been to the West Lake since I work at 2 o ‘clock every day. That night, when my gay friends learned that I had received the offer, they immediately bought a ticket and took an overnight train to Hangzhou to celebrate me. Thanks to him, I visited this beautiful city for the first time this weekend.

At the end of my school days, I set a new goal for myself. This goal may be full of challenges, hardships and difficulties, but I think if I can achieve it, my life will be greatly changed. I’m still fighting my way through life. I hope to work with you.

Some advice

The blog helped me a lot in interviewing Ali. It’s not that having a blog is a plus in an interview, but the process of blogging deepens your understanding of knowledge and is especially productive in retrospect (it was your own writing, after all).

I have formed the habit of blogging since the beginning of my graduate school. Now, back to the past two years, I have written a total of 185 articles and received 22W page views. I am also honored to be called an expert blogger. My blog has now become one of my most precious wealth, recording the entire architecture of my technology, as well as the mental process of learning technology.

Maybe many students have the experience of writing blogs, but few of them can stick to it for a long time. I want to tell you that everything is important in perseverance. It only takes 21 days to get into the habit. Sometimes it’s hard to keep going when you lose interest, but think about your goal, grit your teeth and stick to it. Make a habit and you win.

My blog is usually a summary after reading a book. I will write down the most important things in a book as I understand them. I read each book three times, the first time is to quickly scan, to understand the architecture of the whole book, the author’s writing ideas, to know the important and unimportant content of the book, that is, to establish the overall picture. For the second time, I will read intensively, picking out what I think is important and re-reading, re-understanding and thoroughly understanding. The third time I read a book, I always have a new understanding. I often feel that “after reading a book a hundred times, the meaning of the book can be seen by itself”. After reading it three times, I wrote a blog about the core content as I understood it. As a result of their own writing, so in the review of the time to spend as long as three or five minutes to read over, all knowledge points and wake up.


Java interview questions

This article is based on my interview experience, for you to sort out the Java program ape interview required knowledge system.

Part ONE: Computer fundamentals

Internet big factory attaches great importance to programmer’s basic skill quite, namely computer foundation knowledge. How far a programmer can go and how high he can climb depends largely on whether his basic skills are solid. For graduating students, most of them lack actual combat project experience. Although there will be some project experience, there is a huge gap between the quality of these curriculum design and laboratory projects and the actual projects of the company. Therefore, the basic knowledge will become a major focus of the interview consideration, and the solid foundation of the programmer plasticity is relatively high, can do everything easily and quickly learn.

Basic computer science includes the following courses, I believe that computer students must have learned. But the Internet company interview may be a little bit different from your final exam, so I’ve sorted that out.

1. Computer networks

Computer networks in university courses are generally introduced in accordance with the OSI seven-layer reference model. However, due to the characteristics of Internet companies, they pay more attention to the transmission layer and application layer involved in daily development, so they need to focus on mastering all knowledge points involved in the transmission layer and application layer.

“Test”

  • The role of transport layer
  • Meaning of transport layer reuse and reuse
  • The difference between transport layer and network layer
  • Features of UDP
  • UDP packet structure
  • TCP features
  • TCP packet structure
  • TCP three-way handshake
  • TCP Four wave waving process
  • How is TCP reliable transport implemented
  • Stop waiting protocol
  • Sliding window protocol
  • TCP traffic control
  • TCP congestion control
  • The HTTP protocol
    • HTTP workflow
    • HTTP Request format
    • Eight request methods in HTTP 1.1
    • HTTP Response format
    • Important request header and response header fields in HTTP
    • HTTP common status codes and their meanings
  • The HTTPS protocol
    • The difference between HTTPS and HTTP
    • HTTPS protocol workflow

[Data collation]

  • Computer network transmission layer knowledge full coverage – big idle chai Maomao’s blog
  • HTTP Details (1)- How it works
  • HTTP Detail (2)- Request, response, cache
  • HTTP 1.0 and HTTP 1.1 are different
  • Diagram HTTPS communication process

2. Data structure

Mastering data structure is the most basic quality of programmers, and choosing the right data structure in the actual development will greatly affect the efficiency of the program. Instead of asking questions about data structures directly, the interviewer will ask questions about algorithms that include data structures to see how well you understand them and how flexibly they can be applied to real projects. You can improve on this by brushing up on algorithm-based questions. Recommend Finger Offer and Programmer Interview. . Many companies’ algorithmic question banks are drawn from these two books.

Of course, the purpose of reading these books is not to memorize questions, which vary so much that interviewers can change them at will. Brush algorithm is the most important problem is to cultivate the idea of solving problems and the ability to solve practical problems. In the process of brushing questions to sum up, again, do not memorize!

3. The algorithm

Algorithms, like data structures, are generally measured by specific algorithm-based questions, and you can improve your skills by checking out the algorithm-based questions in Offer and Interview for Programmers. But before you can tackle these algorithms, you need to know a few basic algorithms and understand how they solve the problem (which is the most important). These algorithms have been sorted out below.

  • General backpack problem
  • Optimal merge mode
  • Minimum cost spanning tree
  • Dijkstra algorithm
  • Freudian algorithm
  • Longest common subsequence
  • 0/1 knapsack problem
  • Multisegment graph problems
  • N Queen problem
  • BFS
  • DFS

4. Operating system

“Test”

  • Four features of an operating system.
  • The main functions of the operating system.
  • The states of the process, the state transition diagram, and the events leading to the transition.
  • The difference between processes and threads.
  • Several ways in which processes communicate.
  • Several ways to synchronize processes
  • The difference between user state and core state.
  • The concept of deadlocks, the cause of deadlocks.
  • Four necessary conditions that cause a deadlock.
  • Four ways to handle deadlocks.
  • Ways to prevent deadlocks, ways to avoid deadlocks.
  • Process scheduling algorithm.
  • Several algorithms of continuous memory allocation and their advantages and disadvantages.
  • Basic paging storage management.
  • Basic segmented storage management.
  • Compare the advantages and disadvantages of segmented paging.
  • Several page replacement algorithms will count the number of page changes required
  • Definition and implementation of virtual memory.

[Data collation]

  • Summary of key points and difficulties in operating system interview
  • Operating System (a must for every developer)

Database of 5.

“Test”

  • What is an index?
  • Classification of indexes
  • Analysis of the strengths and weaknesses of indexes
  • When is an index needed? When are indexes not needed?
  • What is a transaction?
  • Four characteristics of transactions
  • Three paradigms of database
  • What table joins does the database have?

[Data collation]

  • Database indexes are fully parsed
  • Database transaction details
  • Three paradigms of database
  • Database (a must for every developer)

Part TWO: Java

As a qualified Java programmer, knowing how to use Java is not enough. Your proficiency in Java means that you have become a qualified coder and can implement certain functions in Java. Companies, as for-profit organizations, need to maximize profits with minimal resources, which requires programmers to be able to write high-quality code, and writing high-quality code depends on how well you understand the principles behind the technology. Only by understanding the principles behind Java can you write more efficient code based on Java’s features. This is a very valuable thing in real business. Large Internet companies serve a large number of users, pay more attention to the performance of the system, but also pay more attention to the understanding of the principle of programmers.

I won’t mention the basics of Java and how to use it, but any Java book will cover it in detail. Here I’ve put together a list of Java basics that will be a plus in your interview.

1. Java VM

“Test”

  • Java virtual machine memory model features and functions
    • Program counter
    • Java virtual machine stack
    • Local method area
    • The heap
    • Methods area
  • Object creation process
  • Object access procedure
  • Object memory structure
  • Garbage collection algorithm
  • How do I determine which objects need to be reclaimed?
  • Object memory allocation policy
  • Distributive guarantee mechanism
  • Garbage collector comparison
  • Class file structure
  • The timing of class loading
  • Class loading process
  • Parental delegation model

【 knowledge resources 】

  • In-depth understanding of THE JVM(I) — THE JVM memory model
  • In-depth understanding of the JVM(ii) – Uncover the secrets of HotSpot object creation
  • In-depth understanding of THE JVM(iii) – Garbage collection strategy details
  • An in-depth understanding of THE JVM(4) – object memory allocation strategy
  • In-depth understanding of the JVM(5) – HotSpot garbage collector details
  • An in-depth understanding of the JVM(vi) — JVM performance tuning in action
  • In-depth understanding of the JVM(7) — Class file structure
  • An in-depth understanding of the JVM(8) — class loading timing
  • An in-depth understanding of the JVM(ix) — class loading process
  • An in-depth understanding of the JVM(10) – class loader

2. Java concurrent programming

“Test”

  • What is a deadlock? How do I avoid deadlocks?
  • What is reordering?
  • What are the features of Volatile?
  • What is memory visibility?
  • Why does volatile guarantee memory visibility?
  • The interrupt mechanism
  • What are the ways threads communicate?
  • What does a thread pool do?
  • How to use ThreadPoolExecutor?
  • How do I set the size of the thread pool?
  • How to keep thread safe?
  • Which locks are optimized in JDK 1.6?

【 knowledge resources 】

  • The Art of Concurrent Programming in Java (PART 1) — The Problems of concurrent programming
  • The Art of Concurrent Programming in Java (Part 2) — Reordering
  • The Art of Concurrent Programming in Java (III) — Volatile
  • The Art of Concurrent Programming in Java (iv) — Thread state
  • The Art of Concurrent Programming in Java (5) — Interrupts
  • The Art of Concurrent Programming in Java (vi) — Communication between threads
  • The Art of Java Concurrent Programming (7) — Executors
  • The art of Concurrent Programming in Java (8) – locking, synchronization barriers, semaphore details
  • The art of Concurrent Programming in Java (9) – batch fetching the results of multiple threads
  • The Art of Concurrent Programming in Java (10) — Thread Pools (1)
  • The Art of Concurrent Programming in Java (11) — Thread Pools (2)
  • The Art of Concurrent Programming in Java (xii) — Thread safety
  • The Art of Concurrent Programming in Java (xiII) — Lock optimization
  • Large collection of Java concurrent containers

3. Java container test point and data sorting

  • An overall framework for the Java Collection series 01
  • Collection architecture for Java Collection series 02
  • ArrayList of Java Collection series 03 provides a detailed introduction (source code parsing) and usage examples
  • Java Collection Series 04 fail-Fast Summary (Using ArrayList to illustrate fail-fast principles and Solutions)
  • Java Collection Series 05 LinkedList details (source code parsing) and usage examples
  • The Java collection series 06 Vector provides a detailed introduction (source code parsing) and usage examples
  • Java collection series 07 Stack details (source code parsing) and use examples
  • List summary of Java Collection Series 08 (Usage Scenarios and Performance analysis of LinkedList, ArrayList, etc.)
  • Map Architecture for Java Collection Series 09
  • Java Collection series 10 HashMap details (source code parsing) and usage examples
  • Java Collection series 11 Hashtable details (source code parsing) and usage examples
  • TreeMap of the Java Collection Series 12 provides a detailed introduction (source code parsing) and usage examples
  • WeakHashMap of the Java collection series 13 is described in detail (source code analysis) and use examples
  • Summary of Map of Java Collection series 14 (Usage scenarios of HashMap, Hashtable, TreeMap, WeakHashMap, etc.)
  • The Set schema of the Java Collection series 15
  • Java Collection series 16 HashSet details (source code parsing) and usage examples
  • TreeSet of the Java Collection series 17 provides a detailed introduction (source code parsing) and usage examples
  • Java collection series 18: Iterator and Enumeration comparison

4. Java IO test points and data sorting

  • Java IO Series 02 ByteArrayInputStream introduction, source analysis and examples (including InputStream)
  • Java IO Series 03 ByteArrayOutputStream introduction, source analysis and examples (including OutputStream)
  • Java IO series 04 pipes (PipedOutputStream and PipedInputStream) introduction, source code analysis and examples
  • Java IO Series 05 ObjectInputStream and ObjectOutputStream
  • Java IO Series 06 Serializable and Externalizable
  • Java IO Series 07 FileInputStream and FileOutputStream
  • Java IO Series 08 File Summary
  • Java IO series 09 FileDescriptor summary
  • Java IO Series 10 FilterInputStream
  • Java IO Series 11 FilterOutputStream
  • Cognition, source code, and examples of BufferedInputStream for Java IO series 12
  • Java IO series 13 BufferedOutputStream cognition, source code and examples
  • Java IO series 14 DataInputStream recognition, source code and examples
  • Java IO series 15 DataOutputStream cognition, source code and examples
  • Java IO series 16 PrintStream details
  • Java IO series 17 system.out.println (” Hello World “) principle
  • Java IO Series 18 — CharArrayReader
  • Java IO Series 19 CharArrayWriter(Character Array output Stream)
  • PipedReader and PipedWriter for Java IO Series 20
  • Java IO Series 21 InputStreamReader and OutputStreamWriter
  • Java IO Series 22 – FileReader and FileWriter
  • Java IO Series 23 – BufferedReader
  • Java IO Series 24 BufferedWriter(Character buffered output Stream)
  • Java IO Series 25 PrintWriter
  • Java IO series 26 RandomAccessFile
  • Take an in-depth look at how Java I/O works

5. Summary of other Knowledge points in Java

  • In-depth understanding of Java exception handling mechanisms
  • Understanding of WeakReference and WeakHashMap in Java
  • Analysis of possible problems with HashMap concurrency
  • Analyze ConcurrentHashMap in depth
  • The Java copy-on-write container
  • 9 things about Null in Java
  • Brief introduction to several common Web attacks
  • Collections.sort source code analysis
  • The Java8 series reimagines HashMap
  • Learn more about Strings in Java
  • Arrays.sort() What you should know
  • Count the design patterns in the JDK
  • A problem with double-checked locks in Java singleton schema