zoukankan      html  css  js  c++  java
  • 第六期的知识点

    1.volatile详解

    在应用程序中,volatile主要是被设计用来修饰被不同线程访问和修改的变量

    .volatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据

      int b=a; //语句2

      int c=a;  //语句3 

    语句2与语句3中都使用了a的值,优化器在语句3中引用a的值时,认为语句2中已经将a的值读到寄存器中了,并且在语句2与语句3之间没有对a进行修改,因此没必要再到内存中去读a的值,所以直接使用了寄存器中的值。但是如果在语句3执行前,产生了中断,中断恰好对a进行了修改。那么语句3取出来的值就有问题了 如果上面的全局变量a是被修饰为volatile的话,那么优化器就不能去优化语句3,要到内存中去重新取值

    2.同步和异步的区别(转)

    同步是阻塞模式,异步是非阻塞模式

    同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。  
    异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式

    打电话时同步 发消息是异步

    3.java的内存模型

    Java内存模型中规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存(可以与前面将的处理器的高速缓存类比),线程的工作内存中保存了该线程使用到的变量到主内存副本拷贝,线程对变量的所有操作(读取、赋值)都必须在工作内存中进行,而不能直接读写主内存中的变量。不同线程之间无法直接访问对方工作内存中的变量,线程间变量值的传递均需要在主内存来完成

     

    项目中使用的设计模式

     

    MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器

     

    Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
      通常模型对象负责在数据库中存取数据。

     

    View(视图)是应用程序中处理数据显示的部分。
      通常视图是依据模型数据创建的。

     

    Controller(控制器)是应用程序中处理用户交互的部分。
      通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据

     

    最典型的MVC就是JSP + servlet + javabean的模式

    单例模式在项目中的应用

    比如说我们在系统运行时候,就需要加载一些配置和属性,这些配置和属性是一定存在了,又是公共的,同时需要在整个生命周期中都存在,所以只需要一份就行,这个时候如果需要我再需要的时候new一个,再给他分配值,显然是浪费内存并且再赋值没什么意义,所以这个时候我们就需要单例模式(这个时候我们可以用来创建配置文件的类,完全可以使用单例模式)

     

    4.MySQL的性能优化

    1.当只要一行数据时使用LIMIT 1

    当你查询表的有些时候,你已经知道结果只会有一条结果,单因为你可能需要去fetch游标,或是你也许会去检查返回的记录数。
    在这种情况下,加上LIMIT 1 可以增加性能。这样一样, MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查找下一条符合记录的数据

    2.千万不要ORDER BY RAND()

    3.避免使用select*

    从数据库里读出越多的数据,那么查询就会变得越慢。并且,如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。

    4.永远为表设置ID

    我们应该为数据库里的每张表都设置一个ID作为其主键,而最好的是一个INT型(推荐使用UNSIGNED),并设置上自动增长的AUTO INCREMENT标志。

    5.使用 ENUM 而不是 VARCHAR ?

    ENUM 类型是非常快和紧凑的。在实际上,其保存的是 TINYINT,但其外表上显示为字符串。这样一来,用这个字段来做一些选项列表变得相当的完美。

    如果你有一个字段,比如“性别”,“国家”,“民族”,“状态”或“部门”,你知道这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是 VARCHAR。1

    6.尽可能的使用 NOT NULL

    除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议,请往下看。

    首先,问问你自己“Empty”和“NULL”有多大的区别(如果是INT,那就是0和NULL)?如果你觉得它们之间没有什么区别,那么你就不要使用NULL。(你知道吗?在 Oracle 里,NULL 和 Empty 的字符串是一样的!)

    7.选择一个正确的存储引擎

    MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。

    InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。他是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务

     

  • 相关阅读:
    在循环中正确找到对应DOM元素的索引
    JavaScript继承方式(1)
    JavaScript的写类方式(1)
    基于WF4的新平台地理模块的3D模块
    基于WF4的新平台流程模式(4)动态并发
    基于WF4的新平台流程模式(9)表单路由启动传入
    基于WF4的新平台地理模块的3D模块
    基于WF4的新平台流程模式(2)启动条件路由
    基于WF4的新平台表单设计器功能简介
    我的2010年
  • 原文地址:https://www.cnblogs.com/wnbahmbb/p/6517595.html
Copyright © 2011-2022 走看看