网站建设外包多少钱,wordpress版面混乱,十大传媒公司,区块链app定制1.volatile详解 在应用程序中#xff0c;volatile主要是被设计用来修饰被不同线程访问和修改的变量 .volatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化#xff0c;但有可能会读脏数据。当要求使用volatile声明变量值…1.volatile详解 在应用程序中volatile主要是被设计用来修饰被不同线程访问和修改的变量 .volatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化但有可能会读脏数据。当要求使用volatile声明变量值的时候系统总是重新从它所在的内存读取数据 int ba //语句2 int ca //语句3 语句2与语句3中都使用了a的值优化器在语句3中引用a的值时认为语句2中已经将a的值读到寄存器中了并且在语句2与语句3之间没有对a进行修改因此没必要再到内存中去读a的值所以直接使用了寄存器中的值。但是如果在语句3执行前产生了中断中断恰好对a进行了修改。那么语句3取出来的值就有问题了 如果上面的全局变量a是被修饰为volatile的话那么优化器就不能去优化语句3要到内存中去重新取值 2.同步和异步的区别(转) 同步是阻塞模式异步是非阻塞模式 同步是指发送方发出数据后等接收方发回响应以后才发下一个数据包的通讯方式。 异步是指发送方发出数据后不等接收方发回响应接着发送下个数据包的通讯方式 打电话时同步 发消息是异步 3.java的内存模型 Java内存模型中规定了所有的变量都存储在主内存中每条线程还有自己的工作内存可以与前面将的处理器的高速缓存类比线程的工作内存中保存了该线程使用到的变量到主内存副本拷贝线程对变量的所有操作读取、赋值都必须在工作内存中进行而不能直接读写主内存中的变量。不同线程之间无法直接访问对方工作内存中的变量线程间变量值的传递均需要在主内存来完成、 项目中使用的设计模式 MVC 是一种使用 MVCModel 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 还慢。他是它支持“行锁” 于是在写操作比较多的时候会更优秀。并且他还支持更多的高级应用比如事务 转载于:https://www.cnblogs.com/wnbahmbb/p/6517595.html