59 Funny but truly incredible programming quotes about programmers

Source: Internet
Author: User
Tags data structures modifier prepare reflection visibility volatile java keywords advantage

http://www.vaikan.com/59-hilarious-but-true-programming-quotes-for-software-developers/


Introduction

  

First of all, do not ask the LZ who is Lin Yu, Lin Yu is a famous programmer novel protagonist name.

The purpose of writing this article is actually very simple, is a previous LZ an article to complement and perfect.

Before the LZ wrote a "answer Ali Social interview How to prepare, by the way to the Java Program Ape Learning in various stages of the proposal", the article LZ mainly describes how to deal with social recruitment interview, and how to carry out Java learning.

The response of the article is also good, many ape friends sigh, "if you see this article earlier, maybe I have become a great God." ”

But LZ can only regret to tell you, LZ that article does not let you become a great God, can only let you become a better than most people a little bit of the program ape. And LZ himself has not become a great God, how can you become a great God.

However, LZ can hand to tell you, LZ as a non-graduate, born in the three-stream University of the grassroots, is how to rely on their own efforts to enter the domestic first-class internet company.

   Mentality

  

Seeing this headline, some classmates might say, "LZ, aren't you going to tell us how to get into bat?" How to write a mentality on the way up. ”

Yes, LZ the first thing to say is the mentality.

The reason is very simple, the article will be mentioned below the study content, if you do not have a good mentality, it is impossible to go on. So, first pass the mentality of this, and then to talk about something else, or you will surely die on the halfway.

Say, many new people in the group love to ask LZ, "How do you learn." Why I can't learn it. Why do I get sleepy when I read a book? ”

Above this phenomenon, basically is two reasons, the first reason is impetuous mentality, always feel that the book seems to have no use Ah, looked like still feel did not learn what, will not soon forget. The second reason is the sense of the goal is not strong, do not know how to reach the extent to be counted, so it is simply "a bottle of discontent, half a bottle of sloshing."

For the first reason, the final question is a mindset. Always think of reading can be immediate, from the rookie suddenly into the great God, if you are always holding this mentality to read, you are not sleepy is weird.

And the second reason, LZ felt that sometimes people to appropriate to stimulate the desire of the heart, no desire for this high-force lattice of things, and so you billionyearold, and now take advantage of the young, in the heart of a little desire in fact is not what harm, as long as you have not been the desire to force the eyes of the line.

Speaking of desire this matter, LZ think it is necessary to show you the LZ originally desire, believe from this email, you can feel the LZ at that time desire. This desire, will inspire you to move forward, but you have to remember, on the way forward, adjust their mentality, rashness.

   Learning

  

Say the mentality, we come to talk about learning this matter, or the usual, because the LZ is the Java back-end origin, so the next content, will be closely related to the Java backend, non-Java backend classmate can be properly referenced, but do not copy.

This article and "Answer Ali Social interview How to prepare, by the way, for Java Program Ape study each stage of the proposal" different, that article is more from the study of how to learn from the point of view, and this article since we are to talk about how to enter bat, then we from the interview point of view to talk about learning this matter, LZ talks about the requirements of the first-class internet company for Java back-end programmers, the corresponding, will also talk about how to achieve such requirements.

For simplicity, LZ divides these requirements into three levels, which are basic requirements, optional requirements, and additional requirements, and then we'll talk about one.

   first, the basic requirements

  

The basic requirement is that you have to learn the knowledge, and most of this content, the probability of appearing in the interview is very high. Therefore, this part of the content you have no choice, can only choose to chew it, you can spend a year, also can spend 10 years, or bring into the coffin to learn also can.

  

1) The basic part of the language:

The first of the basic requirements, of course, is the basic part of the language. The basic part is actually the function of grammar and some key words, like some if/else, for loop this kind of basic grammar, and some new, class, public this kind of basic keywords, most of the interview ask is relatively small, because this part, as long as you write a few years Java, There's basically nothing wrong with that.

Then the basic part of the focus, in fact, is static, final, transient, volatile, such as the key word, as well as the inner class, generics this kind of high-order syntax.

When it comes to static, the most important thing to remember is that the variable referenced by static in the class attribute is used as the root root node of the GC. Being a root node means that this type of variable is essentially not recycled. Therefore, static can easily introduce the risk of memory leaks.

If an interviewer lets you explain the static keyword, and you tell him that static can modify properties, methods, and inner classes, and what the effect will be after the modification, the interviewer will basically not remember your answer, and the whole impression is mediocre.

But if you're done, add that you've ever had a memory leak, because a variable of type map of static modifies it, and finally the stack information is found, and the problem is solved. Then, the interviewer's impression of you in the middle of the moment will not naturally increase a bit.

Also, for static, a more in-depth understanding is that static creates a referential relationship directly with the class, rather than an instance of the class, with the referenced properties, methods, and inner classes. That's why you can use the class name. property, class name, method, and class name. An inner class name that directly refers to a property, method, or inner class that is modified by static.

If you do not modify with static, then you must use an instance to refer to these methods, properties, or internal classes, most typically internal. I believe many students have wondered why an inner class that is not modified by static must be so declared.

    Outterclass.innerclass innerclass = new Outterclass (). New Innerclass ();

Because you are not using the static modifier innerclass, you must new out a Outterclass instance in order to create an instance of the inner class on this basis, because the inner class can only be referenced by an instance of an external class. If you use the static modifier, you can use an inner class like this.

    Outterclass.staticinnerclass Staticinnerclass = new Outterclass.staticinnerclass ();

The biggest difference between the two approaches is that the first way, if you want to get an instance of Innerclass, you have to have an instance of Outterclass, all in fact this way you create two instances, so there are two new keywords. The second way to understand some, the static inner class does not depend on the external class instances exist, so only need to directly create an instance of the inner class can be, so there is only one new keyword.

Static said a bit more, but LZ in fact not only said the static keyword, but also together with the internal class of the syntax is also roughly said under. Then, the basic part of a more test of people, is the volatile keyword.

The focus of this keyword is three characters, which is visibility. But in the interview, you say the visibility of three words, basically out of 100, you can only get 20 points. The remaining 80 points will depend on you to use the cicatrization to obtain.

The so-called cicatrization, in fact, is to understand, in the concurrency, what is the meaning of visibility. So, in order to figure out what the visibility means, you need to know what main memory is and how much work it is.

Only by understanding these concepts can you know what the real role of volatile is. But one thing to remind you is that volatile does not guarantee synchronization, which is important to remember. Not only to deal with the interviewer, in the real use of volatile, but also pay attention to this point, otherwise it is prone to problems.

Well, the basic part said so much, LZ picked some representative said under, in the final analysis, this part is to you very clear understanding of Java keywords and grammar, here so-called understanding, is clear understanding of its implementation principle, rather than simply will use it.

  

2) Java Runtime Environment

The Java Runtime environment is the Chinese translation of the JRE, which in essence refers to the JVM.

The first thing you need to know about the JVM is the relationship between the JVM and the hotspot. The JVM is more of a JVM specification, and hotspot is an implementation of the JVM and the JVM implementation that we use most often. You can think of the JVM specification as an interface, and a hotspot as the implementation class, so it's easier to understand.

In addition, the three most important parts of the JVM must be very clear, memory partitioning, class loading mechanisms, and GC policies. Figuring out these three parts is not just for the interview, but for a deeper understanding of Java, which is very helpful for your Java career.

And, as for memory partitioning, it is also important to note that the partitioning method we often say refers to the way the hotspot is divided, not the JVM specification.

The memory division of hotspot is divided into three parts, young Generation (younger generation), old Generation (elder generation) and Perm Generation (permanent generation). Young Generation (younger generation) is also divided into Eden, from and to, where from and to are collectively known as the Survivor Spaces (Survivor area).

Normally, an object from creation to destruction should be from Eden, then to Survivor Spaces (Survivor area), to old Generation (older generation), and finally disappear under a GC.

Of course, it is possible for an object to die directly in Eden, or to survive in old Generation (older generations).

About Memory division, you can use memory analysis tool to see, such as Jmap, JVISUALVM and so on, observe the memory changes in each region, with the actual to understand.

Learn about the ClassLoader mechanism, which can be combined with Tomcat to learn and understand the ClassLoader mechanism of Tomcat to see how Tomcat ensures class isolation between apps. If possible, take a look at the ClassLoader source in Tomcat, or look at the LZ's Open source project Niubi-job, which also contains parts similar to the Tomcat class loading mechanism.

As for GC, it is necessary to know what GC roots are, and how to tell if an object can be recycled. In addition, the GC algorithm and strategy should also have a general understanding, specific can see the LZ about this series of articles, the address is http://www.cnblogs.com/zuoxiaolong/category/508918.html.

  

3) Concurrency knowledge and concurrent package

In order to enter the first-line internet companies, this part of the content must be, otherwise, you can always stay in the relatively low Dan.

With regard to concurrency, the two most important concepts must be clear: visibility and atomicity. The visibility is closely related to the previously mentioned volatile keyword, and visibility is just a concept in the concurrency domain, while volatile is a key word that guarantees variable visibility in the Java language.

As I said earlier, to figure out the visibility, you need to figure out the main memory and the working RAM. In fact, the main and working memory belongs to the knowledge category of the JVM. So from here we can see that knowledge is related.

In fact, the atomicity is better than the visibility, but I believe that the example of the perpetual bank remittance is enough for most people to understand the concept of atomicity, which is actually one or more operations, which is regarded as a whole meaning.

With the basics of concurrency, you'll need to look at the concurrent package. The stuff inside is actually a treasure, and once you need to write concurrency-related features, you'll find something very practical here.

Concurrenthashmap is one of the easiest to ask for interview, almost all interviews will ask you, concurrenthashmap and common sync HashMap what is the difference.

This question actually needs you to know two knowledge to be possible, one is the HASHMAP data structure, one is the lock segmented technology, the specific LZ here does not explain, everybody goes down to find the related information to see.

In addition, there is a very important class in the concurrent package, called Abstractqueuedsynchronizer, and almost all of the concurrency tool classes within the concurrent package are based on this abstract class extension. So, Abstractqueuedsynchronizer this kind of research thoroughly, very helpful to you to understand the concurrent package.

Finally, one of the most frequently asked questions during an interview is the difference between reentrantlock and synchronized keywords.

I remember the LZ previously organized YY interview activities, LZ asked many times this problem, but almost all people can not answer. This can only explain a problem, that is, most people use synchronized and reentrantlock, and do not consider which of the two is better.

In fact, their difference is very simple, simply put, is synchronized because the underlying JVM implementation of mutual exclusion, so the efficiency is higher. and reentrantlock more functions than synchronized, such as timing to acquire a lock, a number of waiting conditions.

This part of concurrency is an important part of the programmer's advanced step, and hopefully all Java programmers can take this part seriously.

  

4) Design Patterns and Reflections

Design patterns and reflect this part of the content, LZ personally feel that a high-level programmer must be proficient in the part.

With this part of the knowledge, you can write less than n code in the actual development, but also make the program structure better.

About the design mode LZ here is not much to do introduction, the specific can look at the LZ Design Model series of articles, address is http://www.cnblogs.com/zuoxiaolong/category/509144.html.

About reflection, in fact, is the contents of the reflect bag, the class in this package is not difficult, mainly to use more, see. For example, the most commonly used spring framework in the Java field, in fact, a lot of design patterns and reflection of the real use of the scene, nothing more research, definitely let you benefit.

  

5) file Io, NIO, network IO, and network protocols

File Io, NIO, and network Io are also part of the work and must be mastered.

Where NiO is more of an understanding of its principles, in addition, Tomcat has several implementations of protocols, including bio, NIO, and APR, which must be very clear about their differences, which can be configured in the Connector protocol attribute.

As for the network IO part, it is actually the content in net package. The content in this is very common, such as you call HTTP-API, then you need to use the class. In this era of RESTFUL-API flooding, you need to invoke the API using the HTTP protocol.

In addition, in understanding this part of the time, the network protocol should also be appropriate to understand, the most typical TCP and HTTP protocol must be understood.

In the LZ to participate in the interview, basically the TCP protocol is bound to ask, although this may be related to the LZ's CV write TCP protocol, but such as the TCP protocol retry mechanism, three handshake process, TCP and UDP differences this kind of knowledge, or to understand.

As for the HTTP protocol, it is relatively simple, and the protocol of the application layer is to know its protocol format, such as which headers are supported, what each header means, and so on.

  

6) Summary

OK, so far, the basic requirements are almost finished. Careful ape friends may notice that these content in fact and LZ on an article "omnipotent Lin Yu said:" An article teaches you how to do the recruitment requirements of "to have a solid Java foundation." ", there are a lot of similarities.

Yes, in fact, the basic requirements of this part, almost is to require you have a solid Java foundation. This is also all the first-line internet companies, the basic will be written in the recruitment requirements of the previous few requirements.

So, to get into bat, this part of the content must be understood, and this part of the content of your actual development is also very helpful, and not just to meet the interview.

   Second, optional requirements

  

If you see an optional requirement of four words, perhaps many people will think that this part is not very important. But LZ can be very responsible to tell you, this part is often the decision of the company to not your important indicators.

Because the basic requirements, the company's main selection of talent standards is actually optional requirements of this part, before the "Answer Ali Social interview How to prepare, by the way to talk about Java Program Ape Learning various stages of the proposal" this article, LZ has mentioned the difference of the word, in fact, this part is the embodiment of the difference.

Next, the LZ will take you to see, exactly what are the optional requirements. In addition, the LZ to advance to explain is that these optional requirements, no must and must not be content, as much as possible to understand, always can not be wrong.

  

1) Spring, MyBatis frame

This part of the framework does not have to say much, spring and mybatis framework of the principle and source code, if you can be very proficient, then this will certainly become your great advantage.

If you're a Java back-end ape dedicated to web development, then spring and mybatis frameworks are basically something you'll want to use. Mastering the Spring and MyBatis framework not only for interviews, but also for your daily development, you can do a lot of architectural optimization, for your comrades to save a lot of repetitive work.

The core of the spring framework, of course, is the IOC, followed by the AOP, MVC two parts. Studying these three parts of the source code will make you stand out from the majority of programmers. As for the MyBatis framework, it focuses on how it implements dynamic SQL.

Moreover, after you have studied thoroughly, you can try to build the wheel yourself, you may get unexpected harvest.

  

2) Linux Server

This part is actually the part that OPS should be proficient in, but as a Java back-end ape, if you can master Linux server, it is very helpful for you to troubleshoot online problems.

Most programmers only know some of the common Linux commands, for the Linux system itself, the file system, network and IO, etc., is completely unaware, which in fact includes the LZ itself. However, LZ saw some programmers around, for Linux play very skilled, this is not only the light embodied in a few commands, but the whole Linux system understanding.

Predictably, these people are often more likely to find the root of the problem when they are troubleshooting. Because the procedural problems are often not the most difficult to solve, the exception of this thing to see more than you know how to go, the big deal to see the source code can always find the reason. The most difficult to solve is the environmental problems, and environmental problems are nothing more than the operating system level of the problem.

And obviously, in most cases, the operating system running in Java is Linux.

  

3) Database optimization

After Linux, and then LZ to say is the database, this should be the DBA should be proficient in the part, but as a Java back-end ape, the database is basically the most often dealing with.

And as we all know, an application's performance bottleneck often appears at the end of the database, so a Java back-end ape If you can master the database, then the actual help for your work is also very large.

Believe that many people have encountered SQL too slow, this time, how to add index, SQL analysis and optimization of the means to optimize the execution time of SQL to an acceptable range, in fact, it is more test people.

Anyway, this thing LZ is Dora level, basic optimization is no problem, but a little more complex will not.

So, this part is enough to be your advantage and reflect your differences.

  

4) Message Service

In addition to Linux and databases, messaging services are an essential component of today's internet companies.

Common message components such as RABBITMQ, ACTIVEMQ, include some other open source message components, such as ROCKETMQ. Any one of these, if you can master its principles, will also be your strong competitive conditions.

In fact, the focus of the message service is how to guarantee the final consistency, the order of messages, including the message transaction and so on.

Although LZ himself is not very understanding, but LZ is very certain, this part if you can have their own unique ideas, will greatly increase your success rate.

  

5) Caching Service

After saying the message service, believe that the cache service everyone also must be not unfamiliar.

Common caches such as memcached, Redis, two, and if you can figure out one of them, will give you a lot of points. After all, the current Internet application, the cache is also necessary, so if you can hold the cache this part completely, then you have the difference.

In the cache service, there are a few problems are more common, such as the cache full of what to do, how to deal with the real-time cache, how to plan the memory structure, distributed in the context of how to deal with the cache when deleted nodes and so on.

  

6) Load Balancer

Load Balancer, this is the last optional requirement.

There are two common load balancers, one is soft load balancing, such as Nginx, Apache, LVs. The other is hardware load balancing, the common main is F5.

Both of these approaches have advantages and disadvantages, in which hardware load balancing is used for simple applications, large traffic scenarios, and software complex equalization is mainly used for complex applications, smaller traffic scenarios. Of course, there's one more difference between the two: hardware-complex equalization is generally expensive, while soft-load balancing has virtually no cost.

There are also some problems with load balancers that are more common. such as how to maintain the session, how to do flow control, load balancing strategy, how to check the health status of the backend server and so on.

  

7) Summary

Well, here, the optional requirements are pretty much the same.

Careful ape friends will find that these 6 requirements in fact corresponds to the Java backend development, the most often contact with something. such as spring, MyBatis framework, and database, both of which are basically Java programmers have been exposed to it.

The remaining four, including the Linux server, the message service, the caching service, and the load balancer, are the same, and you should be exposed to these things more or less in actual work.

But it's not too much to believe in someone who knows a lot about them. Because of this, if you do it, you can reflect your differences, which may be one of your important chips to win an offer.

However, LZ here must emphasize again, these things most people will have some more or less understanding, including the above LZ mentioned problems, many people also know the answer.

However, it is not enough to know the answer, it is not enough to be your advantage, you need to have a deep understanding of these issues, and have your own unique insights that will be enough to make it your advantage.

   Third, the requirements of additional points

  

The last one is the request for extra points, although it is not as important as the basic requirements and optional requirements, but it is similar to the optional requirements, often the ultimate reason to take the offer, is precisely those parts of the seemingly unnecessary requirements.

Next, the LZ will take you to see, what can be added to the part, this part in fact in the previous article "How to prepare to answer the Ali Society interview, by the way, the Java Program Ape Learning in various stages of the proposal" has been mentioned, here is a detailed talk about.

In addition, the LZ would like to emphasize that these additional requirements, in some special cases, may become the basic requirements.

  

1) data structure and algorithm

This part of the content needless to say, we all understand. Proficient in data structures and algorithms, will definitely become a major highlight of your.

Because most of the programmers of this part of the foundation is not very good, including LZ himself, interview if asked the algorithm a class of problems, LZ basically two words: No.

Before the LZ also read some of the Java Collection framework of the source code, for some commonly used data structure has a certain understanding. But now, LZ has basically forgotten, even the most basic bubble sort, maybe LZ may not be able to write the right.

It is therefore foreseeable that data structures and algorithms are absolutely a very extra point. Also, this additional requirement may become a basic requirement when you are interviewing for some algorithm-related positions.

  

2) Computer operating system

The principle of computer operating system is very low-level content.

This part of the content is more difficult, it is the most basic underlying principles, such as memory, instructions, System IO and so on. LZ also studied a book about the operating system, also wrote a series of articles, the address is http://www.cnblogs.com/zuoxiaolong/category/518480.html.

But LZ look is not comprehensive and deep, if you can study the operating system thoroughly, then in the interview, you can use this as a breakthrough point, show your highlights.

  

3) Computer network

In fact, this part of the network, for the programmer is still more important.

LZ recently doing things, will often encounter some network problems, although many times, these problems can actually find special network personnel to solve, but if you do not know enough about it, for your work will create a great obstacle.

Moreover, if you want to master the TCP/IP protocol, if you do not understand the computer network, it is difficult to really understand.

Therefore, if you can master the computer network part, it will definitely become a plus for you.

  

4) Proficient in using a scripting language

Scripting languages are very handy and useful in many cases.

LZ has recently been forced to use Python to do a lot of things, in fact, you will find that although Java can achieve the same purpose, but do choose the right language, will help you save a lot of energy.

Therefore, if you can skillfully use a scripting language, such as Python, Shell, and so on, this will certainly become your add-on.

  

5) your GitHub and blog

This is a belief that most people know that if you have your own GitHub and blog, and there are a lot of valuable content in it, you will definitely add a lot of points. And, speaking of GitHub and blog This matter, LZ also has a true story about himself, at the end of the article to share, here is not mentioned.

In addition, do not say the interview this matter, usually in GitHub write code, write articles in the blog, summarize their own technology and the workplace, is also very good. Believe that a lot of apes have already realized the benefits of this, LZ will not say more.

After all, it is useless to say more, the main thing is to really real to do, if you want to be able to add points in this respect, then start from the present, and persist.

  

6) Summary

Here, the request for extra points is about the same.

In fact, can add a lot of content, LZ just listed a few more common, such as you have other first-line internet company background, this is also can be added points. But this addition is difficult to achieve, and, here is more about the grassroots programmer, so LZ here is not much to say.

In general, the addition requirements and the optional requirements are the key to your success, so if possible, you need to make some effort in the bonus points.

   Learning Summary

  

About studying this part, come here to say almost.

Like the previous article, "Omnipotent Lin Yu said:" An article teaches you how to do the recruitment requirements of "to have a solid Java foundation." The article said, in fact, most of the first-line internet companies, the technical requirements for hiring two, a solid Java foundation and a skills.

A solid Java foundation, in fact, is the basic requirements of this article, and skills, in fact, is optional requirements and the addition of the requirements of any choice can be.

Of course, it is undeniable that in the optional requirements and bonus points, the more you will be, the higher the success rate, this is beyond doubt. But if you have no advantage, even if you have a solid Java foundation, it is difficult to go in, because you are so many people, can not stand out among the many interviewers.

Although not ruled out your luck particularly good, at that time the company is in urgent need, and no other better interviewers, resulting in your very lucky to get the offer, but after all, this probability is too small.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.