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的事务是一样的

发布了35 篇原创文章 · 获赞 31 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/LookForDream_/article/details/100928646