测试驱动开发的程序员都不擅长使用调试器,因为他们不经常使用调试器,他们经常打交道的是自己刚刚写好的测试。那么是不是这样写出来的代码就一定没有 bug,完全不需要调试呢?...那么问题来了,你怎么能保证你已经写好并且正确运行的生产代码在经过你的二次修改后行为不被改变呢?同时为了让其易于测试,你可能要打破耦合、添加抽象、增加函数...太烦了,明明它现在可以工作啊!...这里通过的所有测试只给出了一个信息:被测到的功能没有被破坏。那么,那些没有被测试的功能呢?你有没有信心说我的测试全过了,我的代码可以部署了?...设计 [decoupling] TDD 的全称是什么?是的,Test-Driven Development。但是在公司里,我听到了他的另一个名字 - Test-Driven Design。...假如你在代码库里看到烂代码,你的第一个念头是“清理”一下,但转念一想,现在它是工作的,万一我改动以后不工作了怎么办,还是随它去吧。说白了这是一种恐惧心理,恐惧来源于没有安全感,没有安全感来源于未知。
如果不能,我希望这篇回答能让你意识到自己Python知识还存在哪些不足,在之后的学习中,从哪些方面去改进。 精通是个伪命题 怎样才算精通Python,这是一个非常有趣的问题。...能够写出Pythonic的代码(什么是Pythonic的代码,请看我在另一个问题下的回答:怎样才能写出pythonic的代码? – 知乎用户的回答) 2. 对Python的一些高级特性比较熟悉 3....关于数组和链表的知识,我想大家都知道了,这里就不再赘述。如果我们在写代码的过程中,对于自己最常用的数据结构,连它的时间复杂度都不知道,我们又怎么能够写出高效的代码呢。...写不出高效的代码,那我们又怎么能够声称自己精通这门编程语言呢。 既然list是一个数组,那么,我们要使用链表的时候,应该使用什么数据结构呢?...一个在while循环或for循环中: ? 另一个在try…except语句中: ? 那么,哪一个是好的设计,哪一个是不好的设计呢?
如果不能,我希望这篇回答能让你意识到自己Python知识还存在哪些不足,在之后的学习中,从哪些方面去改进。 精通是个伪命题 怎样才算精通Python,这是一个非常有趣的问题。...我的观点是,要求精通Python的岗位都是全职的Python开发,Python是他们的主要使用语言,要想和他们成为同事,你至少需要: 能够写出Pythonic的代码(什么是Pythonic的代码,请看我在另一个问题下的回答...关于数组和链表的知识,我想大家都知道了,这里就不再赘述。如果我们在写代码的过程中,对于自己最常用的数据结构,连它的时间复杂度都不知道,我们又怎么能够写出高效的代码呢。...写不出高效的代码,那我们又怎么能够声称自己精通这门编程语言呢。 既然list是一个数组,那么,我们要使用链表的时候,应该使用什么数据结构呢?...那么,哪一个是好的设计,哪一个是不好的设计呢?要回答这个问题,我们先来看一下在大家固有的观念中,else语句起到什么作用。
前言 今天将向大家介绍一下SDL中的多线程的使用。通过下面对SDL 线程与锁相关的API介绍,你会发现,它与 Linux, Windows相关的API几乎是一模一样的。...我觉得这个小节的标题就是一个废话。不过为了文章的完整性,还是简单的说一说吧。多线程(多进程)是啥意思呢?...在操作系统上提供了锁的概念来达到互斥与同步。 锁的种类 在操作系统上有很种锁,有读写锁、自旋锁、可重入锁等。下面我简单的介绍一下它们之间的不同。 读写锁: 分为读锁与写锁。...所谓读锁就是被访问的资源只要你不改变它的值,你就可以访问,但如果你想改变它,那么就需要等所有读它的线程都释放了它们的锁后,才可以进行修改;写锁是同一时刻只能有一个人访问,当资源被加锁后,其它人只能等待。...下面我们来看一个简单的例子吧。 例子 下面这个例子是在主线程中创建了一个子线程。然后主线程就一直等待子线程结束。等子线程结束后,主线程也随之结束。
(手动狗头)好了,好了,下面的总结可能不是一块知识点的,而是我目前以来感觉会漏掉的知识点,有可能是提高程序效率的,为了查找方便,我都列了标题,或许我的整篇文章只有一处帮到了你,那么也是有意义的,下面我们进入正题...,一开始我以为这是他们自己为了省事,少写一个括号,但当我看到他们的题时,我觉得错误不在他们,有一些老旧书籍,就比如一些学校教程,百年不更,会使用下面的写法,同样从老旧的书上抄下下列代码讲给同学,刚学习这门课的人就好像所有人小的时候...,他认为最先出现在他视野里的就是正确的,第一幅图是我从群里找到的,是一个作业app,先不说代码排版,就说第一行的头文件问题,都可以这样写出来,我认为他就不应该出来误人子弟。...//如果把常量放在左边呢 if(MAX = num){} //编译器报错了 变量怎么能赋值给常量呢 5....字符判断替代品 如果你判断输入的字符是数字还是26个字母,再或者标点符号,还在使用if,那么我想这个库会很好的帮到你。 它存在于头文件cctype中。
而且我非常喜欢那些组织得很好的代码,我可以很容易和安全地改变它以适应新的需求。 因此,如果软件工程的目标是正常运作的、可理解及可维护的软件,那么顺着这个逻辑提出的问题是:函数式编程能帮助我们实现它吗?...这是一个不那么典型的示范,但还有许多更能说明问题的现实范例,函数式程序员会很认同它们的。 这是 FP 的流氓行为,也证明了代码是“纯函数式“并不意味着就一定有什么价值。...我们现在有两个纯粹的函数式程序,都是用同样的语言编写的,但两者之间却有天壤之别。 这是什么原因呢?...换句话说,作为试图改进自己技术的软件工程师,我们不应该仅仅因为某个东西是“函数式的”或“纯函数式的”就崇拜它或为它辩护。虽然使用函数式编程的技术有可能写出好代码,但也有可能写出坏代码。...函数式编程不是答案 在给好代码下定义时,我没有提到任何与函数式编程、静态类型或其他很多东西相关的内容,因为这些“只是”达到目的的手段。有时这些手段可以帮助我们创建、理解和编排正确的代码。
这两个东西一个叫具名参数,一个叫默认参数,默认参数很好理解,如果你不选套餐,那么我们就给你一个默认的汉堡薯条加可乐的意思;具名参数呢,就是传参的时候你可以明确告诉函数你传入的某一个参数是给谁的:皑?...这二者从功能上也类似,一个是移除 List 中第 index 个元素,另一个则是移除 List 中指定的元素 o,都是移除。...(3); ... ints.remove(5); ints.remove(0); 你知道这是在移除元素 5 呢还是在移除第 5 个元素呢?...Java 视角看 Kotlin 的默认参数 Java 中是没有默认参数的,那么在 Java 中要怎样调用 Kotlin 中使用了默认参数定义的函数或者方法呢?...: class MyArrayList(): ArrayList(){ ... } 那么问题来了,我如果想在 Kotlin 当中写出下面的代码: val myIntList =
由于测试用例与数据集是分开的,因此我们可以轻松修改特定功能的测试用例,而无需对代码进行大量更改。例如,如果您想修改用于登录功能的代码,则可以只进行修改,而不必同时修改同一代码中的任何其他相关部分。...例如,如果我必须检查登录到网页,那么我可以将用户名和密码凭据集保留在excel文件中,并将凭据传递给代码以在单独的Java类文件中在浏览器上执行自动化。...出于演示目的,我创建了一个名为“ LoginCredentials”的Excel文件,其中的用户名和密码已存储在不同的列中。 ? 查看下面的代码以了解测试用例。...在这种方法中,我创建了另一个名为“ ReadExcelFile”的类的对象实例。在实例化该对象时,我已经提供了包含数据的excel文件的路径。...现在,基于excel文件中方法名称的存在,将从另一个类中调用这些方法。同样,为了读取excel文件并发送回结果,我编写了另一个Class。它们都显示在下面。 调用方法的类文件就是这个。
,所以它的变量名pfarr要先与[]结合。...根据转移表概念可知,它本质是一个存放地址的数组,通过地址可以实现跳转调用。那我们想一下,函数指针数组本质是不是也是一个存放地址的数组呢,只不过它存放的是函数地址,可以实现对函数的跳转调用。...根据上文我定义了四个函数计算加减乘除,那我们可不可以利用函数指针数组和转移表的知识设计一个计算器呢。...函数回调允许一个函数在不同的时间或不同的位置调用另一个函数,而无需在代码中显式地指定要调用的函数。通过将函数指针作为参数传递给另一个函数,调用者可以在需要时灵活地调用被传递的函数。...那么接下来就讲一下bsort函数的运行原理: 它是基于冒泡排序实现的,所以我就讲解一下它与冒泡排序不同的部分(我后面会单独出一章讲解C语言基本排序算法) 1.if条件语句中条件判断不一样,因为基本的冒泡排序算法大多情况是用来排序整型数据的
我怎么能变呢,我还是那个老李:就算整个晋西北乱成了一锅粥,我还是我,是颜色不一样的烟火,当年那个十里八乡有名的俊后生,当年雪上草地里背过锅,二营长意大利炮扛上来,老子打得就是他精锐,别说它一个板田联队,...硬核,风骚,还带着那么一丝丝小帅。就算说变,那也仅仅可能是在向「真*谢顶道人」的方向变,真到那个时候我就改号为「秃顶法师」。 恒河水一口下了肚,今天要搞一波儿流。...一个是坦克,另一个是坦克行车记录仪 一个是航母,另一个是航母雨刮器 一个是潜艇,另一个是潜艇风湿活血理疗仪 一个是飞机,另一个是飞机耐磨防刮漆 也就是说信号量和共享内存是分不开的,要用也是搭配着用...其中sem前缀的是信号操作相关函数,shm前缀是共享内存相关函数。 我曾经在网上看到过一个中论调,大概是说「php-fpm这种unix socket通信方式不稳定」而且还感染了相当一批人,但是通篇也没有看到这种论调的论据是什么: 言论自由没问题,言论是否要负责呢
以缩进来表示代码块,是python的特色,对养成好的编程习有非常大的帮助,那么python如何缩进呢?...它认为凡是它提供给你的,都是给你用的,只要符合它的语法规范,随便怎么用都可以。如果你能写出烂代码,那说明这个设计有问题。这是一种负责任的态度。...我觉得这是妨碍PSP流行的最重要的原因。 不可否认,python的代码一旦缩进乱了,是无法重新格式化的。...按照约定俗成的管理,应该始终坚持使用4个空格的缩进。 缩进的另一个好处是强迫你写出缩进较少的代码,你会倾向于把一段很长的代码拆分成若干函数,从而得到缩进较少的代码。...我下面以if选择结构来举例。if后面跟随条件,如果条件成立,则执行归属于if的一个代码块。 先看C语言的表达方式(注意,这是C,不是Python!)
一段代码(文档,测试,注释)如果要被复制,那么它的逻辑就该被抽取出来,单独成文。这几乎是重构最基础的实践。然而,这个问题,从小公司到大公司,几乎是每个系统最严重的问题之一。...在我以前工作的公司,我维护过一个超过 5000 行的 C 函数,里面的 if-else 层层嵌套下的 copy&paste 让人叹为观止,添加一点逻辑需要检查七八个地方是否需要同样的逻辑,完全可以入选教材作为经典的反面案例...如今,感谢包括 GoF,Martin Fowler,Kent Beck,松本行弘等大师的不懈努力,以及程序君猫在角落里不断地摇旗呐喊,代码的 DRY 越来越得到重视。这很好。那么测试代码呢?文档呢?...如果说上面所述的是纯粹的代码重构,那么这里就是用户体验的重构。程序员的代码是什么?是一个程序员为另一个程序员精心打造的产品!...严格自律与他律 稍微大一点的软件项目是多人一起合作完成的。
大家好,又见面了,我是你们的朋友全栈君。 LearnJava 在线 这是一个非常不错的学习 Java 的在线网站,纯免费。...这是一个个人项目,旨在通过简单有效的在浏览器中进行练习让你快速掌握 Java 编程语言。通过直接从网络浏览器运行实际代码,你无需在本地安装和执行代码就可以尝试编码,这无疑提高了编程效率和上手效率。...StackOverflow 是一个与程序相关的 IT 技术问答网站。用户可以在网站免费提交问题,浏览问题,索引相关内容,在创建主页的时候使用简单的 HTML。...官网: https://dzone.com/ LeetCode LeetCode 是一个很牛逼的刷题网站,它的重要性不用我多说了吧 看到这个界面就爱了,里面包括大量的算法题,这些算法题是大厂面试必出的题型...官网: https://www.coursera.org/ Java World Java World 是一个纯 Java 学习网站,它里面包括很多 Java 文章,它不同于 DZone 的领域那么多,
近日,Guido 上了一档英文播客节目(时长 30 分钟),谈论了他正在做的与高性能相关的工作,解答了几个问题。播客作者整理了一份内容纪要,本文是对该纪要的翻译。...Guido:在某种意义上,它对我来说是一个相对舒服的话题,因为这意味着与 Python 的核心打交道,而我对这方面还算熟悉。...然后我关注了机器学习,但这需要花很多时间来做一些与 Python 无关的事情,甚至它与 Python 相关的部分就很少。...2、Mark Shannon 关于 Python 性能的那些想法有何不同,怎么能说服你去实现它们的呢? Guido:我喜欢他思考问题的方式。...这意味着,所有的事情都在运行时的某个时刻发生,那么,哪个部分是所谓的即时(Just-In-Time)呢? 另外,人们通常认为 JIT 会自动地使所有代码变得更好。
,因为hashCode()方法返回的是一个固定值0,所以在进行判断的时候hashCode值永远相同从而多次调用equals()进行判断,那么我们就可以尽可能地使hashCode值不相同,那么哈希值和哪些内容相关呢...因为它和对象的成员变量值相关,所以我们可以进行如下措施: 如果是基本类型变量,直接加值; 如果是引用类型变量,加哈希值。...super K>) key; 根据我们刚才的程序分析,这里的key就是我们传入的Integer对象,那么它是怎么能够将Integer对象强转为Comparable对象的呢?...这是二叉树的存储规则,第一个元素作为根结点,然后接下来的每个元素都先与根结点比较,大于根结点则作为右孩子,小于根结点则作为左孩子;如果位置上已经有元素了,则要继续与该元素比较,比它大作为右孩子,比它小作为左孩子...因为在TreeSet的构造方法中需要传入一个Comparator的对象,而这是一个接口,所以我们自定义一个类实现该接口,那么我们来实现一个需求,根据姓名长度进行排序: public class MyComparator
前言 这篇文章,我们继续来看几道题,今天是与链表相关的面试题。 每一道题,我们都要争取找出最优的算法来实现。...我们看到题目中给的是单链表: 不过单链表的删除我们在之前单链表的文章里也讲了: 那它的缺点在于: 首先如果单链表不带头(哨兵位),且要删除的元素是首元素,即头删,我们是需要单独处理的,...思考 刚才的思路我们创建了一个新链表,将需要保留的结点尾插到了新链表里。 那大家想一下,这是不是和上一篇文章那道题的第2种思路开辟一个新数组一样,是一种空间换时间的做法呢? 显然不是的!...其实刚才我们的图里画的是不带哨兵位的。 那有什么区别呢? 其实这道题你选择这两种结构哪一个都可以,带哨兵位的好处就是插入第一个元素,即头插的时候,可以方便一点,如果不带哨兵,头插需要单独处理。...并不是,因为还有另一个链表没有处理完,循环结束之后我们只需要把另一个链表的剩余元素链接到尾插的新链表后面就行了。 另外,还需要⚠注意什么呢?
,总是推荐国内的没什么意思,这里也算是带大家拓展一下视野吧,看看国外的网站是怎么做的,有没有什么可以借鉴的地方,话不多说,走起~ LearnJava 在线 这是一个非常不错的学习 Java 的在线网站,...这是一个个人项目,旨在通过简单有效的在浏览器中进行练习让你快速掌握 Java 编程语言。通过直接从网络浏览器运行实际代码,你无需在本地安装和执行代码就可以尝试编码,这无疑提高了编程效率和上手效率。...StackOverflow 是一个与程序相关的 IT 技术问答网站。用户可以在网站免费提交问题,浏览问题,索引相关内容,在创建主页的时候使用简单的 HTML。...官网:https://dzone.com/ LeetCode LeetCode 是一个很牛逼的刷题网站,它的重要性不用我多说了吧 ?...官网:https://www.coursera.org/ Java World Java World 是一个纯 Java 学习网站,它里面包括很多 Java 文章,它不同于 DZone 的领域那么多,Java
关于开发中常见的状态页组件,我们已经见了很多,但是在 JetPack Compose 中该如何去写呢?虽然也有大佬写了相关demo ,但是如果要应用到实际中,不免有些捉襟见肘 。...看完基本条件,其实也都不难,在 View 中设计一个状态页组件,大家都知道怎么做,但是 Compose 呢? 那么我们下面就开始构思一下,如何设计这个状态页组件 StateX。...因为 compose 是声明式的编程思想,即我们可以理解为数据驱动,所以最简单的做法: 定义一个变量,然后每次更改这个变量,变量改变之后,相应的使用这个变量的地方就会触发重组,于是我们可以随手写出下面的伪代码...可以做,但是怎么做呢?虽然我知道这样能做,但是具体该怎么封装好呢? 于是有没有一个简便的,封装好的组件供我参考或者拿来就用呢?...但是 compose 与 view 的配置项怎么设置呢? 因为两者的配置肯定不同,那么有没有一种方式也能统一这两者的设置。 为了便于设置,我定义了一个 StateX 的静态类。
关于开发中常见的状态页组件,我们已经见了很多,但是在 JetPack Compose 中该如何去写呢?虽然也有大佬写了相关demo ,但是如果要应用到实际中,不免有些捉襟见肘 。...因为 compose 是声明式的编程思想,即我们可以理解为数据驱动,所以最简单的做法: 定义一个变量,然后每次更改这个变量,变量改变之后,相应的使用这个变量的地方就会触发重组,于是我们可以随手写出下面的伪代码...可以做,但是怎么做呢?虽然我知道这样能做,但是具体该怎么封装好呢? 于是有没有一个简便的,封装好的组件供我参考或者拿来就用呢?...基础层-Basic 设计 既然要支持 compose 与 View ,那么基础需要哪些功能呢?...但是 compose 与 view 的配置项怎么设置呢? 因为两者的配置肯定不同,那么有没有一种方式也能统一这两者的设置。 为了便于设置,我定义了一个 StateX 的静态类。
哪怕通常不会发生,但系统(或交互系统)其他部分的bug可能会导致事件发生呢。 2.过早。这是第一点“事件顺序”的一个特例,但它确实会引起一些棘手的bug,因此我把它单独拎出来说明。...例如,如果信令消息在配置和启动程序完成之前就被过早接收,那么可能就会有很多奇怪的行为发生。另一个例子:连接在被放进空闲列表之前就被标记为down。...在调试这类问题时,我们总是假定在空闲列表中的时候连接被设置为down(但当时为什么不把它放到列表外面呢?)。这是我们思考的不足,没有考虑到有时候事情会过早发生。 3.悄无声息的故障。...此外,如果你在if语句的分支中设置变量,那么或许你在另一个分支中也要设置。与此种情况相关的是标记被设置的情况。只添加用于设置的标记的条件不难,但是很容易忘了添加当标记应该再次重置时的条件。...所以,除非我在重新启动之前能够测试超过100次(事实是我没有),否则我在测试时就不会发现这个问题。 调试 14.讨论。帮助我最多的调试技术是与同事讨论问题。
领取专属 10元无门槛券
手把手带您无忧上云