10. Relational database (relational Databases)
Relational databases have been criticized for their lack of extensibility in large-scale Web services, but the relational database is still the greatest achievement of computer technology in the last 20 years. The relational database has excellent performance in processing orders and company data. the core of a relational database is to represent data in records, records are stored in database tables, databases are searched and queried using query Language (SQL), and databases are associated with each data table. The standardized technology for databases (normalization) is about using the right way to store data to reduce redundancy and speed access.
9. Safety (Security) With the rise of hackers and the rise in data sensitivity, security becomes very important. Security is a generalized concept that involves authentication, authorization, and transmission of information. Verify that the user's identity is checked, such as requiring the user to enter a password. Authentication usually requires a combination of SSL (Secure Socket Layer), and authorization is important in the corporate business system, especially in some workflow systems. The recently developed OAuth protocol can help WEB services make the appropriate information available to the appropriate users. Flickr uses this method to manage access to private photos and data. Another security area is the network fortification, which relates to the operating system, configuration and monitoring. Not only is the network dangerous, any software is. Firefox is known as the most secure browser and still requires frequent release of security patches. Writing security code for your system requires a clear understanding of the potential problems.
8. Cloud Computing (Computing Cloud) RWW's recent article on cloud computing reaching for the Sky Through Compute Clouds speaks about how cloud computing can change the release of large-scale Web applications. Large-scale parallelism, low cost, and fast market input. since the invention of parallel algorithm, the first is the grid computing, Grid computing is the use of idle desktop computer resources for parallel computing. The most famous example is the Berkley university's [email protected] program, which uses idle CPU resources to analyze space data. Financial institutions also carry out a large scale implementation of grid computing for risk analysis. The free resources, coupled with the rise of the Java EE platform, ushered in the concept of cloud computing: Application Service Virtualization. Is that the app is running on demand and can change in real time and with the size of the user. The most vivid examples of cloud computing are Amazon's WEB services, a set of applications that can be called through the API, such as cloud Services (EC2), a database for storing large media files (S3), Indexing Service (SimpleDB), and Sequence Services (SQS).
7. Concurrency (Concurrency) concurrency is the easiest place for software engineers to make mistakes, which is understandable because we always follow linear thinking, but concurrency is very important in modern systems. concurrency is parallel processing in programs, and most modern programming languages contain built-in concurrency capabilities, in Java, referring to threads. The most classic example of concurrency is the "production/consumption" model, where producers produce data and tasks and put them into a worker's consumption or execution. The complexity of concurrency is that threads require frequent access to common data, each with its own order of execution, but with access to common data. Doug Lea has written one of the most complex concurrency classes and is now part of Core Java.
6. Caching (Caching) caching is an integral part of modern WEB programs, and caching is data retrieved from the database and stored in memory. Because the cost of direct database access is very high, it becomes necessary to retrieve the data from the database and access it in the cache. For example, you have a website that shows last week's best sellers, and you can put the bestseller list back in the cache from the data, without having to go to the database to read the data every time you visit. caching is a cost, and only the most common content can be placed in the cache. Many modern programs, including Facebook, rely on a distributed cache system called Memcached, which was developed by Brad Firzpatrick while working on a LiveJournal project, Memcached using the free memory resources in the network to establish a caching mechanism , the Memcached class library is available in many popular programming languages, including Java and PHP.
5. Hashing method (Hashing) The purpose of Hashing is to speed up access. If the data is stored in a sequence, the time from which an item is queried depends on the size of the data column. The hash method calculates a number as an index for each item, and in a good Hashing algorithm, the data is searched at the same speed. In addition to storing data, hashing is also important for distributed systems. The unified hashing method (uniform hash) is used to store data between different computers in a cloud database environment. Google's Indexing Service is the embodiment of this approach, and each URL is hashed to a specific computer. hash functions are complex, but there are ready-made classes in modern class libraries, and it is important to fine-tune the hashing method to get the best performance.
4. Complexity of the algorithm (algorithmic complexity) As for the complexity of the algorithm, software engineers need to understand a few things. First, the large O-Mark method (Big O notation); second, you should never use nested loops (loops inside a loop), you should use a Hash table, an array, or a single loop; third, now that excellent libraries abound, we don't have to dwell too much on the differences in the effectiveness of these libraries, We still have a chance to fine tune it. Finally, don't overlook the elegance and performance of algorithms, and write compact, readable code that will make your algorithms simpler and cleaner.
3. Layering (layering) It is easiest to use layering to discuss software architecture. John Lakos has published a book on large C + + systems. Lakos that the software contains layers, the book introduces the concept of the layer, the method is, for each software component, the number of components it depends on the number of the component can know its complexity. Lakos that a good software has a pyramid structure, that is, software components have a layer of accumulated complexity, but each component itself must be simple, a good software contains a lot of small, reusable modules, each module has its own responsibilities. In a good system, dependencies between components cannot be crossed, and the whole system is a variety of components stacked up to form a pyramid. Lakos is a pioneer in many aspects of software engineering, most notably the refactoring (code refactoring). Code refactoring refers to the need to constantly transform the code to ensure its structure is robust and flexible during the programming process. http://hovertree.com/hvtart/bjae/sko15s3g.htm
2. Conventions and templates (Conventions and Templates) naming conventions and base templates are often overlooked in programming patterns, but it is probably the most powerful approach. Naming conventions make it possible to automate software, such as the Java Beans framework, which uses simple naming conventions in getter and setter methods. The URL naming of the hovertree.com site also uses a unified format, such as http://hovertree.com/menu/java/, which takes the user to all pages labeled software. Many social networks use simple naming, for example, your name is JohnSmith, your avatar may be named Johnsmith.jpg, and your rss aggregation file name is probably johnsmith.xml. The naming convention is also used for unit tests, such as the JUnit Unit Test tool to recognize all classes that begin with test. What we're talking about here is that the template (templates) is not constructs in the C + + or Java language, we're talking about some template files that contain variables, and the user can replace the variables and output the final result. Cold Fusion is one of the first programs to use templates, and later Java uses JSP to implement template functionality. Apache recently developed a very useful generic template for Java, Velocity. PHP itself is template-based because it supports the Eval function.
1. Interface (Interfaces) The most important concept in software engineering is the interface. Any software is a model of a real system. How to model using a simple user interface is critical. Many software systems go to such extremes, lack of abstract verbose code, or excessive design that leads to unnecessary complexity. In many software engineering books, the agile programming written by Robert Martin is worth reading. The following methods will help you with the modeling process. First, get rid of the methods that are only possible in the future, and the more concise the code, the better. Second, do not always think that the former things are right, to be good at change. Third, be patient and enjoy the process. transferred from: http://hovertree.com/h/bjaf/8y1bkq4d.htmRecommendation: http://www.cnblogs.com/roucheng/p/chengxuyuan.html
Some concepts of software development