著名IT作家、译者侯捷老师以前在其著作中有句话,就是我们今天文章的标题「源码面前,了无秘密」。可以说相当精炼。高度概括了从源码中我们可以收获的内容。在源码中,无论是应用的调用逻辑,关系,各种设计都一目了然。
格智集团是集互联网软件研发、服务外包、网游动漫、系统集成和IT高端实训于一体的高新技术公司。目前已经成为四川大型的移动互联网软件开发公司、四川大型网络研发和运营公司。集团围绕产品研发一EE合作一CE合作一人才培养一孵化中心5I发展模式,服务于社会各领域。
公司倡导大雁团队精神,创建最具竞争力的的互联网企业,是格智人的共同目标,在实现这一目标进程中,每一个人都要忠诚自己的团队勇挑重担,发挥潜能,用心做事,在团队中争做“领头雁”;要彼此信任,默契配合,甘于奉献,众志成城,在激烈的市场竞争中搏风击浪攻坚克难,最终在实现企业发展战略目标的同时实现自己的人生价值。
格智科技公司,主要服务于高校合作业务。公司在发展途中坚持五个“共建”方案的实施,将助推人才培养模式一体化的有效实现。
共建“队伍”通过校企共建,着力打造一支新型的“双师型”师资队伍。
共建“计划”与企业共同制订人才培养计划。
共建“课程”专业校企双方按照人才需求设置课程。
共建“基地”按照专业建设和提高人才培养质量的要求,着眼于培养学生的实践能力,学校与企业互动,建设一批融理论教学与实践教学、职业技能训练与鉴定考核、职业资格认证与职业素质培养等诸多功能于一体的校内外实践教学基地。
共建“课堂”一方面,从行业、企业聘请一大批具有丰富实践经验的兼职教师,定期或不定期给学生授课、开设讲座、作学术报告,把来自经营管理第线的最新知识、最新技术、最新经验传授给学生。另一方面,企业为学校」供一大批校外实习基地,并由企业的业务骨干、技术能手、管理精英担任实习指导教师,指导学生写毕业论文和进行毕业设计
为什么会突然想到这样一个题目呢?
是因为最近一个项目上线,其中有几个功能模块使用了 Redis 进行数据的缓存,包括权限信息也在其中。所以每个请求都会通过 Redis 进行鉴权。这块功能是我指导的一个小同学负责开发的。上线几天后出现了这样的问题:
小同学自行 Google了好久没找到问题具体原因。我提供的几个思路也没本质解决问题。不过好在调整配置可以在线下稳定复现。所以我在小同学的电脑上开始debug,跟源码。
和结对编程类似,我一边Debug,我一边给小同学讲 Redis 这个连接池的实现思路,目前怀疑的问题等等。小同学说自己刚才也在试着跟源码,但跟了两层之后,感觉调用越来越深,有点晕,就放弃了。
然后我继续Debug和讲原理,跟到资源使用完毕,在 finally 进行释放回收的地方,发现有处代码在判断当前的 dataSource是否为空,从而执行两种不同的操作。 如果不为空,则会将资源放回pool中,便于下次继续使用,为空则真正的进行close的操作,直接将Socket关闭了。而这两个if/else的逻辑是封装在一个方法中,不跟进来不会发现区别对待。
而且我们当前在用连接池,预期是按连接池的思路,使用完毕的需要释放回池中继续下次的使用,当前这个现象就比较怪异了。
格智集团是集互联网软件研发、服务外包、网游动漫、系统集成和IT高端实训于一体的高新技术公司。目前已经成为四川大型的移动互联网软件开发公司、四川大型网络研发和运营公司。集团围绕产品研发一EE合作一CE合作一人才培养一孵化中心5I发展模式,服务于社会各领域。
公司倡导大雁团队精神,创建最具竞争力的的互联网企业,是格智人的共同目标,在实现这一目标进程中,每一个人都要忠诚自己的团队勇挑重担,发挥潜能,用心做事,在团队中争做“领头雁”;要彼此信任,默契配合,甘于奉献,众志成城,在激烈的市场竞争中搏风击浪攻坚克难,最终在实现企业发展战略目标的同时实现自己的人生价值。
格智科技公司,主要服务于高校合作业务。公司在发展途中坚持五个“共建”方案的实施,将助推人才培养模式一体化的有效实现。
共建“队伍”通过校企共建,着力打造一支新型的“双师型”师资队伍。
共建“计划”与企业共同制订人才培养计划。
共建“课程”专业校企双方按照人才需求设置课程。
共建“基地”按照专业建设和提高人才培养质量的要求,着眼于培养学生的实践能力,学校与企业互动,建设一批融理论教学与实践教学、职业技能训练与鉴定考核、职业资格认证与职业素质培养等诸多功能于一体的校内外实践教学基地。
共建“课堂”一方面,从行业、企业聘请一大批具有丰富实践经验的兼职教师,定期或不定期给学生授课、开设讲座、作学术报告,把来自经营管理第线的最新知识、最新技术、最新经验传授给学生。另一方面,企业为学校」供一大批校外实习基地,并由企业的业务骨干、技术能手、管理精英担任实习指导教师,指导学生写毕业论文和进行毕业设计
为什么会突然想到这样一个题目呢?
是因为最近一个项目上线,其中有几个功能模块使用了 Redis 进行数据的缓存,包括权限信息也在其中。所以每个请求都会通过 Redis 进行鉴权。这块功能是我指导的一个小同学负责开发的。上线几天后出现了这样的问题:
小同学自行 Google了好久没找到问题具体原因。我提供的几个思路也没本质解决问题。不过好在调整配置可以在线下稳定复现。所以我在小同学的电脑上开始debug,跟源码。
和结对编程类似,我一边Debug,我一边给小同学讲 Redis 这个连接池的实现思路,目前怀疑的问题等等。小同学说自己刚才也在试着跟源码,但跟了两层之后,感觉调用越来越深,有点晕,就放弃了。
然后我继续Debug和讲原理,跟到资源使用完毕,在 finally 进行释放回收的地方,发现有处代码在判断当前的 dataSource是否为空,从而执行两种不同的操作。 如果不为空,则会将资源放回pool中,便于下次继续使用,为空则真正的进行close的操作,直接将Socket关闭了。而这两个if/else的逻辑是封装在一个方法中,不跟进来不会发现区别对待。
而且我们当前在用连接池,预期是按连接池的思路,使用完毕的需要释放回池中继续下次的使用,当前这个现象就比较怪异了。