学习与总结重点讲义_第1页
学习与总结重点讲义_第2页
学习与总结重点讲义_第3页
学习与总结重点讲义_第4页
学习与总结重点讲义_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学习与总结一. 前端总结1.1. 动态<SCRIPT>节点加载解析时序问题Defer:是html4.0中定义的,该属性使得浏览器能延迟脚本的执行,等文档完成解析完成后会按照他们在文档出现顺序再去下载解析。也就是说defer属性的<script>就类似于将<script>放在body的效果。Async:是HTML5新增的属性,IE10和浏览器都是支持该属性的。该属性的作用是让脚本能异步加载,也就是说当浏览器遇到async属性的<script>时浏览器加载css一样是异步加载的如果一个script加了defer属性,即使放在head里面,它也会在ht

2、ml页面解析完毕之后再去执行,也就是类似于把这个script放在了页面底部。1.2. Javascript 放置位置html文件是自上而下的执行方式,但引入的css和javascript的顺序有所不同,css引入执行加载时,程序仍然往下执行,而执行到<script>脚本是则中断线程,待该script脚本执行结束之后程序才继续往下执行。所以,大部分网上讨论是将script脚本放在<body>之后,那样dom的生成就不会因为长时间执行script脚本而延迟阻塞,加快了页面的加载速度。但又不能将所有的script放在body之后,因为有一些页面的效果的实现,是需要预先动态的加

3、载一些js脚本。所以这些脚本应该放在<body>之前。所以,我认为script放置位置的原则“页面效果实现类的js应该放在body之前,动作,交互,事件驱动的js都可以放在body之后”收放侧边栏1.3. HTML页面数据强制每次服务器拉取<meta http-equiv="Expires" content="0"/><meta http-equiv="Pragma" content="no-cache"/><meta http-equiv="Cache-Cont

4、rol" content="no-cache,no-store"/>1) no-cache:强制缓存从服务器上获取新的页面2) no-store: 在任何环境下缓存不保存任何页面详见:1.4. IFRAME JS/CSS静态资源刷新策略1、 最外层html 用“href=xxx.html?requesttime=1468894235522”方式进行动态拉取;这样最外层HTML在刷新时将生成新的时间戳,从而能拉取到最新的innerHtml资源2、采用IFRAME 内层加入 1.3 节中强制每次服务器拉取数据方式;3、html 页面

5、JS/CSS等静态资源采用 localstorage JS 版本控制技术二. 数据库总结2.1. 数据库设计技巧设计数据库时需重点关注如下几点:2.1.1 ER实体关系图ER图提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。产品设计时需要多花力气在这个上面,这个梳理清楚清晰了,开发出来的产品才会有条不紊。2.1.2 表格设计 容量考虑例如某些表格可能每天有几万条的数据记录产生(如操作日志记录等),可以考虑将这些日志数据放到另外一个数据库实例中(不要因为流量问题导致其他业务不可用),同时要考虑将这些数据进行分表设计处理,防止爆表。 日志记录后台运营类

6、的表格,需要详细记录最后的操作信息,例如最后修改时间、操作人员等,如:2.2. 常用使用技巧2.2.1 SQL_CALC_FOUND_ROWS:加 limit 的 sql 语句,可以统计出全量数据来,例如:SELECT SQL_CALC_FOUND_ROWS * FROM t_commercial_channel_all WHERE show_report=a2.2.2 数据库新增用户并赋予权限GRANT ALL PRIVILEGES ON hz_pma.* TO 'ren_pma''%' I

7、DENTIFIED BY 'ren_pma123456' WITH GRANT OPTION; 创建 ren_pma 用户,密码为ren_pma123456,完全访问 hz_pma 数据库权限2.2.3 查看当前用户权限show grants for root%;2.2.4 Datetime/timestamp/int时间类型转化函数通常存储时间用datetime类型,现在很多系统也用int存储时间,它们有什么区别?本人总结如下:int(1).4个字节存储,INT的长度是4个字节,存储空间上比datatime少,int

8、索引存储空间也相对较小,排序和查询效率相对较高一点点(2)可读性极差,无法直观的看到数据,可能让你很恼火TIMESTAMP(1)4个字节储存(2)值以UTC格式保存(3)时区转化,存储时对当前的时区进行转换,检索时再转换回当前的时区。(4)TIMESTAMP值不能早于1970或晚于2037datetime(1)8个字节储存(2)与时区无关(3)以'YYYY-MM-DD HH:MM:SS'格式检索和显示DATETIME值。支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59'首先 DATETIME和TIM

9、ESTAMP类型所占的存储空间不同,前者8个字节,后者4个字节,这样造成的后果是两者能表示的时间范围不同。前者范围为1000-01-01 00:00:00 9999-12-31 23:59:59,后者范围为1970-01-01 08:00:01到2038-01-19 11:14:07。所以可以看到TIMESTAMP支持的范围比DATATIME要小,容易出现超出的情况.其次,TIMESTAMP类型在默认情况下,insert、update 数据时,TIMESTAMP列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。第三,TIMESTAMP比较受时区timezone的影响以及MYS

10、QL版本和服务器的SQL MODE的影响所以一般来说,我比较倾向选择DATETIME,至于你说到索引的问题,选择DATETIME作为索引,如果碰到大量数据查询慢的情况,也可以分区表解决 Int 类型毫秒时间戳转换SELECT * FROM t_order_before_deal_flow WHERE FROM_UNIXTIME(add_time,'%Y%m%d')=20160806;Date_format(format,%Y%U) 日期按星期统计 Timestamp类型时间转化SELECT order_idFROM order_decorate_in

11、fo a WHERE DATE_FORMAT(a.utime,'%Y%m%d') >= %s order by a.utime desc2.3. 数据库慢查询1, slow_query_log这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。2,long_query_time当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。3,slow_query_log_file记录日志的文件名。4,log_queries_not_using_indexes这个参数设置为ON,可以捕获到所有未使用索引的SQL语句,尽管这个SQL语句有可能执行得挺快

12、。2.4. 数据库校验规则如在某个字符集“X”的A与a,他们的底层编码分别是A=0,a=100。这里符号“A”“a”和底层编码“0”“100”就是字符集的概念范围。假设我们要比较A与a的大小,我们得到a>A,因为我们是根据其底层编码进行比较的,这就是这个字符集“X”的一种校验规则“Z”(根据底层编码来比较)。假设,现在有另外一种校验规则,是先取其相反数,然后再比较大小,那么就很显然的得到a<a,这就是字符集“x”的另外一种校验规则“z1”。由此可见,一种字符集可能存在多个与之对应的校验规则(一对多关系)。关于字符集与校验规则,mysql能:</a,这就是字符集“x”的另外一种

13、校验规则“z1”。由此可见,一种字符集可能存在多个与之对应的校验规则(一对多关系)。1、使用字符集来存储字符串,支持多种字符集;2、使用校验规则来比较字符串,同种字符集还能使用多种校验规则来比较;3、在同一台服务器、同一个数据库或者甚至在同一个表中使用不同字符集或校对规则来混合组合字符串;4、可以在任何级别(服务器、数据库、表、字段、字符串),定义不同的字符集和校验规则。查询你的mysql数据库所支持的字符集种类:show character set;大家可能已经发现collation的名字似乎有规律可循,其实的确也是这样的,并且它也有些特征,如下:1、两个不同的字符集不能有相同的校验规则(字

14、符集:校验规则 = 1:n);2、每个字符集都有一个校验规则,就是对应的DEFAULT=YES的那个collation;3、collation命名规则:字符集名_对应的语言名_ci/cs/bin,其中ci表示大小写不敏感性,cs表示大小写敏感性,bin表示二进制(大小写敏感)。2.5. 字符编码与数据库校验规则默认情况下,我们可以在4个级别分别设定mysql的字符集和校验规则,分别是server、database、table和column。实际上,我们甚至还可以单独对一串字符串设定其字符集和校验规则server:在启动mysql服务的时候,可以指定mysql server的字符集和校验规则,通

15、过如下方式:mysqld character-set-server=latin1 collation-server=latin1_swedish_ci如果不亲自指定它们,那么mysql就会使用默认值。一般是latin1和latin1_swedish_ci。当然这个默认值是可以修改的,但是方法只有一种,那就是重编译源代码。采用如下方式:./configure with-charset=gbk with-collation=gbk_bin如何查询当前的server的字符集和校验规则的值,可以查看系统参数character_set_server和collation_server:show varia

16、bles like "character_set_server%"server的字符集和校验规则的唯一作用就是,当database的字符集和校验规则没有指定的时候,就默认使用server的对应值database:我们在创建和修改数据库的时候,可以指定其字符集和校验规则:CREATE DATABASE db_nameDEFAULT CHARACTER SET charset_nameDEFAULT COLLATE collation_name;ALTER DATABASE db_nameDEFAULT CHARACTER SET charset_nameDEFAULT COL

17、LATE collation_name;对应查看当前数据库的字符集和校验规则的系统参数是character_set_database和collation_database,如下:show variables like "character_set_database"database的字符集和校验规则的作用有二,其一是当没有在表级编码与规则时,那么默认就使用数据库基本的值;其二是在“load data infile”时也起到了作用。table:在创建表或者修改表结构的时候,我们可以通过如下方式指定这个表的字符集和校验规则:CREATE TABLE tbl_name (colu

18、mn_list)DEFAULT CHARACTER SET charset_name COLLATE collation_nameALTER TABLE tbl_nameDEFAULT CHARACTER SET charset_name COLLATE collation_namecolumn:具体的表的具体的某个字段,我们也可以指定其字符集和校验规则,如下:col_name CHAR | VARCHAR | TEXT (col_length)CHARACTER SET charset_name COLLATE collation_name那么,这四个级别的字符集和校验规则的指定(级别高低s

19、erver>database>table>column),mysql最终以何种形式来存储和显示字符串的呢?1、本级别中,如果同时指定character set和collate,那么就使用指定的值;2、本级别中,只指定character set而没有指定collate,那么就使用指定的character set值和其对应的默认的collation值;3、本级别中,只指定collate而没有指定character set,那么就使用指定的collation值和其所对应的character set值;4、本级别中,都没有指定这2个值,那么默认就使用上一级别的对应的值。mysql中国

20、家字符集的概念,其表示使用预先定义的字符集,在mysql5.1中使用utf8作为其预先的定义的字符集。三. 中间件总结3.1. Maven3.1.1 dependencies dependencymanagement dependencymanagementMaven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。通常会在一个组织或者项目的最顶层的父POM 中看到dependencyManagement 元素。使用pom.xml 中的dependencyManagement 元素能让所有在子项目中引用一个依赖而不用显式的列出版本号。Maven

21、 会沿着父子层次向上走,直到找到一个拥有dependencyManagement 元素的项目,然后它就会使用在这个dependencyManagement 元素中指定的版本号这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。3

22、.1.1.2 dependencies相对于dependencyManagement,所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。 两者区别           dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)         dependencyManagement里只是声明依赖,并不实现引

23、入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。3.2. MyBatis3.2.1 xml中 $ 与#区别1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为

24、order by "id". 2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的值是id,则解析成的sql为order by id. 3. #方式能够很大程度防止sql注入。 4.$方式无法防止Sql注入。5.$方式一般用于传入数据库对象,例如传入表名.  6.一般能用#的就别用$. ps:在使用mybatis中还遇到<!CDATA>的用法,在该

25、符号内的语句,将不会被当成字符串来处理,而是直接当成sql语句,比如要执行一个存储过程。3.3. Java3.3.1 数据库连接过多而未关闭时,会导致整个服务不可用尤其是循环上千次调用时一定会造成机器假死3.3.2 Mybatis配置多数据源3.3.3 关于字符编码扩展阅读:运行时注意带上 UTF-8 编码:/sbin/java -Dfile.encoding=utf-8 -cp /data/script/script-1.0.jar com.huizhuang.script.new_framework.service_check.ServiceAliveChecker重点导读:3.4. sp

26、ringmvc3.4.1 filter 与 interceptor 四. Linux 知识4.1. Crontab4.1.1 文件备份每天凌晨两点半备份文件,并删除5天前的备份数据302 * * * (cd /data/bak/upload_bak; tar -cvzf upload.date +%Y-%m-%d_%H%M%S.tar.gz /data/upload; rm -f upload.date -d "5 days ago" +%Y-%m-%d*.tar.gz -f)4.2. Tomcat配置4.2.1 服务目录重定向<Host name="&qu

27、ot; debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/data/upload/ad_img/" path="/statsvr/adimg" reloadable="true" /><

28、;/Host>4.3. Nginx配置4.3.1 服务目录重定向 目录重定向到其他目录Serverlocation .(gif|jpg|png|js|css|ogg)root D:/staticresource/output; 目录重定向到其他服务器参考:Serverlocation /statsvr/ proxy_pass :8081/; 4.4. Xshell与系统编码4.4.1 查看当前系统的语言环境:locale4.4.2 系统的区域语言设置:/etc/sysconfig/i18n五. 其他5.1. Git操作技巧5.1

29、.1 本地个人资料同步至U盘备份个人资料 在本地硬盘上创建本地仓库注意不要圈“Makeitbare”点击OK后自动生成一个 .git目录,表示该目录已经 git版本管理化了 添加一个测试文件 将其提交到本地master主干中 在移动硬盘中创建一个远程仓库注意圈上“makeitbare”,这样就创建了一个“多个开发者公用的”空仓库了,其目录结构: 将本地版本控制信息提交到远程移动硬盘中5.1.2 将移动硬盘上的项目clone到本地 新建好目录,然后选择Git Clone: 点击OK后就可以将移动硬盘

30、上的数据克隆到本地:5.1.3 个人资料下新建 submodule子模块项目5.1.4 Git自建服务器问题问题描述:如果上传文件过大,而linux系统内存比较小,就会导致发送数据失败。解决方案就是在linux上扩大内存=虚拟内存 swap分区大小 服务器新建系统swap分区做git服务器,当需要上传海量数据时,会遇到内存不够用而导致上传失败参考文章 另参见. SVN操作技巧5.2.1 忽略文件、文件夹参考文章:即在 setting-> general->global ignore pattern 中以正则表达式来过滤掉一些文件、文件夹5.2.2 SVN比对软件替换成BC5.2.3 SVN操作规范 主干trunk:线上稳定代码 + BUG修复:若有BUG修复,待修复发布后,需及时通知其他分支开发者,要他们注意合并最新(修复了BUG的)主干代码。 分支branches:新业务开发时从TRUNK上开辟新分支代码。当开发完毕,A、 提测前,将 trunk 代码合到本分支;B、 提测,完成本版本特性开发测试;C、 本分支整体上线前,再合一次主干代码后,然后再发布;D、 分支发布后,将本分支代码合并进主

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论