As an old programmer who has been programming for more than ten years, although I have never joined Alibaba, I also rejected offers from Baidu and Tencent when I changed jobs, and chose an Internet company that is more suitable for me. My programming skills The main determining factor is the environment that has a lot to do with my basic skills. A few days ago, I answered a question about who has a higher coding level and who has a lower coding level in a large company or a small company. There are external factors that influence it, but the main factor is myself. I have no determination to improve my coding. Level, no matter how good the external environment is, it doesn’t mean much.
In large companies like Alibaba, due to the relatively full job arrangements, code submissions normally require approval by the leader, which can greatly improve the quality of the code to a certain extent. In the review mechanism It will be more stringent, and the testing control will also be stricter. Ordinary small companies may have slightly less staffing and less control. A strict and standardized system can promote deeper understanding of programmers to a certain extent. Improvement, but essentially it is whether you want to make yourself better and whether you are willing to improve yourself faster.
Actually, when it comes to large companies like Alibaba, it is mainly a matter of people’s mentality. They feel that large companies must be more standardized than small companies. For someone who has experienced a large company, they still think that they are just a screw in it. , I also want to go to a small company to let myself perform more thoroughly. People in small companies yearn for the treatment and standards of large companies. Just like unmarried people, they always want to enter a besieged city, and those who enter envy the freedom of not being married. In fact, going back and forth is just that.
I once gave up the position of a department technical manager in a medium-sized company in order to enter a large company. Now I imagine that it is actually not worthwhile. When I enter a mature large company, my contribution is only a drop in the ocean. I want to make progress. It is extremely difficult to go, and the real opportunities are still in startups or small and medium-sized companies. Of course, these things need personal experience to feel. It is difficult to appreciate when you are young and vigorous. You just feel that the choice you have made is right. Practice and discern. True knowledge.
Hope this helps.
Let me answer based on my own experience! I am engaged in Java development. Before joining Alibaba, I worked in other companies for four years. In the first two years, the most done thing was directly translating business into code, and the most done thing was curd. Engineering and structured design do not exist at all, and performance, scalability, ease of use, and maintainability are not considered. Just implement the function, and use the object-oriented language to process-oriented programming. (Because everyone does this) Mainly because I just graduated and worked on the ERP system in this company, and I just ignored the functions if they were usable. In the next two years, I changed to an e-commerce company. This was also a sinkhole. The code was almost the same as a mountain. When I went in to do inventory, the first thing I did was to get familiar with the business and then restructure it. Almost all the people who have done this before are gone. Model abstraction, domain layering, and module layering make me feel good after a quick operation. But after two years of superimposing the business, it was almost ruined. It is understandable to sacrifice some for the rapid iteration of the business. Then I left [face covering].
When I entered Alibaba, I was engaged in mid-end development. What I like to do most here is to reinvent the wheel. Whatever I do, I have to pay attention to high availability, reusability, scalability, maintainability, and readability... When writing code, I usually use such an interface. When writing an interface, I usually turn on the fuse and downgrade switch first. , distributed locks, and then caching, and then the business uses domain model + generalized abstract model + factory design pattern + strategy pattern. After this operation, in order to support scalability, SPI extension points must be customized to provide expansion. The code of a business function is completely separated. However, the quality of projects and code has indeed improved a lot compared to previous companies. I can only say that the environment has a great impact.
Although I have never been to a big factory, I still want to give a strong answer. After all, many friends I know work or have worked in BAT.
My opinion is: BAT has many great people, as well as ordinary people. Although not all of them can reach the admirable technical level, after all, the platform is high, so the vision will become broader; code The requirements are more stringent, so ordinary programmers will be forced to become better; if there are many talented people around them, ordinary programmers will also be affected and improve faster.
I happened to read an article today about my interview experience at Alibaba. I would like to share it with you to see how far behind I am from getting into Alibaba.
Java multi-threading
The principle of thread pool, why should we create a thread pool?
Thread life cycle, when will a zombie process appear?
What is thread safety and how to achieve thread safety?
How many thread pools are there to create? Core parameters? How to reasonably configure the size of the thread pool?
Synchronized, volatile differences, synchronized lock granularity, simulated deadlock scenarios, atomicity and visibility;
JVM related
JVM memory model, GC mechanism and Principle; what are the two types of GC? When will Full GC be triggered?
There are several types of classloaders in the JVM. Why are there multiple types?
What is the parent delegation mechanism? Introduce some operating processes and the benefits of the parent delegation model; (I really don’t know this...)
Under what circumstances do we need to destroy the parent delegation model;
Common JVM tuning What are the best methods? Which parameter can be adjusted specifically and to what value?
JVM virtual machine memory division, class loader, garbage collection algorithm, garbage collector, how the class file structure is parsed;
Java extension
Red The implementation principles and application scenarios of black tree;
What is NIO? What kind of scenarios is it suitable for?
What improvements does Java9 have over Java8?
What is the internal data structure of HashMap? How is the bottom layer implemented?
Let’s talk about the use and implementation of reflection. Is reflection very slow? Should we avoid using reflection in our projects?
Let’s talk about the scenarios and implementation of custom annotations;
p>
The difference between List and Map, the difference between Arraylist and LinkedList, the difference between ArrayList and Vector;
Spring
The implementation principles and scenarios of Spring AOP; (Application scenarios are very important)< /p>
The scope and life cycle of Spring beans;
What improvements has Spring Boot made over Spring? What improvements has Spring 5 made compared to Spring 4; (Ashamed, we are still using Spring 4 and have not cared about higher versions)
What is Spring IOC? What are the advantages?
SpringMVC, dynamic proxy, reflection, AOP principle, transaction isolation level;
Middleware
Dubbo complete one-call link introduction;
How many load balancing strategies does Dubbo support?
The Dubbo Provider service provider wants to control the upper limit of concurrent requests. How to do it?
How many configuration methods does Dubbo support when starting up?
How many message middleware products do you know? An introduction to the advantages and disadvantages of each product;
How does message middleware ensure message consistency and how to implement a message retry mechanism?
Introduction to the circuit breaker mechanism of Spring Cloud;
Comparing Spring Cloud with Dubbo, in what scenarios should Spring Cloud be used?
Database
Introduction to locking mechanism: row lock, table lock, exclusive lock, shared lock;
Business scenarios and implementation methods of optimistic locking ;
Introduction to transactions, understanding of distributed things, what are the common solutions, what are two-phase submission and three-phase submission;
There are three main ways for MySQL to record binlog model? What are the pros and cons of each mode?
MySQL lock, pessimistic lock, optimistic lock, exclusive lock, shared lock, table-level lock, row-level lock;
The principle of distributed transaction is 2-phase commit, Synchronous, asynchronous, blocking and non-blocking;
Database transaction isolation level, MySQL default isolation level, how Spring implements transactions,
JDBC
How to implement transactions, nested transaction implementation, and distributed transaction implementation;
The entire analysis of SQL, principles of execution process, and SQL row conversion;
Redis
Why is Redis so fast? What are the problems with using multi-threading in redis?
What data structures does Redis support?
Problems with Redis jump tables;
How can single-process and single-threaded Redis achieve high concurrency?
How does Redis use Redis to implement distributed locks?
How is the atomicity of Redis distributed lock operations implemented internally in Redis?
What do you think after reading it? Is there any gap between your own requirements and those of BAT?
Anyway, I think it is a bit difficult to pass the interview. I have not understood many features of the new version of the framework. It seems that I will have to take time to learn some before the year.
Most ordinary programmers in large companies such as BAT are too specialized and basically do well in a certain aspect. Their overall ability is far behind, but they think they can do anything.
Let’s put it this way, if we compare programmers to chefs.
Programmers in ordinary companies are basically chefs in various restaurants and can cook all kinds of dishes.
BAT is the royal dining room. Programmers have seen all kinds of dishes, but basically they can't cook a single dish. Many people are the green onion chopping crew of the Royal Kitchen Logistics Department.
How far is the programming level of ordinary company employees from Alibaba? It is nonsense to say that every programmer at Alibaba is awesome. Ordinary companies also have many awesome programmers. This in itself is not conclusive.
Programmers in companies like Alibaba should be lucky enough to encounter the development of large-scale Internet software, such as architecture design, scene design, etc. This should be possible for many programmers. It opens your eyes and you can also exercise yourself by participating in it. Similarly, although many large software companies do not have scenarios like Alibaba, they also have their own special application designs and scenarios that cannot be seen in Alibaba.
As for the coding level of a single programmer, there may be no difference at all between programmers in ordinary companies and Alibaba. In ordinary companies, software is made strictly according to specifications, processes, and testing. When you enter, you can also meet experts leading projects and mentoring from experts. After hearing what you have heard and seeing, and working hard to practice, these programmers will The level cannot be said to be worse than that of Alibaba programmers. Of course, Alibaba's reputation is nothing more than the strict selection when entering. The foundation of these programmers is good, but to truly be proficient, you have to rely on your own efforts in addition to the environment.
But there are still some differences between programmers in large companies and programmers in small companies. People in small companies may be exposed to very few projects, whereas like Tiger Balm, they are exposed to everything and can do some, but the depth is not enough. For example, if a programmer in a small company is engaged in Java coding today, he may be engaged in PHP for the next project, and then Python for the next project. Today he is a program, and every two months he may be the designer or leader of the next project. Wait until it's possible. But precisely in a certain aspect of coding, they are not as expert and skilled as programmers from some large companies.
In addition, the development processes and specifications of small companies are not enough. Some even just need to be built and run, so the rules and regulations are not as standardized as those of large companies. Some even go to customers and go online without strict testing, allowing customers to be guinea pigs and fail every time.
So as a programmer, it is best to start going to a large company to learn and practice standardized software development, which is very beneficial. As for whether you are Alibaba, it is not necessarily true. It is certainly good to be in Alibaba. When it comes to coding level, most of it still depends on your own efforts. In particular, cultivating thinking ability, basic knowledge, being well-informed, and practicing more and communicating are essential to improve your coding ability. There are indeed talented programmers, but the vast majority of programmers are not even talented. Most of them just spend more time on the above items.
In terms of ability, BAT programmers are far superior to programmers from small companies; don’t believe that programmers from small companies have to do everything, so big companies are just small screws, deceiving themselves and others. That's it; programmers in large companies are more talented than programmers in small companies. Technology relies on talent + hard work. Talent is far more important than hard work. If you don't believe it, you are stupid.
Three years in Alibaba The old man said something. The main thing is to be able to gain and see experiences, scenarios and challenges that small companies cannot give you
Speaking of computer programming, it is really a headache for people who learn computers. Every day Programming work requires us to face all kinds of letters and all kinds of special symbols. Most people can only be confused when they see them. Every programmer has good skills and low skills, and programmers also face great difficulties when choosing a company.
There is a common phenomenon among people looking for jobs in society nowadays. People who work in small companies want to work in large companies, and people who work in large companies want to work in small and medium-sized enterprises. Every programmer wants an opportunity to express himself and put the knowledge he has learned to use. Programmers with stronger abilities go to large companies, and those with slightly different abilities go to small and medium-sized enterprises. However, the development of the two in their respective companies is different.
Programmers working in small and medium-sized enterprises may have greater room for development in the company. There are many excellent programmers in large enterprises, just like Alibaba. It is possible that in this team, their own Ability cannot be used well. One thing needs to be clear. People with high skills will become better and better together. They each have their own characteristics. They will learn from each other and improve each other, and they will be more motivated to move forward. Programmers in ordinary companies have less room for self-improvement and are not as high-level as programmers in companies like Alibaba.
Large companies also have high requirements for programmers. The difficulties these programmers have to face are also very great, forcing themselves to improve their own abilities. If two programmers with matching skills go to In an ordinary enterprise, if one goes to a large company like Alibaba, after working for a period of time, the number of programmers working in Alibaba will far exceed that of programmers in ordinary companies. Although programmers from large companies want to go to small and medium-sized companies, it is a greater loss to them.
For more high-quality content, please continue to pay attention to Meike.com~~
Programmers in large companies do exceed programmers in small companies in terms of code expertise and accuracy. They often delve deeply into a certain aspect of technology and are meticulous and impeccable in code practice. Programmers in small companies are not as good as bat programmers in terms of professionalism and accuracy. Because of the general environment, it is impossible for one programmer to be responsible for the code of a certain module. They often work as two or three people by one person. Complex businesses that they often encounter need existing Frameworks and technologies cannot solve it. You need to combine multiple technical frameworks and knowledge points to solve complex businesses.
So they are all programmers. The environment and platform have created different coding styles and focuses among programmers. However, in terms of work attitude and concentration on technology, programmers in large companies are undoubtedly better. conditions to develop these good habits. As a programmer, you should still go to big factories to experience different corporate cultures and higher-quality employees throughout your life. Your own experience and depth will also be different.
From a purely technical point of view, large companies are incomparable to small companies.
The systems of large companies are more complex and the research is more in-depth.
For example, high concurrency, big data,
Small companies do not have such large traffic and data volume, so there is no way to study it.
A large company has N machines in one system.
In order to save resources, we must study how to maximize machine capabilities, optimize code, and optimize logic.
A small company may have one or two machines to support a system, and it can run normally as long as there are no bugs.
The non-technical aspect depends on the company’s business capabilities.
Personal opinion,