发表于: 2017-04-26 16:25:09

3 1505


今天完成的事情:任务一总结

1. MySQL的基础知识:

  • 1.安装:

    • linux:sudo apt-get install mysql-server mysql-client,根据提示输入root密码即可;

    • windows:到mysql官网下载安装包,下一步

  • 2.登陆:mysql -uroot -p,输入密码。退出:>exit。默认端口:3306

  • 3.数据库的基本命令:一定要以“;”结束

    • 显示所有数据库:show database;

    • 创建数据库:create database name;

    • 删除数据库:drop database name;

    • 选择数据库:use databasename;

    • 创建表:create table name(> 字段,数据类型);

    • 查看表:show tabales;或者desc tablename

    • 删除表:drop table name;

    • 增数据:INSERT INTO 表名 VALUES(1,'男','张三'); //按字段顺序值完全匹配

      INSERT INTO 表名(字段1,字段2) VALUES(数据1,数据2);

    • 删数据:DELETE FROM tablename;//删除所有表数据

      或者DELETE FROM tanlename WHERE id = 2;//带条件删除

    • 改数据:UPDATE 表名 SET 字段名=数据; //修改表的字段的所有值

      或者UPDATE 表名 AET 字段1=数据1,字段2=数据2 WHERE id=2; //修改id为2的字段数据

    • 查数据:SELECT * FROM 表名; //查询所有列字段

      SELECT 字段1,字段2 FROM 表名;//查询指定字段

      SELECT * FROM 表名 WHERE id=2 AND name='李四';//条件查询


    • 这些都是Mysql数据库最最基本的基础知识,后续对于MySQL还需要更加深入的学习。

2. 开发工具及环境配置:

JDK的安装配置:

1.安装:从官网下载系统对应的JDK版本,如果是windows就点击下一步安装,记住安装位置;linux系统就解压到一个文件夹如:/usr/local/java;

2.配置:

windows在系统环境添加:电脑->属性->高级系统设置->环境变量

添加 JAVA_HOME:C:\Program Files\Java\jdk1.8.0_111(改成自己的路径)

在Path中添加:%JAVA_HOME%\jre\bin;%JAVA_HOME%\bin

linux:在/etc/profile文件末尾添加:

# java_home

export JAVA_HOME=/usr/local/java/jdk1.8.0_131 (改成你的路径)

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:{JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

3.验证:命令行:java  和  javac 命令显示信息


Maven3的安装配置:

1.安装:从maven官网下载系统对应的压缩包,解压到相应目录并记住路径

2.配置:

windows:在环境变量中添加M2_HOME:C:\Program Files (x86)\apache-maven-3.3.9(改成自己的路径)

在Path中添加%M2_HOME%\bin;(注意添加;)

linux:在/etc/profile文件末尾添加:

# maven_home

export M2_HOME=/usr/local/maven/apache-maven-3.5.0   (改成你的路径)

export PATH=$PATH:$M2_HOME/bin

3.验证:命令行 :mvn -version 显示相关信息

IDE的相关配置:将maven文件夹里的配置文件settings.xml移动到 用户/.m2/下,在IDE中设置选择此配置文件。

3. 编写项目:

项目目录结构:

Task1

 -src

   -main

     -java

       -com.jnshu.task1

             -domain

                 Student.java    //学生实体类,属性及getter,setter

             -mappers

                 StudentMapper.java  //学生映射接口,注解配置mybatis映射

             -services

                 StudentService.java   //接口service实现

             -util                     //mybatis工具类

                 MyBatisSqlSessionFactory.java  //单例工厂,配置数据库连接

                 MyBatisUtil.java      //mybatis工具类,配置数据库连接

     

     -resources

             -sql   //sql文件

                 create_tables.sql

                 drop_tables.sql

                 sample_data.sql

             -xmlConfig

                 StudentMapper.xml    //映射配置文件,xml配置mybatis映射

              application.properties  //jdbc数据库连接配置文件

              log4j.properties        //log4j

              mybatis-config.xml      //mybatis配置文件

             

   -test

      -java

         -com.jnshu.task1.services

              StudentServiceTest.java  //StudentService测试类

              TestDataPoulartor.java   //数据库连接测试类

      -resources

           log4j.properties  //log4j

   pom.xml  //Task1模块pom文件

4. 远程部署:

远程mysql连接配置:

1. 设置/etc/mysql/my.cnf 里 bind-address   = 0.0.0.0

2. 给mysql用户设置远程访问权限:

           > grant all on *.* to root@‘%’ identified by ‘123456’;

           > flush privileges;(刷新权限)

3.客户端远程连接mysql,将项目中JDBC的url中的localhost改为服务器ip

maven跑单元测试:将github上的maven项目clone到服务器,进入目录执行maven test命令。也可以用maven clean package进行项目打包。
5. 深度思考:

1.maven是什么,和Ant有什么区别?

   Maven是一个强大的Java项目构建工具。 构建工具是将软件项目构建相关的过程自动化的工具。构建一个软件项目    通常包含以下一个或多个过程:

     1.生成源码(如果项目使用自动生成源码);

     2.从源码生成项目文档;

     3.编译源码;

     4.将编译后的代码打包成JAR文件或者ZIP文件;

     5.将打包好的代码安装到服务器、仓库或者其它的地方;

   Maven 除了以程序构建能力为特色之外,还提供 Ant 所缺少的高级项目管理工具。

2.clean,install,package,deploy分别代表什么含义?

    mvn clean:清理产生的项目

    mvn install:构建项目到本地

    mvn package:项目打包编译

    mvn deploy:部署项目上传

3.怎么样能让Maven跳过JUnit?

   方法1:命令行带参数 mvn install -Dmaven.test.skip=true

   方法2:在pom.xml里面配置

        <plugins>

           <plugin>

               <groupId>org.apache.maven.plugins</groupId>

               <artifactId>maven-surefire-plugin</artifactId>

               <configuration>

                  <skip>true</skip>

               </configuration>

           </plugin>

       </plugins>

4.为什么要用Log4j来替代System.out.println?

   在项目开发中,pringln打印出来的语句在系统稳定之后就没有作用成为垃圾代码,使用log4j替代输出语句,只需修改配置文件就可以不显示打印的信息。

5.为什么DB的设计中要使用Long来替换掉Date类型?

   Long类型相对于Data类型更好处理与使用。

6.自增ID有什么坏处?什么样的场景下不使用自增ID?

   做分布式数据库时无法使用该id来唯一标识记录。

 

7.什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?

   索引是为了让检索查询的过程更快捷方便;数据量超过300的表应该有索引;表的主键、外键必须有索引,索引应该    建在选择性高的字段上;

8.唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。

  唯一索引的数据列的值都是唯一的,普通索引数据列的值可以重复。

  如果能确定某个数据列将只包含彼此各不相同的值,就需要建唯一索引。

9.如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?

  不需要,唯一索引确定数据列只包含各不相同的值。

10.CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?

   CreateAt应该在insert的时候赋值,UpdateAt应该在update的时候赋值。不应该开放给外部。

11.修真类型应该是直接存储Varchar,还是应该存储int?

  Varchar对应java中的String,应该直接用Varchar。

12.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?

  长度超过255和经常改变的用varchar。varchar有系统默认长度,Text没有默认值,LongText是长字符存储。

  

13.怎么进行分页数据的查询,如何判断是否有下一页?

   使用limit子句,limit n,m

   如:select * from table where xxx in (1,2,3) order by id limit #offset#, 200

   用SELECT COUNT(*) FROM table WHERE condition ORDER BY ...查到总数并算出有多少页

14.为什么不可以用Select * from table?

   无法对数据进行筛选显示。

15.什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?

   把“行为”(逻辑、过程)和“状态”(对象成员变量)分离到不同的模型之中,只有状态的对象就是“贫血模型”(常    称为VO——Value Object),而那个只有行为的对象(Logic/Service/Manager层等)就是充血模型。

   使用贫血模型能够将成员对象变量与实现过程分离开来,易于使用与维护。

16.Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?

   IOC(Inversion of Control):控制反转。

   IOC容器管理实例的生命周期比new要方便的多,当项目中类文件越来越多,各个实例之间的耦合度会很高,非常不    利于对象的维护管理。IOC就像是一个中介,能够很好的松耦合。

17.为什么要使用Interface,而不是直接使用一个实体类来完成任务?Interface和Impl这种方式的好处是什么?

   使用Interface能够降低耦合度,利于代码的维护管理,比如修改的时候就不会那么麻烦。

   Interface和Impl将需求与实现分开管理,条理清晰,代码可读性也有提高。

18.为什么要处理异常,Try/Catch应该在什么样的场景下使用,在真实的系统中,会出现网络中断,DB连接不上的错误吗?多久会发 生一次?

   处理异常是为了更好的找出并修正错误,预先设定处理方法能够保证程序的顺利运行。

   Try/Catch多用于不知道确切的异常,但是知道其大体方向的时候,比如文件读写等等。

19.日志应该怎么打,在什么位置,需要打印出来什么样的关键参数?

   方便定位问题的日志:

    1.日志明确标志属于哪次请求

    2.在对外提供的接口入口处打印一条日志

    3.在调用其它系统接口的前后各打印一条日志

    4.不符合业务逻辑预期打印一条日志

    5.业务处理出现异常打印一条日志

    6.极少出现的else情况打印一条日志

   

   显示程序运行状态的日志:

    1.耗时(可能出现超时)业务逻辑处理时间打印一条日志

    2.批量处理大量数据时显示处理进度打印n条日志

20.为什么需要单步调试?Debug的时候IDE是怎么找到源码的?

   单步调试是指调试小段代码,一步步找出错误。更准确的确定错误原因。

   不是很了解,个人猜测是通过反射找到源码。

21.可否远程连接到线上直接调试?真实的项目中,遇到问题的排查方案是什么?

   不可以。

   运行环境-项目依赖-项目代码


明天打算做的事情:开始任务二


遇到的问题:对Mysql数据库还需要继续深入学习


收获:完成任务一总结,深度思考


返回列表 返回列表
评论

    分享到