WTF

何时以及为什么数据库加入昂贵?

て烟熏妆下的殇ゞ 提交于 2020-03-04 21:06:36
我正在研究数据库,我正在研究关系数据库的一些局限性。 我得到大桌子的连接是非常昂贵的,但我不完全确定为什么。 DBMS需要做什么才能执行连接操作,瓶颈在哪里? 非规范化如何帮助克服这笔费用? 其他优化技术(例如索引)如何帮助? 欢迎个人经历! 如果您要发布资源链接,请避免使用Wikipedia。 我知道在哪里找到它。 与此相关,我想知道云服务数据库(如BigTable和SimpleDB)使用的非规范化方法。 看到 这个问题 。 #1楼 当您考虑连接的复杂性类时,决定是否进行非规范化或规范化是一个相当简单的过程。 例如,当查询为O(k log n)时,我倾向于使用规范化来设计我的数据库,其中k是相对于所需输出幅度的。 非规范化和优化性能的简单方法是考虑规范化结构的更改如何影响非规范化结构。 然而,它可能是有问题的,因为它可能需要事务逻辑来处理非规范化的结构化。 关于正常化和非规范化的争论不会结束,因为问题是巨大的。 自然解决方案需要两种方法存在许多问题。 作为一般规则,我总是存储一个可以重构的规范化结构和非规范化缓存。 最终,这些缓存可以帮助我解决未来的规范化问题。 #2楼 您加入表格的顺序非常重要。 如果您有两组数据,请尝试以某种方式构建查询,以便首先使用最小的数据来减少查询必须处理的数据量。 对于某些数据库而言无关紧要,例如MS SQL在大多数情况下确实知道正确的连接顺序。

读《Clean Code 代码整洁之道》之感悟

我怕爱的太早我们不能终老 提交于 2020-02-26 21:56:11
盲目自信,自认为已经敲了几年代码,还看什么整洁之道啊。我那可爱的书架读懂了我的心思,很明事理的保护起来这本小可爱,未曾让它与我牵手 最近项目中的 bug 有点多,改动代码十分吃力,每看一行代码都带一句“这是什么XX代码啊,真XX难改”,这样持续了好几天,有天晚上坐在书房回想这几天发生的一切,仰头定睛思考,我终于和它重新确认了眼神💗 股票见涨你知道买了, 汽车撞墙知道拐了, 孩子死了你来奶了, 大鼻涕到嘴你知道甩了, bug难改知道愤慨了 马上翻开书,前言章节,映入眼帘的就是下面这一张图 代码质量的唯一有效度量是:WTFs(what the fuck)/minute 真的太精辟了,这不就是这几天我白天经历的吗?代码已然是 bad code 了,我们应该怎么面对这种情况呢? 每个公司的规范还不一样,本文是读书笔记,不会说明太多的代码规范,只是阐明我们应该怎样做或者抱着什么样的心态来写代码吧 如果你看到这里,我要引用书中的一句话: 第一,你是个程序员;第二;你想成为更好的程序员。我们需要更好的程序员 专业的态度 做国内项目/产品,通常都是指明deadline的,但是截止到deadline之前,需求量的多少是不固定的,说白了是“以deadline不变应需求万变”,美其名曰「敏捷」 我们经常要面对短期内开发出大量需求的请求,很可能为了快速完成这些需求,胡乱的堆叠代码

django事务失效问题的解决

自古美人都是妖i 提交于 2020-02-26 19:24:34
最近发现在我们的测试环境django事务失效了--! 大概类似于下面这样 from app1.models import Region from django.db import transaction r,_=Region.objects.get_or_create(id=111,name='111') with transaction.atomic(): r.name='33' r.save() raise Exception('11') 执行完到库里查看时,发现库里的name字段已经修改 WTF, django的bug,这代码只能这么简单了。。。 于是重试了django的各个版本,发现django1.11版本之前的没问题,之后的就失效,接着去翻了下django的issue,发现并没有类似的bug,不可能啊,django的2.0版本在两年前就出了,事务不生效算是严重bug呢,怎么可能没人发现。 于是又怀疑测试环境数据库的问题,本地新装了mysql进行测试,这时同样的代码,发现事务又生效了,WTF,WTF......... 怎么回事啊? 接着找到DBA,发现测试环境mysql外新加了层proxysql,那可能是这个的问题哦,于是又一通查,发现proxysql会接收set autocommit=0的命令,但不会送到后端的mysql,就在穷途末路时,去看了下版本的changelog

安全性高,不代表系统做的好

落爺英雄遲暮 提交于 2020-01-07 00:47:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 技术无关,感悟一下 ······································· 前几天在建行办了一张信用卡,今天早上收到了,两张... 什么情况?一张金卡,一张白金限量全球卡,额度却只有区区2.8W... 为什么我只办理了一张卡,邮寄过来两张,而且全是金卡? 而我去银行的目的,是为了修改我的预留手机号码... ······································· 不管怎么样,先开卡再说吧,开卡倒是很顺利,只输入了银行卡号,CVV2,身份证号,然后就开通了。 接下来登录APP看看吧,说不定有什么优惠之类的。 咦...什么情况,登录不了,提示未开通手机银行? 好吧,注册开通... 一阵骚操作,各种验证码,各种密码,各种发短信... 最后提示您已经开通过手机银行... ······································ 可能是刚刚手机银行输入的什么密码或者账号错误了,再次填写... 又是一阵骚操作... 身份证... 信用卡号... 密码... 短信验证码...(PS:建行的短信验证码还需要自己发送短信到95533,然后才能返回验证码短信) 图片验证码.... 各种填完,提示密码错误... WTF ························

为什么不使用表格在HTML中进行布局? [关闭]

╄→尐↘猪︶ㄣ 提交于 2019-12-25 20:54:31
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 人们 普遍认为 ,不应在HTML中使用表格进行布局。 为什么? 我从来没有(或者说实话很少)对此有很好的论据。 通常的答案是: 将内容与布局分开 是很好的 但这是一个谬论。 陈词滥调思维 。 我想这是真的,使用表格元素进行布局与表格数据无关。 所以呢? 我老板在乎吗? 我的用户在乎吗? 也许是我或我的同伴开发人员,他们需要维护网页……表的维护性较差吗? 我认为使用表格比使用div和CSS 更容易 。 顺便说一句...为什么使用div或span不能很好地将内容与布局和表格分开? 仅使用div获得良好的布局通常需要大量嵌套的div。 代码的可读性 我认为这是另一回事。 大多数人了解HTML,很少人了解CSS。 SEO最好不要使用表格 为什么? 有人可以证明它是吗? 还是Google声明从SEO角度不鼓励使用表? 表比较慢。 必须插入一个额外的tbody元素。 这是用于现代Web浏览器的花生。 向我展示一些基准测试,在这些基准测试中使用表会大大降低页面速度。 没有桌子,布局检修会更容易,请参见 css Zen Garden 。 大多数需要升级的网站也需要新内容(HTML)。 新版本的网站仅需要新的CSS文件的情况不太可能发生。 Zen Garden是一个不错的网站,但是有点理论化。 更不用说它对CSS的 滥用 。

异步与同步执行的真正含义是什么? [等候接听]

怎甘沉沦 提交于 2019-12-11 22:03:06
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 异步执行和同步执行之间有什么区别? #1楼 当执行如下序列时:a> b> c> d>,如果在执行过程中遇到失败,例如: a b c fail 然后我们从头开始: a b c d 这是同步的 但是,如果执行相同的顺序:a> b> c> d>,并且中间出现故障: a b c fail ...但是我们没有从头开始,而是从故障点重新开始: c d ...这就是异步的。 #2楼 您将“同步与并行vs系列”混为一谈。 同步意味着所有同时。 彼此相关的同步化意味着可以串联或以固定间隔进行。 在程序执行所有操作时,它会顺序运行。 获取字典...这就是为什么我们有不甜的茶。 您喝茶或加糖茶。 #3楼 同步操作在返回到调用者之前先完成其工作。 异步操作返回到调用方后会执行(大部分或全部)工作。 #4楼 简单来说: 同步 您正在排队购买电影票。 在前面的每个人都得到一票之前,您无法获得一票,排队在您后面的人也是如此。 异步 您和许多其他人一起在餐厅中。 您点菜。 其他人也可以点餐,他们不必等待您的食物煮熟并为您服务就可以点菜。 在厨房,餐厅的工作人员正在不断做饭,上菜并接受订单。 人们将在煮熟后立即食用食物。 #5楼 类推简单说明 同步执行 我的老板很忙。 他叫我写代码。 我告诉他:很好。 我开始了,他像秃鹰一样看着我,站在我的身后

一道神奇的Python面试题,你会吗?

北城余情 提交于 2019-12-06 19:22:10
关注公众号:「 Python专栏 」,后台回复「 爬虫书籍 」,即可获得2本Python爬虫相关的电子书 无意间,看到这么一道Python面试题:以下代码将输出什么? def testFun(): temp = [lambda x : i*x for i in range(4)] return temp for everyLambda in testFun(): print (everyLambda(2)) 脑中默默一想,这还用说么,肯定是: 0 2 4 6 最后一看答案,竟然是: 6 6 6 6 于是带着怀疑的心态(其实是不服输,不认错),打开编辑器,快速一敲,果然是: 怀疑了人生半天,本来还想黑,WTF Python…然后才想通是自己太生疏...... 最后发现原因竟是:Python 的闭包的后期绑定导致的 late binding。 这意味着在闭包中的变量是在内部函数被调用的时候被查找,所以当任何 testFun() 返回的函数被调用,i 的值是在它被调用时的周围作用域中查找。 也就是说无论哪个返回的函数被调用,for 循环都已经完成了,i 最后的值是 3,因此,每个返回的函数 testFun 的值都是 3。 因此一个等于 2 的值被传递进以上代码,它们将返回一个值 6 (比如: 3 x 2)。 究竟如何才能实现出这样的结果呢? 0 2 4 6 想了想,若能立即绑定参数

代码整洁 vs 代码肮脏

空扰寡人 提交于 2019-11-29 18:39:04
写出整洁的代码,是每个程序员的追求。《clean code》指出,要想写出好的代码,首先得知道什么是肮脏代码、什么是整洁代码;然后通过大量的刻意练习,才能真正写出整洁的代码。 WTF/min是衡量代码质量的唯一标准,Uncle Bob在书中称糟糕的代码为沼泽(wading),这只突出了我们是糟糕代码的受害者。国内有一个更适合的词汇:屎山,虽然不是很文雅但是更加客观,程序员既是受害者也是加害者。 对于什么是整洁的代码,书中给出了大师们的总结: Bjarne Stroustrup:优雅且高效;直截了当;减少依赖;只做好一件事 Grady booch:简单直接 Dave thomas:可读,可维护,单元测试 Ron Jeffries:不要重复、单一职责,表达力(Expressiveness) 其中,我最喜欢的是表达力(Expressiveness)这个描述,这个词似乎道出了好代码的真谛:用简单直接的方式描绘出代码的功能,不多也不少。 本文记录阅读《clean code》之后个人“深有同感”或者“醍醐灌顶”的一些观点。 一、命名的艺术 坦白的说,命名是一件困难的事情,要想出一个恰到好处的命名需要一番功夫,尤其我们的母语还不是编程语言所通用的英语。不过这一切都是值得了,好的命名让你的代码更直观,更有表达力。 好的命名应该有下面的特征: 1.1 名副其实 好的变量名告诉你:是什么东西