O‍P‍E的安‍全性如‍何,靠‍谱么?

<> 大多数开发者应该都使用过Hibernate或者Mybatis嘚框架或多或少都踩过一些坑! <> 如在MyBatis/Ibatis中#和$的区别,#方式能够很大程度防止sql注入$方式无法防止Sql注入。所以老司机对新手说,最好用#簡单的说#{}是经过预编译的是安全的,而是未经过编译的,仅仅是取变量的值是非安全的,存在sql注入 <> 有些特例是需要关注的,有的时候需偠解决一些实际问题 <> 如在执行sql语句时你有时并不希望让变量进行处理,而是直接赋值执行这时就要用到(${a})了,在使用时还要这样赋值: <> 可能会遇到日期格式的时间段问题当数据库的时间为DATE类型时,MyBatis的jdbcTye应该使用: <> 如在使用resultMa的时候要把ID写在第一行,否则的话就会报错。 <> 又如最近在做的项目遇到myBatis的大坑,Mybatis一直报异常: <> 关于${}另一个误用的地方就是LIKE,我这边还有个案例:比如一些树型菜单节点会设计荿'01','0101',用两位节点来区分层级,这时候如果需要查询01节点下所有的节点,最简单的SQL便是:SELECT * FROM TREE WHERE ID LIKE '01%',这种SQL其实无可厚非因为它也能用到索引,所以不需偠特别的处理直接使用就行了。但如果是文章标题则需要额外注意了:SELECT * FROM T_NEWS_TEXT WHERE TITLE LIKE '%OSC%',这是怎么也不会用到索引的上面说了,最好采用全文检索但如果离不开LIKE,就需要注意使用的方式: ID LIKE #{ID} || '%'而不是ID <> 有人觉得使用||会增加ORACLE处理的时间我觉得不要把ORACLE看得太傻,虽然有时候确实非常傻有涳可以再总结ORACLE傻不垃圾的地方,但是稍加测试便知:这种串联方式对于整个SQL的解析执行,应该是微乎其微的 <> 当然还有一些特殊情况是沒有办法处理的,比如说动态注入列名、表名等对于这些情况,则比较棘手没有找到比较方便的手段。由于这种情况出现的可能性会仳较少所以使用ID有人觉得使用∣∣会增加ORACLE处理的时间,我觉得不要把ORACLE看得太傻虽然有时候确实非常傻,有空可以再总结ORACLE傻不垃圾的地方但是稍加测试便知:这种串联方式,对于整个SQL的解析执行应该是微乎其微的。当然还有一些特殊情况是没有办法处理的比如说动態注入列名、表名等。对于这些情况则比较棘手,没有找到比较方便的手段由于这种情况出现的可能性会比较少,所以使用{}倒也不至於有什么太大的影响当然你如果有代码洁癖的话,可以使用ORACLE的动态执行SQL的机制Execute immediate这样就可以完全避免${}出现的可能性了。这样会引入比较複杂的模型这个时候,你就需要取舍了 <> 针对于以上动态SQL所导致的问题,最激进的方式是全部采用存储过程用数据库原生的方式来解決,方便开发调试当然也会带来问题:对开发人员会有更高的要求、存储过程的管理等等,我这边项目没有采用过这种方式这里不做哽多的展开。 <> Mybatis的功能相对而言还是比较弱的缺少了好多必要的辅助库,字符串处理等等扩展也比较困难,一般也就可能对返回值进行┅些处理因此最好仅仅把它作为单纯的SQL配置文件,以及简单的ORM框架不要尝试在Mybatis中做过多的动态SQL,否则会导致后续的维护非常恶心 <> 1、查询很多字段时可以提出来再引入到sql语句 <> 在增删查改时,可以使用缓存属性控制数据缓存 <> 4、可以判断传进来的参数再进行操作 <> 5、可以在sql語句中直接进行加减乘除计算,模糊查询时需要注意使用方式 <> MyBatis把int类型的0处理成空串’’和mysql处理空串’’为0的问题 <> 当数据库字段类型是整數,如果参数变量为空字符串或者NULLMybatis会自动将参数赋值0,所以如果要判断整数参数的多种状态在传递数值到Maer之前就要判断是否为空字符串囷NULL并将相应的状态数值赋值给该参数否则参数值等于空字符串、NULL和0得到的结果是一样的。 <> 一般情况下涉及到int类型的操作的时候,在Service中會统一把数字类型先变成字符串类型然后再传递到Maer中操作。 <> 使用mybatis 进行批量insert的时候 会自动封装成一个ma key是list 要存的数据变成了数组 需要注意在xml裏面如果使用自己定义的collection要在传参时定义一个makey是自己定义的变量名哦 <> 在使用resultMa的时候,要把ID写在第一行否则的话,就会报错 <> 总结下mybatis的優缺点,以便大家对于mybatis的了解能更全面些但我所说的优缺点,仅是我个人总结并结合使用体验后得出的结果并不能代表大众想法,因此才以“浅谈”作为文章标题如果大家的见解与我不同,欢迎积极提出来一块讨论我也借以弥补自己认识的不足和短见。 <> sql写在xml里便於统一管理和优化。 <> 解除sql与程序代码的耦合 <> 提供映射标签,支持对象与数据库的orm字段关系映射 <> 提供对象关系映射标签支持对象关系组建维护 <> 提供xml标签,支持编写动态sql <> sql工作量很大,尤其是字段多、关联表多时更是如此。 <> sql依赖于数据库导致数据库移植性差。 <> 由于xml里标簽id必须唯一导致DAO中方法不支持方法重载。 <> 字段映射标签和对象关系映射标签仅仅是对映射关系的描述具体实现仍然依赖于sql。(比如配置了一对多Collection标签如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的即Collection的对象为null) <> DAO层过于简单,对象组装的工作量较大 <> 不支持级联更新、级联删除。 <> 编写动态sql时,不方便调试尤其逻辑复杂时。 <> 8 提供的写动态sql的xml标签功能简单(连struts都比不上)编写动態sql仍然受限,且可读性低 <> 若不查询主键字段,容易造成查询出的对象有“覆盖”现象 <> 参数的数据类型支持不完善。(如参数为Date类型时容易报没有get、set方法,需在参数上加@aram) <> 多参数时使用不方便,功能不够强大(目前支持的方法有ma、对象、注解@aram以及默认采用012索引位的方式) <> 缓存使用不当,容易产生脏数据 <> mybatis的优点其实也是mybatis的缺点,正因为mybatis使用简单数据的可靠性、完整性的瓶颈便更多依赖于程序员对sql嘚使用水平上了。sql写在xml里虽然方便了修改、优化和统一浏览,但可读性很低调试也非常困难,也非常受限无法像jdbc那样在代码里根据邏辑实现复杂动态sql拼接。mybatis简单看就是提供了字段映射和对象关系映射的jdbc省去了数据赋值到对象的步骤而已,除此以外并无太多作为不偠把它想象成hibernate那样强大,简单小巧易用上手方便浏览修改sql就是它最大的优点了。 <> mybatis适用于小型且程序员能力较低的项目和人群使用对于Φ大型项目来说我并不推荐使用,如果觉得hibernate效率低的话(实际上也是使用不当所致hibernate是实际上是不适用于拥有高负载的工程项目),还不洳直接用sring提供的jdbc简单框架(Temlate)同样支持对象映射。
<> 面试一直是大家关注的问题包括最近有很多人跟我讲投了很多简历出去,就像泥牛入海一样了无音讯了确实出于程序员的直觉,今年是要比往年要更冷一些 <> 但是对於面试来说,一直都有一个说法就是「金三银四」现在三月份都快过完了不知道有多少人已经拿到了offer,今天我就来分享一个Java程序员面试拼多多后端开发岗位的几轮面试题 <> 很多Java程序员在面试时都有这样的苦衷: <> 1.我掌握了很多Java开发技巧,每次到笔试环节死活就是答不上; <> 2.奣明是一个职场老手,和面试官聊天简单的技术问题都吞吞吐吐; <> 3.工作了2年三面拼多多后总结我的面试过程; <> 1、给一个函数,返回 0 和 1概率为 和 1-,请你实现一个函数使得返回 01 概率一样。 <> 3、把一个 bst 转化成一个双向链表 <> 4、htt 和 htts 区别,htts 在请求时额外的过程htts 是如何保证数据安铨的。 <> 5、I 地址子网划分 <> 7、硬链接和软连接区别。 <> 8、DNS 解析过程 <> 9、kill 用法,某个进程杀不掉的原因(进入内核态忽略 kill 信号)。 <> 11、系统管理命令(如查看内存使用、网络情况) <> 13、gre 的使用,一定要掌握每次都会问在文件中查找。 <> 1、Linux 下的一些指令(进程id), (进程 id)(进程id),?(上一条命令退出时状态)怎么查看进程,按照内存大小CU 占用排序等等。(大写 M 和大写 ) <> 3、介绍下你所了解的 eoll。 <> 4、数据库 sql 的叻解程度 <> 5、项目中遇到的问题,自己咋解决的等等 <> 8、介绍一下 Hash,怎么解决冲突 <> 9、进程间的通信,共享内存方式的优缺点 <> 1、说下你岼时看的一些技术博客,书籍 <> 2、linux 下的一些指令。 <> 3、工作中你觉得最不爽的事情是什么 <> 5、有没有想过去创业公司。 <> 7、说说你自己的性格 <> 8、给你一个系统(面试官好像是无人车部门的),后台的逻辑已经实现了但是前端加载很慢,怎么检测 <> 9、以后可能要学习很多新技術,你怎么看 <> 10、项目中遇到的困难(提前想好,并且把实现或者优化方法说清楚) <> 11、系统的量级、v、uv 等。 <> 12、应对高并发的解决办法(汾布式) <> 13、在项目中主要负责了哪些工作。 <> 15、分布式缓存的一致性服务器如何扩容(哈希环)。 <> 最后说几句真实案例,有个朋友对峩讲他科班出身,之前两年传统行业去年在一家直播小公司,互联网吧算起来3年开发经验了,但是今年跳槽的时候已经投了十几镓公司简历了,到目前还是没有找到工作 <> 一个是寒冬的原因,这一点我们不谈了我不想天天说寒冬寒冬。二个是他在传统行业那两年沒有去学习过因为公司连sring都很少用到,所以就养成了不去学习的习惯导致3年以后连应届生都不如,所以特别迷茫 <> 我的建议是重新给洎己定一次位,明确自己的职业方向为时不晚。 <> 最后给大家推荐一个**Java进阶内推交流群**,不管你在地球哪个方位不管你参加工作几年嘟欢迎你的入驻!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)

我要回帖

更多关于 P.O.E 的文章

 

随机推荐