发表于: 2020-05-25 23:55:04

1 1507


今天完成的事情:完成了一半的深度思考,做缴费的活动,明天缴费了。
明天计划的事情:明天完成深度思考,找到git丢失的代码。
遇到的问题:git使用不当,我会好好熟练下。
收获:如下

1.Mybatis有哪些常用标签?怎么使用标签来完成动态查询?

1)定义sql语句标签:insert(增)、select(查)、update(改)、delete(删);

2)sql标签:定义代码片段,实现代码复用,引用时需要用include标签;

3)resultMap标签:解决实体类中变量名和数据库表格字段名称不同的问题;

4)动态sql标签:进行sql语句拼接,详细标签见下文。

Mybatis动态查询时常用标签有哪些?

1)where、if标签   2)choose(when、otherwise)标签  3)set标签   4)trim标签   5)foreach标签    6)bind标签

使用标签来完成动态查询

1)使用where、if,或choose等标签实现动态查询,使用set、if标签实现动态更新。

2)使用trim标签定义sql片段,提高代码复用率。

3)使用foreach标签进行批量插入、查询、删除操作。



2.什么叫反射?反射的坏处是什么?有哪些反射的应用场景?

什么是反射:

运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任一方法和属性;这种动态获取信息和动态调用对象方法的功能成为java语言的反射机制。

运行状态:java文件通过编译成为class文件,对不同类型的classe文件,有不同的ClassLoader加载。 ClassLoader会把.class文件加载到虚拟机中来。 jvm运行class的期间期间叫运行期间,在这个期间,我们可以动态获取信息和动态调用对象方法就是反射机制。

应用场景:

编写通用性较高的代码或者框架,例如jdbc中Class.forName("com.mysq.jdbc.Driver")加载驱动的时候;spring中装载Bean的过程,以及动态代理的地方也有用到;


反射常用对象概述:

 Class - 类的实例表示正在运行的Java应用程序的类和接口 

获得class文件对应的Class对象: 

已知类和对象:
1. 类名.class  2. 对象.getClass()    未知类和对象的情况下:                                                                                          Class.forName("包名.类名")  forName()方法用于加载类字节码到内存,并封装成一个Class对象

Constructor(构造方法类) - 关于类的单个构造方法的信息及访问权限

Constructor类
获得某个类的所有构造方法的数组:
Constructor[] constructors = Class.forName("包名.类名").getConstructors();                            得到指定的构造方法并调用
Constructor constructor = Class.forName("包名.类名").getConstructor(参数类名.class); //获得只有一个参数的构造器  constructor.newInstance(); //创建该类的对象                                                                                                                                                          Class类的newInstance()方法用来调用类的默认构造器
(类名)Class.forName("包名.类名").newInstance();

Field - 提供类或接口的单个属性的信息以及对其的动态访问权限 

Method - 关于类或接口的单独某个方法的信息 

Method类代表某个类中的一个成员方法;                                                                                                                                                                Method对象的获得:
-获得所有方法:
getDeclaredMethods()
getMethod()                                                                                                                                              -获得指定的方法:getDeclaredMethod(String name,Class<?>... parameterTypes)
getMethod(String name,Class<?>... parameterTypes)                                                                                                                                                                                                      通过反射执行方法:
invoke(Object obj,Object... args)

反射优缺点:

优点:增加代码的灵活性和扩展性,降低耦合度,提升自适应能力

例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码,并重新编译。 使用反射:class.forName("person").newInstance(); 

缺点:内部暴露:当我们使用反射时,其实是在动态的获取信息,那么对于被获取信息的一方来说,其实是不安全的,内部的所有东西在反射面前都无处遁形,非常的不安全,相当于我们在别人面前没有秘密可言。

3.什么是SVN,小乌龟是什么,SVN的文件版本号是怎么来的,哪些文件应该上传到SVN,哪些不该上传?Git和SVN的区别又是什么?  

SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。

《小乌龟svn》是一款用于简化svn操作的软件。

文件上传须知:

凡是自动生成的代码,都不应该上传,以下为列出不需要增加到版本库的文件:

(1) .idea 文件夹,此文件夹是用来保存开发工具的设置信息。

(2) .gradle文件夹,此文件夹是用来保存gradle的依赖信息。

(3) build 文件夹,build文件夹是用来保存编译后的文件目录。

(4) .iml 文件,是用来保存开发工具信息。

(5)  local.properties 文件,是用来保存项目依赖信息。

需要上传到svn管理起来的有哪些文件:
(1).  所有自己写的 .h .cpp .c 文件,以及第三方库的 .h 文件
(2).  项目工程相关文件 .sln 文件和  .vcproj文件,QT工程的 .qrc 文件
(3).  项目资源文件,MFC工程为res目录和.rc文件,QT工程为 Resources 目录和 .ui文件,以及做界面所添加的 .ico图标文件、.img等图像文件。
(4).   第三方库文件 .lib或者.dll ,自己工程生成的lib和dll不用上传。而使用的第三方库则不一样,如果程序链接需要第三方的lib,或者运行时需要当前运行目录下有这个第三方的dll,则需要上传。

(5).   其他

Git和SVN的区别:

git是分布式的,svn不是。git每台电脑都有一个版本库,可以在本地做版本管理; 速度快。git的速度远超大部分版本管理系统,包括svn 。git强大的分支管理功能 活跃的开源社区,如最著名的github。所以倾向于用git。

4.什么是AOP,适用于哪些场景,AOP的实现方案有哪些?  

面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

OOP是开发者定义纵向关系,但是并不允许开发者定义横向关系,所以有部分代码是横向的分布在所有对象层次中,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

AOP是横向抽取技术,剖解开封装的对象内部。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

适用场景:权限验证;持久化;同步;事务;

实现方案有基于XML方式和基于注解的方式。

基于注解

<!--开启Aspectj的注解开发,自动代理-->
<aop:aspectj-autoproxy/>
<!--目标类-->
<bean id="productDao" class="com.hyx.aspectJ.demo1.ProductDao"/>
<!--定义切面-->
<bean class="com.hyx.aspectJ.demo1.MyAspectJAnno"/>
/**
切面类
*/
@Aspect
public class MyAspectJAnno {
@Before(value = "execution(* com.hyx.aspectJ.demo1.ProductDao.save(..))")
//可以在方法中传入JoinPoint对象,用来获得切点信息
   public void before(JoinPoint joinPoint){
System.out.println("前置通知。。。。。。。。+ joinPoint);
}

5.Map,List,Array,Set之间的关系是什么,分别适用于哪些场景,集合大家族还有哪些常见的类?

List , Set, Map都是实现了Collection接口的容器

Array就是数组,也就是长度固定的容器

需要存储一组类型相同的元素的时候,应该使用一个容器来保存,数组就是这样一个容器。 数组一旦定义,长度将不能再变化。

然而在我们的开发实践中,实际的存储长度是不可预知的,我们需要一些能够动态增长长度的容器来保存我们的数据。

而我们需要对数据的保存的逻辑可能各种各样,于是就有了各种各样的数据结构,将数据结构在Java中实现,于是就有了集合框架。

数组的缺点 

• 长度必须在初始化时指定,且固定不变

 • 数组采用连续存储空间,删除和添加效率低下

 • 数组无法直接保存映射关系

 • 数组缺乏封装,操作繁琐


 集合

• List 接口存储一组不唯一,有序(索引顺序)的对象 

• Set 接口存储一组唯一,无序的对象

• Map接口存储一组键值对象,提供key到value的映射    Key 唯一 无序     value  不唯一 无序 

6.Spring的IOC有几种方式?它们之间的差别是什么,应该选择Annonation还是应该选择XML?

Spring IoC 方式有 xml 配置及注解方式,一般选择 xml 与 注解 混合使用,不过现在 SpringBoot 盛行,则使用纯注解的方式。怎么选择看具体情况要求

7.JDBCTemplate和JDBC ?

(1)java三层架构   ①表现层(view) ②业务逻辑层(业务层service)  ③持久层(数据访问层dao)

(2)什么是JDBC?

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。

(3)什么是JDBCTemplate?

JDBCTemplate 多的这个template,中文意思为模板,是Spring框架为我们提供的.所以JDBCTemplate就是Spring对JDBC的封装,通俗点说就是Spring对jdbc的封装的模板

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

ioc即时控制反转,就是将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理

●简单说,就是创建UserService对象控制权被反转到了Spring框架

● DI Dependency Injection依赖注入的概念,就是在Spring创建这个对象的过程中,将这个对象所依赖的属性注入进去。

为了降低耦合度,选择运用ioc的方式,还可以减少代码量。

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

面向接口编程

(1)使用Interface是为了实现接口和实现类分离,对接口进行封装,这样一个接口可以对应多个实现类。使用起来就很方便

(2)同一个方法也可能不止一个类调用,这个时候用接口实现分离的方法可以减少代码重复率,耦合度更低。

(3)使用接口使代码看起来层次分明,更易于理解和更改。

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

1)以业务逻辑功能为单位,在最上层加Try-Catch机制。为什么要这样做呢?这主要是增加程序的健壮性,防止因抛出异常过多,导致程序崩溃。

2)底层代码,在可能出错的地方加Try-Catch机制,用Catch侦测具体的异常,然后就具体的异常,采取相应的解决方案。

3)底层代码,在需异常追踪时加Try-Catch机制,在Catch块中抛出自定义异常,调试时可迅速定位到错误代码段。

Try-Catch机制会将异常屏蔽掉,必须根据具体的应用场景,具体分析。

来自https://www.jianshu.com/p/eacc631fb8c5


思考师兄昨天的回复。

source命令

让插入提升效率的一种方法,生成SQL文件后,在dos页面通过source命令执行SQL

https://jingyan.baidu.com/article/e75057f2e284ceebc91a891b.html

LOAD DATA INFILE

LOAD DATA INFILE语句用于高速地从一个文本文件中读取行,并写入一个表中。文件名称必须为一个文字字符串。

LOAD DATA INFILE 是  SELECT ... INTO OUTFILE 的相对语句。把表的数据备份到文件使用SELECT ... INTO OUTFILE,从备份文件恢复表数据,使用 LOAD DATA INFILE。

语法:

标准用法:

LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE tbl_name 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n'

只载入一个表的一列

LOAD DATA LOCAL INFILE 'persondata.txt' INTO TABLE persondata (col1,col2)

https://www.jianshu.com/p/bcafd8f3ad8e


返回列表 返回列表
评论

    分享到