源码

Mybatis源码解析(四) —— SqlSession是如何实现数据库操作的?

雨燕双飞 提交于 2019-12-05 06:22:16
Mybatis源码解析(四) —— SqlSession是如何实现数据库操作的?   如果拿一次数据库请求操作做比喻,那么前面3篇文章就是在做请求准备,真正执行操作的是本篇文章要讲述的内容。正如标题一样,本篇文章最最核心的要点就是 SqlSession实现数据库操作的源码解析。但按照惯例,我这边依然列出如下的问题: 1、 SqlSession 是如何被创建的? 每次的数据库操作都会创建一个新的SqlSession么?(也许有很多同学会说SqlSession是通过 SqlSessionFactory.openSession() 创建,但这个答案按照10分制顶多给5分) 2、 SqlSession与事务(Transaction)之间的关系? 在同一个方法中,Mybatis多次请求数据库,是否要创建多个SqlSession? 3、 SqlSession是如何实现数据库操作的?    本章内容就是围绕着上面三个问题进行解析,那么带着问题去看源码吧! 一、SqlSession 的创建    在学习Mybatis时,我们常常看到的 SqlSession 创建方式是 SqlSessionFactory.openSession() ,那么我们就拿此作为切入点,先来看看 SqlSessionFactory.openSession() 的方法源码(注意 是

ios审核被拒4.3(马甲包该如何上架)

混江龙づ霸主 提交于 2019-12-05 06:08:47
4.3一般存在3种情况,可以根据被拒回复进行判断,如果你真的看不懂被拒回复,下面一一列举,逐一排除,黑色字体是解决方案 第一种:简称代码重复,代码重复使用也有三种情况 1.可能你之前用这套源码上过一个包,现在用这套代码直接改一个logo跟名字再上一个马甲,这种基本会直接4.3 这种情况基本要改源码,第一步:工程中的文件夹的名字全部进行修改。第二步:每一个工程都有一个类前缀, 我们需要取一个长一点的类前缀, 并且这个类前缀在你的整个工程一定是一个唯一的字符串, 我们假设这个类前缀是PayDayLoan, 现在我们需要生成一个控制器, 控制器的结尾Controller也需要用一个特定的字符去代替, 比如:Director,剩下的View以及object做法类似, 就不一一介绍了,做马甲的时候就是把这些名字用另一个唯一的字符去代替, 尽量长一点。第三步:把另一个其他的工程中的类全部导入进来, 主要是混淆代码, 在现有的工程中调用, 可以没有任何效果, 只是单纯调用方法。 注:单一的加入垃圾代码混淆没用的! 2.如果你的这套源码在一个账号上提交过,但是被拒了,后来因为其他原因你不得不在别的账号上重新提交此源码,这种情况第二个账号基本也会报4.3 这种情况需要在第一个账号做一下处理, xcode新建一个应用, 直接用之前提交过的bundle Id打包,logo用一个纯白或者纯黑的图片,

iOS代码混淆(MJ)

蹲街弑〆低调 提交于 2019-12-05 05:53:00
i OS程序可以通过class-dump、Hopper、IDA等获取类名、方法名、以及分析程序的执行逻辑 如果进行代码混淆,可以加大别人的分析难度 iOS代码混淆方案 源码的混淆 类名 方法名 协议名 …… LLVM中间代码IR的混淆(容易产生bug) 自己编写Pass ollvm: https://github.com/obfuscator-llvm/obfuscator 源码的混淆-通过宏定义混淆方法名、类名 注意点 不能混淆系统方法 不能混淆init开头 的等初始化方法 混淆属性时需要额外注意set方法 如果xib、storyboard中用到了混淆的内容,需要手动修正 可以考虑把需要混淆的符号都加上前缀,跟系统自带的符号进行区分 混淆过多可能会被Appstrore拒绝上架,需要说明用途 建议 给需要混淆的符号加上了一个特定的前缀 ​​​​​​​ 小工具,李明杰的 https://github.com/CoderMJLee/MJCodeObfuscation ios-class-guard 第三方工具 https://github.com/Polidea/ios-class-guard 它是基于class-dump的扩展 用class-dump扫描出可执行文件中的类名,方法名,属性名等并做替换,会更新xib和storyboard名字 用法 brew install ios

mybatis源码分析之05一级缓存

≡放荡痞女 提交于 2019-12-05 05:22:08
首先需要明白,mybatis的一级缓存就是指SqlSession缓存,Map缓步! 通过前面的源码分析知道mybatis框架默认使用的是DefaultSqlSession,它是由DefaultSqlSessionFactory创建的,下面是源码 private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) { Transaction tx = null; try { final Environment environment = configuration.getEnvironment(); final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment); tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit); final Executor executor = configuration.newExecutor(tx, execType); return

dubbo序列化过程源码分析:

試著忘記壹切 提交于 2019-12-05 05:12:53
先看下dubbo在serialize层的类设计方案 序列化方案的入口,是接口Serialization的实现类。 /** * Serialization. (SPI, Singleton, ThreadSafe) * 默认扩展方案是 hessian2 也是dubbo协议默认序列化实现 * @author ding.lid * @author william.liangf */ @SPI("hessian2") public interface Serialization { /** * get content type id * 序列化标识 具体每个spi扩展方案指定一个固定值 * @return content type id */ byte getContentTypeId(); /** * get content type * * @return content type */ String getContentType(); /** * create serializer * 获取一个具体序列化实现实例 * @param url * @param output * @return serializer * @throws IOException */ @Adaptive ObjectOutput serialize(URL url, OutputStream output)

springcloud源码解析(目录)

两盒软妹~` 提交于 2019-12-05 05:12:08
  springcloud是一个基于springboot的一站式企业级分布式应用开发框架。springboot为其提供了创建单一项目的便利性,springcloud组合了现有的、常用的分布式项目的解决方案,融合为一个全家桶。对于中小企业来说,这将使其轻易就能够构建出分布式应用。    对于研发人员来说,学会使用它并不是最终目的。spring带来的东西总是值得被拿来学习的,从源码得角度靠近spring或者apache一点,对于热衷于代码的程序员还是很有意思的。   本系列文章,将开始学习了解一些springcloud源码相关的东西,也希望通过这种记录的方式来一点点分解得破开springcloud的迷雾。    目录:   辅助阅读      1、 springboot启动流程源码解析     2、 restTemplate源码解析   eureka服务发现     1、eureka服务端自动配置     2、eureka服务端注册服务     3、eureka服务端查找服务     4、eureka服务端集群分发     5、eureka客户端自动配置     6、eureka客户端注册服务     7、eureka客户端查找服务     8、eureka客户端调用服务    feign接口调用   ribbon客户端负载均衡   hystrix熔断   zuul网关  

记录:IDEA搭建 Dubbo+Zookeeper +Spring MVC

久未见 提交于 2019-12-05 05:01:22
记录一下集成过程,不赘述为毛要用dubbo,有兴趣的可自己去了解: dubbo源码地址 不想看啰嗦的过程可以直接看源码: 我是demo源码 额,zookeeper安装也不在此文里面说明,开始之前确保zookeeper是启动状态,具体顺序: 启动zookeeper------>启动tomcat---------->服务提供者注册---------->消费服务者注册 下面直接入戏: 第一步:修改本地tomcat端口号避免端口占用错误,修改三个地方 默认是8005,可随意修改,我这里修改成18005 默认8080,修改成8180 默认8009,修改成18009 修改完成保存 第二步: 下载dubbo-admin源码,链接 dubbo-admin源码 导入项目并生成dubbo-admin-2.0.0.war 生成成功 拷贝dubbo-admin-2.0.0.war到tomcat的webapp目录下面 命令行运行tomcat: 第三步:打开浏览器输入http://localhost:8180/dubbo-admin-2.0.0/,用户名密码均为root 第四步创建一个springmvc聚合项目,下图是整个项目目录结构 1、项目工程说明: demo-common:公共模块 demo-child:子功能模块 demo-child-api:子功能模块接口,对外提供接口 demo-child

获取dubbo源码编译并导入idea以及启动入门项目dubbo-demo

橙三吉。 提交于 2019-12-05 04:59:56
一直想研究下dubbo,然后就动手开始干啦。。 首先说一下dubbo说明文档的一些坑,按照文档部署不一定能部署起来,不过它是一个基本的参考,建议部署dubbo是参考dubbox的部署说明。很神奇。 1、下载zookeeper并部署 下载地址 http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.10/ 下载后解压并编辑conf/zoo.cfg文件 这是我的文件内容 # The number of milliseconds of each tick tickTime= 2000 # The number of ticks that the initial # synchronization phase can take initLimit= 10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit= 5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=D:\\zookeeper\

TabSheet源码

痴心易碎 提交于 2019-12-05 04:50:21
TabSheet.h #if !defined(AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_) #define AFX_TABSHEET_H__42EE262D_D15F_46D5_8F26_28FD049E99F4__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // TabSheet.h : header file // ///////////////////////////////////////////////////////////////////////////// // CTabSheet window #define MAXPAGE 16 class CTabSheet : public CTabCtrl { // Construction public: CTabSheet(); // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CTabSheet) //}}AFX_VIRTUAL //

LinkedHashMap源码学习

≯℡__Kan透↙ 提交于 2019-12-05 04:28:14
描述 可以按照添 加元素的顺序 对元素进行迭代的 HashMap 的子类. 注意,上面说的是 加元素的顺序 .也就是说, 更新元素 时,是不会影响遍历结构的的.除非设置参数 accessOrder 为 true ,将更新元素放置到 队末 . 这个类没有对其父类 HashMap 进行过多重写.主要通过实现 afterNode* 相关方法,在数据结构变更后,进行后置的 链表 结构更新进行维护. 常用与关键方法 linkNodeLast 方法 描述: 负责初始化成员变量 head 与 tail . 当 head 与 tail 初始化完成后,负责将目标元素 p 连接到 tail 并更新原有 tail 到目标元素 p 代码: private void linkNodeLast(LinkedHashMap.Entry<K,V> p) { // 缓存尾部 LinkedHashMap.Entry<K,V> last = tail; // 更新尾部到新元素 tail = p; // 判断老尾部是否已经初始化 if (last == null) // 老尾部为初始化,代表头部也没初始化.进行初始化操作 head = p; else { // 初始化以完成,将p链接到老尾部之后 p.before = last; last.after = p; } } transferLinks 方法 描述: 使用