Front-end is no longer 5 years ago when the beginning of the popular trend of HTML + CSS + JS +jquery, now you need to fully understand the front-end development at the same time, but also have will be online, sustainable, closed loop, automation, semantic, packaging…… Such concepts can be skillfully applied to a job, and even employers want you to understand and master the related concepts of deep learning and machine learning. During the interview process, departments cross-interviewed and asked questions about the back end.
If you want to earn 2.5W + monthly salary, you should be able to master all of the following knowledge and develop back-end interfaces and data processing (Node, Java, c……) Must master a) experience. This article is a combination of my own work and interview experience, as well as for those who want to make a salary of $2W + 1-3 years of newbies.
It is important to note that all the big clubs would be carried out in accordance with the working experience in your current + 1, + 2 difficult ascension (suppose you work for a year, according to three years working experience in recruitment, at the same time two or three surface will be carried out in accordance with the your project experience preferred screen) so the start is the Internet company’s students accounted for a big advantage, some friend work in state-owned enterprises one to three years, Lack of project experience leads to lack of competitiveness. There is no other way. It is suggested to jump out of your comfort zone as soon as possible, and then you will experience different front-end development. Here are some of the most common things you should know about a job interview:
Learning materials
Public account: Zhongtai Architecture Home
Question of the day: Topic portal
Front-end eBooks: e-books
Basic knowledge
1, the mock
In the separation of front and back end development, Mock data is an important link in the front-end development, strong front end can not rely on the backend interface, only need to agree on the corresponding data interface, the front end through a Mock simulation data, the development of the backend interface development is completed, you just need to switch the corresponding interface address, can guarantee the synchronous development of project.
Local content: Define your own interface path in the index file in the mock folder, and generate js files for the corresponding business modules in the service folder in the root directory. The interfaces of corresponding microservices are well matched in the file. Exposed for business function calls.
2. Network request coding representation
Start with whether or not you care about the contents of the Request head. Generally focus on statusCode and Method. Focus 200,304. At the same time after mastering the basis of the hope to pay attention to the content of the file upload (Baidu asked the implementation of breakpoint continuation)
200: 'The server successfully returned the requested data. ',
201: 'Creating or modifying data succeeded. ',
202: 'A request has been queued in the background (asynchronous task). ',
204: 'Deleting data succeeded. ', 304:'Negotiated cache'
400: The server did not create or modify data. ',
401: 'User has no permissions (wrong token, username, password). ',
403: 'The user is authorized, but access is forbidden. ',
404: 'The request was made for a nonexistent record, and the server did not act on it. ',
406: 'Requested format not available. ',
410: 'The requested resource is permanently deleted and will not be retrieved. ',
422: 'A validation error occurred while creating an object. ',
500: 'Server error, please check server. ',
502: 'Gateway error. ',
503: 'Service unavailable, server temporarily overloaded or maintained. ',
504: 'Gateway timed out. '
Copy the code
Write a variety of new front-end file upload guide, from small pictures to large file breakpoint continued
3. Axios workflow
Axios is an HTTP client based on Promise for browsers and NodeJS. It is essentially a wrapper around native XHR, but it is an implementation version of Promise that complies with the latest ES specification and has the following characteristics:
1. Create the XMLHttpRequest in the browser
2. Support the Promise API
3. The client supports CSRF prevention
4. Provides some interfaces for concurrent requests (important, convenient for many operations)
5. Create HTTP requests from Node.js/Java
6. Intercept requests and responses
7. Transform request and response data
8. Cancel the request
9. Automatically convert JSON data
Prevent CSRF: make every request you make carry a key from the cookie. According to the same origin policy of the browser, the fake website cannot get the key from your cookie. In this way, the background can easily identify whether the request is a misleading input from the user on the fake website, so as to adopt the correct policy.
/**
*
*
* @param {*} params mmsi
* @param {*} callback
*
*
*/
getship_cargo_detail:function(params,callback){
axios.get(server.portAddress+"newshipcargo/newship_pos_detail",{params})
.then(function(res){
callback(res.data);
})
.catch(function(error){
console.log("get_ship_cargo_data_error"); }, // call shipCargoServer.getship_cargo_detail ({mmsi:mmsi},data=>{if(data){
this.setState({
pageNumber:data.,,,,,,,
})
}
})
Copy the code
4. Comparison of ElementUI (ElementReact) with ANTDesign and ICE-work
The reason to use Element is by learning from the factory Element
Its design principles are compatible with three major frameworks (each with its own implementation) :
- Vue Element
- React Element
- Angular Element
The UI as a whole is the same, but the implementation is different in different frameworks and the API changes are small. If you need multiple frameworks to maintain the same style, Element is a good choice. To reduce learning of the changed project API
Antdesign is a powerful tool for learning and imitating its syntax and code style, based on support from the React component library. The only downside seems to be the lack of some online preview functionality in current use, most recently with Antdvue
The most interesting thing about Flying ice is that it lets P7 answer your questions in real time (if you are mixed into the group). 500+ ICE users ask any level of front-end questions in the React component in the group. Fusion is used for the base components, and 40+ business components are developed based on business features
Playground: Reusable template for quickly demonstrating the effects of the business.
5, WebRequest
The API allows the plugin to monitor Chrome web requests and even redirect them. For example, temporarily replace the hotfix branch image
// background.js
chrome.webRequest.onBeforeRequest.addListener(
function (details) {
const url = details.url;
if (url === 'http://n.sinaimg.cn/news/1_img/upload/7b577cec/576/w778h598/20180820/lSSg-hhxaafy9194151.jpg') {
console.log(22)
return {
redirectUrl: 'https://github.com/welearnmore/chrome-extension-book/raw/master/doc/images/logo_google_developers.png'}}return {cancel: false}
},
{urls: ["<all_urls>"[]},"blocking"])Copy the code
6. Ways to reduce reflow
Don’t change the STYLE of the DOM line by line. Instead, define the CSS class in advance and change the DOM className:
Var left = 10, top = 10; el.style.left = left +"px"; el.style.top = top + "px"; // El.className +=" theclassname";
Copy the code
Take the DOM offline and modify it. Such as:
-
A > Manipulate the DOM in memory using the documentFragment object.
-
B > First give the DOM to display: None (once repaint) and then change it however you want. Like, 100 times, and then it shows up.
-
C > Clone a DOM node into memory and make any changes you want. When you’re done, swap it with the online one. Do not put DOM node attribute values in a loop as variables in the loop. Otherwise this will result in a lot of reading and writing of the node’s properties. Modify the lower-level DOM nodes as much as possible. Of course, changing the DOM nodes at the bottom of the hierarchy can cause large reflows, but it can also have small effects.
-
Use fixed or Absoult positions for animated HTML elements, so modifying their CSS will greatly reduce reflow. Never use a table layout. Because a small change can cause the entire table to be rearranged.
Reference:
Human authentication – SegmentFault
Backflow and Redraw: Do you really understand backflow and redraw
7. Microtasks and macro tasks with Eventloop
It is important to remember that promise is a synchronous task before.then, and.then/.catch/.finally is a microtask. After a synchronous task is executed, promise is the first to be executed in asynchrony
Execution order: Synchronous task –> micro task –> macro task
Micro task, macro task and event-loop – Jia Shun name – Blog Park
8. Implicitly convert all cases
!!!!! [] == true // Result is true [] == true // result is false! [] == [] // result is true
For [] == true and!! []
Implicit conversion is the most authoritative reference manual
memory
[] is converted to a string""/ / String ([]) returns""[] to a Number is 0 // Number([]) returns 0. [] to a Boolean value istrue/ / a Boolean return ([])true
true1 // Number(true) returns 1false0 // Number(false) returns 0Copy the code
Refer to all implicit conversion rules
9 webstorage.
Focus on sessionStorage and localstorage data storage mechanism and processing mechanism.
What is WebStorage?
10, how to use sessionID to identify user status
Put the cookie into the response header with the corresponding sessionID and send a request to the back end through POST. The back end returns the result that the user’s unique sessionID matches with the front end, so there is no need to create a new sessionID. If there is no match, a new sessionID needs to be created. Due to the stateless nature of HTTP, the Web container generates a sessionID to identify a user in order to obtain session information for that user. Possible causes for a new sessionid:
This is the first request from a new user. There is a logic on the back end to clear the session. The front end does not send the session ID to the back end in a cookie or other agreed place. The backend service does not do session synchronization.
11. OAuth2 principle and application
OAuth2.0 is a continuation of the OAuth protocol, but is not backward compatible with OAuth1.0, which means that OAuth1.0 is completely abolished.
Application Scenarios:
Native APP authorization: App login request background interface. For security authentication, all requests carry token information. If login authentication and request background data.
Front and back end split single page application (SPA) : Front and back end split framework, front end requests background data, requires OAUTH2 security authentication, such as vUE, React the latter H5 app development.
Process:
(A) After the user opens the client, the client requires the user to grant authorization.
(B) The User agrees to authorize the Client.
(C) The client applies for a token from the authentication server using the authorization obtained in the previous step.
(D) After authenticating the client, the authentication server confirms that it is correct and agrees to issue the token.
(E) The client uses the token to apply to the resource server for obtaining resources.
(F) The resource server confirms the token and agrees to open the resource to the client.
12. Front-end use of socket. IO
Low latency bidirectional communication between client and server. Client applications can use any SocketIO official client library of Javascript or any compatible client to establish a permanent connection to the server.
The react framework uses http://socket.io as a dependency and tries to implement a chat room:
testconnect=()=>{
let socket = sockjs("ws://localhost:3900", {
transports: ['websocket'}) // / continue trying to reconnect socket.on('reconnect_attempt',()=> {
console.log("reconnect")
socket.transports = ['websocket'.'polling'.'flashsocket']; }); // Failed socket. On ('reconnect_error',(attemptNumber)=> { console.log(attemptNumber) }); // Connect successfully to socket.on('connect',()=>{console.log(socket.connected)})'connect_error', (error) => { console.log(error) }); // Connection validation socket.on('ping', (error) => {
console.log('ping_include')}); // Connect successfully to socket.on("connect".function(){
// console.log(socket.broadcast)
socket.emit('join',prompt('what is your nickname'));
$('#chat').css('display'.'block');
socket.on('announcement',(msg)=>{
if(msg){
console.log("announcement did right")
let li = `<li class="announcement">${msg}</li>`
$("#messages").append(li); }}) {// Add a method to get information $("#form").submit(()=>{
let inputan =$('#input');
console.log("submit success")
this.addmessage('me',inputan.val()) ;
socket.emit('text',inputan.val());
inputan.attr('value');
inputan.focus();
return false}) // Do not execute automatically, execute socket.on('text'Addmessage =(from,text)=>{if(text){
let li = `<li class="message"><b>${from}</b>:${text}</li>`
$("#messages").append(li); }}Copy the code
13. Function and core configuration of Webpack
There are several core concepts that need to be understood in a Webpack configuration: Entry, Output, Loaders, Plugins, and Chunk
-
Entry: Specifies the Entry module that WebPack starts building from and calculates directly or indirectly dependent modules or libraries
-
Output: Tells Webpack how to name the Output file and the Output directory
-
Loaders: Since WebPack can only handle javascript, we need to process some non-JS files into modules that WebPack can handle, such as sass files
-
Plugins have a great ability to process various types of files into modules that WebPack can handle. Plug-ins range from packaging optimization and compression to redefining variables in the environment. But it’s also the most complicated. For example, the UglifyJsPlugin plug-in is optimized for compression of JS files
-
Chunk: As a result of coding split, we can package some codes into a single Chunk, such as some common modules, to eliminate duplication and make better use of caching. Or load some function modules on demand to optimize the load time. In webpack3 and before, we used CommonsChunkPlugin to split some common code into a chunk and load it separately. In webpack4 CommonsChunkPlugin is deprecated and SplitChunksPlugin is used
reference
Webpack details – Nuggets
Webpack packaging principle analysis
Advanced (with the ability to hand lift a loader, plugins) :
Dry! 内 容 提 示 webPack plugin (tapable + Webpack process)
Hand by hand teach you a Webpack Loader
14. Comparison between == and ==, usage of ===
=== = is used when comparing strings.
Authoritative explanation:
Sort out the tangled relationships between equality (==) and congruence (===) in JS
15. Application scenarios for closures
Function stabilization, which fetches the correct value by executing the function immediately and asynchronously through the loop
Authoritative answer:
Application of closures in real scenarios
The whole process of agile development
Each iteration must complete the following five steps in turn.
- Requirements Analysis
- Design (design)
- Coding
- Testing
- Deployment and Evaluation (Deployment/Evaluation)
Each iteration lasted approximately 2 to 6 weeks.
Introduction to Agile Development – Ruan Yifeng’s weblog
17, webpack + glup/FIS
Gulp is a stream-based automated build tool, but it does not include modularity. If required, external files such as require.js are required. Webpack is an automated module packaging tool, which itself is modular, and also has the function of compression and consolidation.
【 thoroughly understand 】
Difference between Gulp and Webpack
Comparison of the three
Positioning is different, WebPack positioning is a packaging tool, modular. An automated tool is better for something like gulP. Fis3 is directly positioned as a full-featured tool that addresses performance optimization, modularity, automation, and even code specification, deployment, and more, according to the official documentation.
Personally, I like WebPack, which can be used flexibly with other tools and has a powerful ecosystem. Of course, rollup is probably the most popular one recently, because it packs smaller files. Glup + WebPack Automatic deployment reference:
glup+webpack
Git git commands
Most basic to refer to my own article advanced edition to see this article
Git basic operation, one article is enough!
Jar package to view project progress
Jar directory to execute:
nohup java -jar xxx.jar > people.log 2>&1 &
Copy the code
Run the jar package and write the package log to people.log
tail -f people.log
Copy the code
– View run logs
The difference between MVC and MVVM
mvc
Model = Model
View
Controller (Controller)
Simple to understand: The view requests data, sends the request to the controller, the controller sends the request to the model, the model finds the data, passes it to the controller, and the controller passes it to the view for rendering.
mvvm
Model stands for data Model
View stands for UI View
The ViewModel listens for changes in the Model and controls the update of the view. The view requests data and sends the request to the controller. There is a listening mechanism at both ends of the controller to directly call the data of the model. One end changes all the changes
The MVVM advantages
MVVM is much simpler than MVC. It not only simplifies the dependency between business and interface, but also solves the problem of frequent data updates, eliminating the need to manipulate DOM elements with selectors. Because in MVVM, the View is unaware of the Existence of the Model, and the Model and ViewModel cannot observe the View, this low-coupling pattern improves code reusability
Definition of bidirectional binding
In general, only UI form controls have two-way data binding; non-UI form controls have one-way data binding. One-way data binding means that changes in M can be automatically updated to the ViewModel, but changes in ViewModel need to be manually updated to M (by setting event listeners for form controls). Changes in M can be automatically updated to ViewModel, and changes in ViewModel can be automatically updated to M bidirectional binding = unidirectional binding + UI event listening. Bidirectional and unidirectional are only differences in the degree of encapsulation of the framework, and in essence they can be converted to each other.
Advantages and disadvantages: In the case of a lot of form interactions, one-way data binding has the advantage of easier data tracking management and maintenance, while the disadvantage is more verbose code. The advantages and disadvantages of two-way data binding are just the opposite to one-way binding.
Understand the use of MVVM in React and VUE
Mapping between MVVM mode and React
- M odel) : If React integrates redux + React-redux, then the business logic and local data in the components can be decoupled and stored separately as M layer. For example, the business logic is placed in the Reducer and actions.
- V(IEW)-M(odel) : JSX in the corresponding component, which is essentially the syntactic sugar of the Virtual DOM. React maintains the Virtual DOM and performs diff operations on it. React renders the Virtual DOM as the real DOM in the browser
- View: the real DOM generated by the framework in the browser based on the virtual DOM (we don’t have to write it ourselves) and the CSS binder we wrote for the JSX commands and bound data, such as className={this.props. XXX}, {this.props
HTML semantic, CSS modular
semantic
It is to understand the content to be expressed as much as possible, choose the appropriate label, and convert the content into a language that the browser knows, and convey it to the user through the browser. In this sense, we are more like “translators”.
No one outside of a professional is going to look at whether or not we’re using semantic tags and HTML tags are not enough to express all the possible semantics and semantematization is going to require some extra code
HTML5 added several tags, more to supplement the current HTML tag semantic deficiency, this can also be seen that semantic is a direction of future development, of course, the greater goal is to achieve a unified standard, semantic is only a method used for this goal. It may take quite some time, and we are going through that process.
modular
Modularity is to reduce cyclic dependence, reduce coupling and improve the efficiency of design. To do this, we need to have a design rule under which all modules are designed. Good design rules classify the coupling intensive design parameters as modules and divide the work tasks accordingly. Modules interact with each other through a fixed interface (so-called visible parameters), while internal implementations (so-called hidden parameters) are left to the module development team.
Purpose of program modularization:
1. Reduce circular dependencies
2. Reduce coupling
3. Improve design efficiency
Principles of CSS modularity
Separate structure and presentation Separate container and content
22. Standardized javascript
ECMAScript, the core of JavaScript, describes the language’s syntax and basic objects; DOM describes the methods and interfaces used to process web content; BOM describes the method and interface for interacting with the browser.
23. Summary of front-end compatibility problems
Browser compatibility issues solution · Summary
24. Front-end performance optimization
Front-end performance optimization of the common means – digging gold
25. Use of loadash
Ten common utility functions in Lodash
26. Use of front-end preprocessor SASS
Sass is an auxiliary tool to enhance CSS. It adds advanced functions such as variables, nested rules, mixins, inline imports and so on on the basis of CSS syntax. These extensions make CSS more powerful and elegant. Using Sass and Sass’s style libraries, such as Compass, can help you better organize and manage style files and develop projects more efficiently.
CSS preprocessor sASS usage – Nuggets
27. Optimal solution of Leetcode algorithm
If you can’t find the answer you’re looking for, look it up
Nine chapters on algorithms to help More Chinese people find good jobs: Interview skills taught online by silicon Valley’s top IT engineers
It is very important to write three kinds of functions
KeLi,
An article to understand toString() and valueOf() – HTML/CSS language column: html.css – Red and black alliance
React source code summary
React source code learn summary
React doesn’t have that many advantages, but it solves some of the most difficult interview questions:
The React essence! A full summary (rush) – Nuggets
Flex layout, position, vertical horizontal center three kinds of front-end knowledge must be asked
FLEX layout
In CSS, position: Absolute, float, display: inline-block all achieve the same effect. What is the difference?
“Dry” CSS with variable width and height vertical and horizontal center (most 9 types)
31. Solutions for crushing floating point data
An array that is too long can’t be converted by Number or parseInt. This will cause errors. Use BigInt instead. To compute a binary operation, add n to the other term of the binary operation. Examples and explanations are included:
The difference between BigInt and Number
32, Intermediate front-end all handwritten content
- Stabilization,
- Throttling depth copy array out of order,
- Array de-duplication (various time space complexities)
- Array filter Array flat
- Write call, bind, and apply by hand (and understand the differences)
- Eight kinds of inheritance and the characteristics between them
- Implement instanceof
- The process of implementing new
- lazyman
- The realization of the json
- Caulization of a function
- Promise, promise.all, promise.retry (large manufacturers do not rule out handwritten Ajax packaging (Baidu), the top (promise.retry) a little bit changed)
Reference Address:
Summary of “Winter” three years of experience in the front end of the interview (including toutiao, Baidu, Ele. me, Didi, etc.) handwritten questions (I) – digging gold
Summary of “Winter” three years of experience in the front end of the interview (including toutiao, Baidu, Ele. me, Didi, etc.) handwritten questions (2) – digging gold
Fulfill promise. All method – Nuggets
Dachang often asks React family barrel
Must master, must master, must master!
The react – the router:
Basic use of the React-Router
Redux, react – story:
An article summarizing Redux, React-Redux, Redux-Saga – Nuggets
Expand (it is strongly recommended to write by hand), several large factories are asking:
React router makes react easier to use — Nuggets
Three minutes to remember the prototype, prototype chain, inheritance
function Animal(){
this.type = "animal";
}
Animal.prototype.getType = function() {return this.type;
}
function Dog(){
this.name = "dog";
}
Dog.prototype = new Animal();
Dog.prototype.getName = function() {returnthis.name; } var xiaohuang = new Dog(); // Xiaohuang.__proto__ === dog.prototype dog.prototype.__proto__ === animal.prototype.prototype === Object.prototype Object.prototype.__proto__ === nullCopy the code
35, explain Promise and Promise. All and expand
What is promise? Promise is a solution to asynchronous programming that is more reasonable and powerful than traditional callback functions and events. A Promise is simply a container that holds something (usually an asynchronous operation) that will end in the future. Syntactically, a Promise is an object from which to get messages for asynchronous operations.
Traits:
One: The object status is not affected by external influences
Two: Once the state has changed, it cannot be changed.
Disadvantages:
Once a promise is created, it is executed immediately
Use:
const newPromise = new promise((resolve,reject)=>{
if(success){
resolve()
}else{
reject()
}
}).then((data)=>{console.log(data)},(error)=>{console.log(error})
.catch(null,(error)=>{console.log(error)})
Copy the code
The then method can take two callback functions as arguments,
The first callback is called when the Promise object’s state becomes Resolved,
The second callback is called when the state of the Promise object changes to Rejected.
The second function is optional and does not need to be provided.
The catch method is an alias for. Then (null, Rejection) and is used to specify the callback when an error occurs.
Promise. What is all?
The promise.all (iterable) method returns an instance of a Promise that is resolved when all promises in iterable arguments are “resolved” or when the arguments do not contain the Promise; If a promise fails (Rejected), the instance calls back (reject) because of the result of the first failed promise.
result = arr.map(i => { ... Const rowPromise = filtered. Sort ({create_time: -1}) //-1 descending 1 ascending. Skip (offset > -1? offset : 0) .limit(limit <= 200000 ? limit : 200000)
.toArray()
return rowPromise
})
promise.all(result)
.then(total => resolve(total))
.catch(err => reject(err))
Copy the code
The result passed in in promise.all must be an array. An instance of a Promise is returned, and the mechanism is the same as a promise
Detailed promise.all&promise.race reference
Magic Aym: The perfect interview answer to ask Promise
36. Summary of differences between Export and export default in ES6
- Export default can have only one module, but export can have multiple modules.
- Attributes or methods exported by export can be modified, but those exported by export Default cannot be modified.
- export var e1=’… Export default var e2=’… ‘is illegal (as is let and const).
- Export default can be directly exported with an identifier, for example, export default e2.
- Export To export a declared representation, you must use {}, such as export {e1}. Note that {} does not declare an object.
- In ES6, the attributes or methods exposed by modules through export and export Default are not ordinary assignments or references, but pointer-like bindings to the identifiers defined inside the modules.
- For an exported property or method, it doesn’t matter where it was exported or when it was imported. What matters is the current value of the binding at the time it was accessed.
ES6 Export && Export Default Differences
37. Briefly describe the basic syntax of Generator functions
Generator functions can be understood in several ways. Syntactically, the Generator function is a state machine that encapsulates multiple internal states. Executing Generator returns an traverser object.
The function keyword and the function name are separated by a sign (* can be written anywhere between them).
Feature 2: Functions have yield expressions that define different internal states
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator();
hw.next()
// { value: 'hello'.done: false }
hw.next()
// { value: 'world'.done: false }
hw.next()
// { value: 'ending'.done: true }
hw.next()
// { value: undefined, done: true }
Copy the code
Next () returns a pointer to the internal state instead of the result. Each time the next method is called, the internal pointer executes from the head of the function or where it was last stopped until the next yield expression (or return statement) is encountered. In other words, Generator functions are executed piecewise, yield expressions are paused tokens, and the next method can resume execution.
function* gen() {
yield 123 + 456;
}
Copy the code
In the above code, the expression 123 + 456 following yield is not evaluated immediately, but only when the next method moves the pointer to this line.
Yield expressions have similarities and differences with return statements. The similarity is that you can return the value of the expression immediately following the statement. The difference is that at each yield, the function suspends execution and continues backward from that location the next time, whereas a return statement does not have location memory. A function can execute only once (or one) return statements, but can execute multiple (or multiple) yield expressions. A normal function can only return one value because it can only return once; Generator functions can return a series of values because there can be any number of yields.
for… Of loop, extension operator (…) , destruct assignment, and array. from methods are called inside the traverser interface. This means that they can both take an Iterator returned by a Generator function as an argument
function* numbers () {
yield 1
yield 2
return3 yield 4} // Extension operator [...numbers()] // [1, 2] // array. from array. from(numbers()) // [1, 2] // destruct assignmentlet[x, y] = numbers(); x // 1 y // 2 // for... Of circulationfor (let n of numbers()) {
console.log(n)
}
// 1
// 2
Copy the code
Refer to Teacher Ruan Yifeng
The front of
WeChat core 500 people: in the same group from time to time there will be a sponsor to send books activities, at the same time with tencent cloud + community cooperation (glad holiday welfare), senior Daniel regularly push BAT companies face with source code analysis, the platform and recommend excellent articles, more push job-hopping consultation, video sharing and learning materials article PDF via a network backup resources and so on welfare. Join us for progress.
If there are too many people in the group, scan the QR code to add customer service lime, and note “add group” to join us.
Updated continuously ~~~
Public Id: Andh666[Home of The Central Taiwan Architecture]
Welcome to communicate and make progress together.
For those who are not clear in their career planning, I have sorted out a career planning manual for your reference. Enrich oneself unwilling to be ordinary
Dahu an: How do front-end engineers plan their career path