存在的问题:
public class StudentService {
public static Logger logger = LogManager.getLogger(StudentService.class);
@Autowired
private StudentMapper mapper;
这个mapper 提示找不到
在applicationContext.xml 已经配置了
<!--直接获取mapper-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" >
<property name="sqlSessionFactoryBeanName" value="sessionFactory"/>
<property name="basePackage" value="com.bbq.mapper"/>
</bean>
之前通过SqlSessionFacotory 获取mapper 已经没有问题了,但老是需要getMapper,所以想利用更方便的方法来完成操作
代码见
https://github.com/nikaxi/work1
深度思考
12.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
varchar长度跟具体业务类型有关,同时对于中文信息,文字长度x3就是varchar的长度规模,可以估算得到,varchar类型头两个字节表示长度,因此最大65535
Text
长度 2的16次减 1 ,
TextLong 2的32次方减1,是其最大长度,同时需要考虑mysql本身的max pack限制
Text与 LongText都用来存储文本数据, 不能存储图片,BLOB用来存图片
13.怎么进行分页数据的查询,如何判断是否有下一页?
一般分页查询,牵扯到页码与页大小,通过页码与总数比较判断是否有下一页,一般用sql的limit 加offset来实现
14.为什么不可以用Select * from table?
索引并不是覆盖全字段的,select * 在大表上全表扫描会导致io问题
另外结果集过大,会浪费很多的内存,所以可以 where in 来解决问题
15.什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?
贫血模型是只有数据没有状态,充血模型是有数据又有状态
在我们的任务中,首先定义bean,这个对象是么有什么行为逻辑的封装的,dao层替我们完成了curd,
从层次结构来看,非常的清晰,逻辑很清楚
而如果是充血模型,那么在类型定义中,就会包含各种curd的逻辑,没有dao层的存在
之所以强制使用贫血模型,就是为了更好的分层与解耦
16.Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?
spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖 如果自己new的话,光这些实例的管理就很头痛,代码里导出都是new 万一要修改,特别的麻烦,而spring的实例化基本是单例的,随便使用,远远比我们自己new要高效和方便
17.为什么要使用Interface,而不是直接使用一个实体类来完成任务?Interface和Impl这种方式的好处是什么?
面向接口编程,是一种约定,只要遵循了接口,就可以按照某种约定去使用,而不关心具体实现,非常方便为以后做变更
而不影响调用方
18.为什么要处理异常,Try/Catch应该在什么样的场景下使用,在真实的系统中,会出现网络中断,DB连接不上的错误吗?多久会发 生一次?
1 使用别人的库和方法,别人的代码有异常说明,那么你必须try catch
2 某些函数或者库没有异常说明,但是你认为有可能发生的情况,你可以手工throw,抛给上层统一处理
3 在spring中一般都是自定义异常,然后交给框架统一处理
真实系统中,网络中断经常发生,多久发生并不是有规律的
19.日志应该怎么打,在什么位置,需要打印出来什么样的关键参数?
遵循where what when的原则即可
20.为什么需要单步调试?Debug的时候IDE是怎么找到源码的?
疑难杂症,又不想看源代码的,通过单步调试能了解调用栈,进而理解程序的运行原理
java的代码通过包,类来组织,通过对源代码标识符反向索引即可定位代码位置,通过包类路径信息即可确定位置所在。(纯猜测)
21.可否远程连接到线上直接调试?真实的项目中,遇到问题的排查方案是什么?
一般是没有权限远程线上直接调试的,真实项目中一般是利用日志来完成问题的定位的,
当然熟悉业务的结构模型,网络模型,对于问题定位也是很有帮助的
评论