公司原有项目中,因为以前赶时间,有些地方做的稍微粗糙了一些,某些地方存在 N+1查询问题。最近这两个月再做一个新项目。所有,以前踩过的坑,希望这次能尽量避免。比如 N+1查询问题。
公司技术方面,Dao 层使用的是 Spring JdbcTemplate;数据库使用的是 MySQL。所以,关于这次的主题,D瓜哥 也只关注 Spring JdbcTemplate 和 MySQL。
从出坑到入坑
讲述解决办法之前,D瓜哥 先说明一下背景问题:一个订单 Order
中,会有多个订单元素 OrderItem
,在查看订单列表时,需要根据订单 ID 查询相关的订单元素信息。查询方式有两种:一、在循环中,每次循环根据一个订单 ID 查询一个订单对应的订单元素信息。这就是典型的 N+1查询问题。另外一种方式,根据查询出来的所有的订单 ID 一次查询出所有相关的订单元素信息。显然,第二种方式要比第一种方式效率上高很多。这是基本的背景问题。下面来说明一下 D瓜哥 在解决这个问题过程中犯的错误以及更好的解决办法。
看到上述问题时,D瓜哥的第一反应就是使用 IN
就可以很好地解决。开始噼里啪啦写代码:
String sql = " SELECT * " +
" FROM `order_item` " +
" WHERE order_id IN ( ? )";
List<OrderItem> orderItemList = getJdbcTemplate().query(sql, new BeanPropertyRowMapper<OrderItem>(OrderItem.class), orderItemArray);
结果一运行,代码妥妥地 阅读全文…
公司项目中使用到了 Redis Sentinel。以前只用过 Reids。所以,也只了解 Redis 的关闭和启动。至于 Redis Sentinel,那就抓瞎了。每次使用,都是先用现查,特别麻烦。这次在查资料时,在 Github Gist 上查到一个非常不错的启动脚本,可以非常方便地解决这个问题。分享给大家,希望对大家有所帮助。另外, 推荐大家认真阅读一下 阅读全文…
最近玩一个 Rails 项目,项目中使用了 PostgreSQL 数据库,正好借此也了解一下 PostgreSQL 。
对于 Ubuntu 系统,阮一峰老师的文章已经非常详细地介绍了关于 PostgreSQL 的安装使用。但是,在 Mac 上有些细节却不是很适用。在上网找资料的时候,各种资料也是零零碎碎,查找起来极不方便。正好整理成文,分享出来,方便自己,也方便需要的朋友参考。
坑已经挖好。听口令:预备,跳……
Homebrew 安装
工欲善其事,必先利其器。D瓜哥准备用 Homebrew 安装 PostgreSQL。所以,我们先来介绍一下 Homebrew 。Homebrew 可以说是 Mac 上居家旅行之必备神器!上可以装软件,下可以一键更新,实乃方便至极!
这样的神器,安装也非常简单,这么娇艳欲滴,实在让人爱不释手啊:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
其实,本来不想加上 Homebrew 的安装了 阅读全文…
上周三(2014年11月5日)公司搞入职培训,所讲的一些东西和我关注的东西有点“不谋而合”,感觉很爽;周四蔡导(当然就是讲师了)把讲座的PPT群发到技术部邮件组里,参与讨论时,我就询问想推荐一些书,看大家感不感兴趣,结果不少人回应很“激烈”。到周五(2014年11月7日)在公司技术群里求推荐好书,又掀起来一波热潮。大家推荐了不少好书。中国向来是礼仪之邦,正所谓来而不往非礼也!D瓜哥也来推荐一些书。
上面是废话,下面开始转入正题。
推荐原则
从去年找工作,甚至再往前,从上大学开始,到现在为止,翻过不少书(好多没看完,姑且叫翻吧),运气还算不错,确实遇到一些不错的好书,值得反复阅读,细细品味。不过,一次太多,容易把人吓着,所以,暂且推荐十本吧。
另外,这次的介绍主要是面向公司内部同事,考虑到公司所用技术方向,也为了照顾大多数人,推荐的书籍大部分不限于某一语言。不过,因为本人几乎一直从事Java开发,所以,相对来说可能稍微侧重一些;另外,因为从来没有从事过PHP的开发(为了优化博客,折腾Wordpress不算),所以不推荐专门的PHP相关书籍。
最后一个,也是最重要的原则:D瓜哥看过、试过之后有一种“醍醐灌顶”的“顿悟”感。(当然,D瓜哥水平有限,所以“顿悟”的可能比较频繁。这个,牛人、大拿可以直接飞过去了。呵呵)
先说明一下,这本书的代码是用C#实现的,搞C#的人可以先高兴一下。
不过,代码都很浅显易懂,可以很方便地“迁移”到其他语言了。所有的技术人员都可以高兴一下了。哈哈
引用本书中的一句话:如果说数学是思维的体操,那么设计模式就是 阅读全文…
分类: Java, 动态语言, 挨踢(IT), 数据库, 职场生涯, 轶事趣闻 标签: Java, MySQL, Ruby, 性能, 数据库, 程序员
数据库对于服务端开发人员来说,几乎就是左膀右臂。几乎每一个服务端开发人员都要和数据库打交道。而MySQL又以其开源免费,小巧玲珑,简单易用,功能强大占据中国数据库使用份额的半壁江山。从去年接触到Vagrant以来,Vagrant以其方便易用深深吸引了D瓜哥。为了尽可能地和生产环境保持尽可能的一致性,减少不必要的问题的发生,Vagrant+Ubuntu+MySQL几乎是绝配。
MySQL允许远程访问的设置
-
注释bind-address = 127.0.0.1
>cd /etc/mysql
>sudo vim my.cnf
将 阅读全文…
2013年已经过完了。在2013年里,对D瓜哥来说最重要的一件事情就是面试,长达半年的面试(2013年5月10日离职到2013年11月15日上班)。至于找工作的时候经常玩,这种丢脸的事情,我会到处张扬吗?别人都去写年末总结了,D瓜哥也想写,但是还没动手。所以,滥竽充数,把以前面试时整理的一些面试题拿出来权当年末总结吧。这是D瓜哥2013年10月18日面试时,被问的问题和“昨天面试被问到的一些问题”有不少区别的,而且也确实有一些是我自己不太确定或者说研究得不够透彻。所以, 阅读全文…
分类: Java, Linux, 挨踢(IT), 数据库, 职场生涯 标签: HTTP, Java, JavaScript, Linux, Network, Web, 数据库, 面试
昨天D瓜哥参加了一个Java工程师面试,具体公司名称就不透露了。感觉被问的问题挺有代表性。简单整理一下,发布出来,给需要的朋友一个参考吧。暂时没有解答,抱歉!
-
以前工作中收获最大的一次经历是什么?
这里只说明一下收获吧。
- 高性能网站的十四条黄金法则
- 高性能JavaScript
-
所需知识哪些 阅读全文…
动员令
您有没有因小小的MySQL支撑互联网80%以上的业务而惊奇?您有没有觉得MySQL是多么神秘而美丽?您有没有为开源贡献一份力量的热心?您有没有意识到翻译一份中文版本的MySQL文档的重要性?帮助更多的人学习和提高,从手册开始。
请加入我们!将 MySQL5.6 的手册 翻译成我们的母语中文,让全世界五分之一的人口不再因为MySQL文档是英文的而蛋疼!(考虑到性别因素,可能是十分之一,:))让全世界五分之一的人口可以使用自己的母语阅读MySQL手册!
我们的目标是翻译 MySQL 5.6 的手册。我们的核心是以译促学,提高自身MySQL技能。既可以为开源社区做贡献,又可以提高自身知识水平。一举俩得,何乐而不为?
初步计划
道之所存,虽千万人吾往矣!我们计划 阅读全文…
以前没有攒资料的习惯,这一两年才养成了这个习惯。有次和大学老师聊天,和她说攒了不少资料,她就让我分享给她看。后来和她进一步沟通,觉得整理一下,分给学弟学妹看也许对他们更有帮助。为了这个目标,把资料重新梳理了一下,并且添加了一点我个人对学习方法的理解,分享出来,希望对大家有所帮助!
本文章面向刚刚踏入挨踢行业的新手,高手可以直接飞过!当然,如果有好的资料,或者一些不同的看法,请留言交流!
学习方法论
- 享受学习!寻找学习中的乐子,享受这种乐子!强化学习中的成就感,提高自己对课程,对学习,对生活的自信心!在《只要一部计算机,就可以创造出 阅读全文…
分类: Java, Linux, Web开发, 挨踢(IT), 轶事趣闻 标签: Git, Java, JavaScript, Linux, Ruby, SQL, Web, jQuery, vim, 数据库, 程序员