Java程序员日常积累-向大神学习(一)
--ping端口需要装服务telnet命令
--、面试题:MySQL性能调优——索引详解与索引的优化
~、索引优化,可以说是数据库相关优化、理解尤其是查询优化中最常用的优化手段之一。
所以,只有深入索引的实现原理、存储方式、不同索引间区别,才能设计或使用最优的索引,最大幅度的提升查询效率!
~、BTree索引:使用最频繁的索引类型
MyISAM引擎索引结构:存放的并不是实际的数据记录,而是数据记录的地址。
特点:不支持事务、只支持表级锁、不支持外键、保存数据库表中表的具体行数
InnoDB引擎索引结构:存放的就是实际的数据记录
四大特性:事务性存储引擎、支持ACID特性、INNODB 支持行级锁、innodb 状态检查
应用场景:innodb 适合大多数的OLTP应用,支持全文索引和空间函数
MySQL的存储引擎InnoDB使用重做日志(redo log)保证一致性与持久性,回滚日志(undo log)保证原子性,使用各种锁来保证隔离性。
~、Hash索引:使用Hash索引的数据库并不多
优点:索引的检索效率非常高,可以一次定位,不像B-Tree索引需要进行从根节点到叶节点的多次IO操作。
缺点:1、Hash索引仅仅能满足等值的查询,范围查询不保证结果正确
2、Hash索引不能被排序
3、Hash索引不能避免表数据的扫描
4、Hash索引在发生大量Hash值相同的情况时性能不一定比B-Tree索引高
5、Hash索引不能使用部分索引键查询
~、Full-Text索引:
目前MySQL中只有MyISAM存储引擎支持,并且只有CHAR、VARCHAR、TEXT类型支持。
判断是否应该建索引的条件
1、较频繁的作为查询条件的字段应该创建索引
2、唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
3、增、删、改操作较多的数据库字段不适合建索引
--、遇到程序报错要知道两个问题:
1、在哪报错?
2、报什么错?
--、MySQL数据库查看大小
//各个数据大小 数据单位M
select table_schema ,round(sum(data_length/1024/1024),2) as size from information_schema.tables group by table_schema order by size desc;
//数据库整个大小,单位M
select round(sum(data_length/1024/1024),2) as size from information_schema.tables;
--、是否应该使用 MongoDB?
*、应用不需要事务及复杂 join 支持
*、新应用,需求会变,数据模型无法确定,想快速迭代开发
*、应用需要2000-3000以上的读写QPS(更高也可以)
*、应用需要TB甚至 PB 级别数据存储
*、应用发展迅速,需要能快速水平扩展
*、应用要求存储的数据不丢失
*、应用需要99.999%高可用
*、应用需要大量的地理位置查询、文本查询
如果上述有1个符合,可以考虑 MongoDB,2个及以上的符合,选择 MogoDB 绝不会后悔。
--、MongoDB 比较适用哪些业务场景?
*、游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新
*、物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB
内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
*、社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
*、物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
*、视频直播,使用 MongoDB 存储用户信息、礼物信息等
--、CI(持续集成)/CD(持续交付/持续部署)介绍:
互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:
编码 --> 构建 --> 集成 --> 测试 --> 交付 --> 部署
--、NVM介绍及使用:维护多个版本的node,在同一台PC机上可以随意切换node版本。
--、Advanced Packaging Tool(APT)是Linux下的一款安装包管理工具,是一个客户/服务器系统。
--、sails其实是内置的express,所以如果你之前使用的是express,那么你将很快的入门该框架,
因为sails基本的语法同express相同,只不过sails集成了很多其他工具,使得我们开发更简单。
--、软件文档编写规范
标题:宋体 二号 加粗
一级标题:黑体三号
二级标题:黑体四号
正文:仿宋_GB2312 四号 1.5倍行距,首行缩进2个字符
--、lomak
hutools
p3c
--、端口号被占用问题:
1、根据端口号查找对应的进程号
netstat -ano | findstr 80 //列出进程极其占用的端口,且包含 80
2、据进程号寻找进程名称
tasklist | findstr 9268
3、杀死80的进程号
taskkill -PID <进程号> -F //强制关闭某个进程
--、学习新知识之前一定要搞明白的几个问题:
1、有什么用?好处
2、有什么弊端?坏处
3、比较同类知识优缺点。
以上三个问题被也要背下来
--、学习MQ:
1、作用:
1)、系统解耦
2)、异步:将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度
3)、流量削峰
2、坏处:
1)系统可用性降低
2)、系统复杂性增加
3、对比
特性 ActiveMQ RabbitMQ RocketMQ kafka
开发语言 java erlang java scala
单机吞吐量 万级 万级 10万级 10万级
时效性 ms级 us级 ms级 ms级以内
可用性 高(主从架构) 高(主从架构) 非常高(分布式架构) 非常高(分布式架构)
功能特性 成熟的产品,在很多公司得到应用;
有较多的文档;各种协议支持较好 基于erlang开发,所以并发能力很强,性能极其好,延时很低;管理界面较丰富 MQ功能比较完备,扩展性佳 只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。
--、Vuex概念理解
在SPA单页面组件的开发中 Vue的vuex和React的Redux 都统称为同一状态管理,个人的理解是全局状态管理更合适;
简单的理解就是你在state中定义了一个数据之后,你可以在所在项目中的任何一个组件里进行获取、进行修改,
并且你的修改可以得到全局的响应变更。
--、约定大于配置
--、entity:ocr/..
dao:ocr/..
--、全部注释的文件:
OcrDocumentAnalyzeKeywordServiceImpl.java
AbstractCustomsCreate.java
OcrIntelWaybillServiceImpl.java
--、git使用顺序:
1、本地先commit到本地
2、pull=>master pull,同时注意刷新
3、冲突:解决冲突
4、commit本地
5、push 到自己的分支:注意修改分支
6、确认没有冲突-->请求合并到master主分支
--、权限控制:还用不用移?
2019年4月26日:
--、code + name 放在一张表里面 维护压力大
code在主表,name放在数据展示表里面
--、字段不明,立马提出来,不要私自套
--、msql 对同一张表里面的字段数是由限制的
--、制单主表一对一的,创建时必须都要创建,不管空不空
--、表明命名规范
表开头:T
视图开头:VW
--、层级;
controller:不要写太多的业务逻辑,把业务逻辑放在service层
service
dao
--、数据来源:
来源一:先整理基础数据到数据库
来源二:最值钱的技术点:
1、ocr:读PDF和图片
2、excel表
--、MyBatis Generator 自定义生成注释
https://segmentfault.com/a/1190000016525887
--、传参:个数尽量要少,扩展性要好(增加/减少属性方法方法不需要改)
--、代码规范:尽量少的访问数据库
查询字典,先全部查出来放到List里面,然后根据需要遍历出符合要求的数据格式和数据类型要求。
--、防止二次提交
前端:通过JavaScript屏蔽提交按钮(不推荐)
后台:{
1、利用Session防止表单重复提交(推荐)
2、使用AOP自定义切入实现
3、使用redis计数器防止并发请求
}
数据库: 给数据库增加唯一键约束(简单粗暴)
--、jQuery在页面上找到所有格text类型、可见、不是readonly及不是disabled的input框,
每次输入完之后自动跳到下一个input框
-
if (flag != false) {
-
var inputs = $("input:text:visible").not("[readonly]").not("[disabled]");
-
for (var s in inputs) {
-
if ($(inputs[s]).attr("id") == dateOfPort + "_text") {
-
$(inputs[parseInt(s) + 1]).focus();
-
return false;
-
}
-
}
-
}
--、pojo里面关于金额的字段类型要用BigDecimal,不要用double,更不能用float
主要考虑到精度的问题,涉及金额的都要力求做到一点不能错
--、mysql里面的in字段可以写3000个值,oracle数据量里面的in字段可以写1000个值
--、上传单据加文件大小属性
--、权限问题:
1、分为:行为权限和数据权限
行为权限:把每一种操作看作一个行为。
数据权限:要用一张表来关联用户要看那些数据的关系。表里面要有部门id,组id等等。
--、JPA学习
1、增删改
2、查询:
》普通查询
》关联查询:只支持链式关联查询
》查询处对象之后,不要使用set方法修改查询出来的对象,
JPA在事务中碰到异常会把查询的对象回写到数据库中。
3、JPA和Mybatis的事务是一样的
文章来源: blog.csdn.net,作者:LookForDream_,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/LookForDream_/article/details/100928646
- 点赞
- 收藏
- 关注作者
评论(0)