发表于: 2017-04-26 16:25:09
3 1504
今天完成的事情:任务一总结
1. MySQL的基础知识:
1.安装:
linux:
sudo apt-get install mysql-server mysql-client
,根据提示输入root密码即可;windows:到mysql官网下载安装包,下一步
2.登陆:
mysql -uroot -p
,输入密码。退出:>exit。默认端口:33063.数据库的基本命令:一定要以“;”结束
显示所有数据库:
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数据库还需要继续深入学习
收获:完成任务一总结,深度思考
评论