首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

笨办法学 Python · 续 练习 15:栈和队列

你把它放在那儿,但我们也可以使用“推”描述这个动作。如果你想从栈中获取一本书,你可能会抬起一些书,然后抓住一本书,但是最终你可能要从顶部拿出一些书,才能获取底部得数。...你可以从顶部抬起每本书,或者在我们的例子中,我们会说“从顶部弹出一本书”。 如果你想像在银行排队,队列有“头部”和“尾部”,可视化队列是最简单的。...你现在应该花点时间来绘制这些场景,或者实际上得到书籍的栈并测试这些操作。你可以找到与Stack和Queue类似的其他真实情况吗?...在我的设计中,当结构为空时,我设置了self.top = None。这意味着当你达到 0 个元素时,你必须对self.top做一些特殊处理。...一个替代方法是使self.top总是指向一个StackNode(伪造的头节点),并假设当你有这个最后的元素时,结构是空的。尝试它,看看它如何改变你的实现。这样会更容易出错还是更不容易出错?

25420

Gitlab CICD 实践四:Golang 项目 CICD 流水线配置

例如能预估切片的容量时,可以在创建切片时指定容量。 什么是 0 切片或者空切片? 0 切片指的是为 nil 的切片,由于零值可用的特性,可以直接 append。...空切片是指长度为 0 的切片,容量可以不为 0。 内存对齐这个概念有了解吗? 为了减少 cpu 和内存的交付。...一个空的切片跟空的这个map,你去对它去追加元素的时候,它的预期行为是什么? 切片的话 0 值是可用的,你可以直接append。...P 队列为空时,M 也会尝试从全局队列拿一批 G 放到 P 的本地队列,或从其他 P 的本地队列偷一半放到自己 P 的本地队列。...文件描述符的查找是通过红黑树查询的,复杂度为 O(logn) 比如说我们 Linux 服务器登录进去之后,我们觉得它非常的负载非常高,或者比较卡顿,一般怎么去判断它是不是哪里的负载过高呢?

30010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何避免 Java 中的“NullPointerException”

    意识到这个设计问题的开发人员不知道如何解决它。 在本文中,我将解释这个问题的根源并提供解决该问题的方法。 2 问题的根源:Java 弱类型安全 你听说过编译类型安全吗?...所以,从编译器的角度来看,没有错。Null 属于 String 类型,Java 甚至不会打印警告。实际上,您甚至可以编译下一个代码:可编译的代码。...潜在的空指针异常 8 使用 != Null 检查避免 现在,让我们通过简单的检查来防止这个问题,而不是空检查: 简单检查 我们可以改进这个解决方案吗? 是的,我们可以使用 Optional。...10 空检查和可选它们是否解决了问题? 上面显示了两个“解决方案”,它们真的是解决方案吗?Null 检查与 Optional 一起用于相同目的 - 为可能为 null 的数据提供验证。...要使用 Checker Framework,您可以在此处获取我的示例: git clone https://github.com/isicju/checker_framework_example 要运行

    2.9K20

    为什么使用抽象类?有什么好处?

    我非要把它改一改不可。把抽象类中的抽象方法都改为空实现。也就是给抽象方法加上一个方法体,不过这个方法体是空的。这回抽象类就没有抽象方法了。它就可以不在抽象了。...但总是不死心,它应该有点用吧,不然创造Java的这伙传说中的天才不成了傻子了吗? 接下来,我们来写一个小游戏。俄罗斯方块!我们来分析一下它需要什么类? 我知道它要在一个矩形的房子里完成。...所以我们简化它。我抽象出两个必须的类,一个是那个房间,或者就它地图也行。另一个是方块。我发现方块有很多种,数一下,共6种。它们都是四个小矩形构成的。但是它们还有很多不同,例如:它们的翻转方法不同。...那么你可以在父类的翻转方法中不写任何代码,也就是空方法。 我们发现,方法类不可能有实例,它的翻转方法的内容可以是任何的代码。而子类必须重写父类的翻转方法。...这时,你可以把方块类写成抽象类,而它的抽象方法就是翻转方法。当然,你也可以把方块类写为非抽象的,也可以在方块类的翻转方法中写上几千行的代码。但这样好吗?

    1.6K90

    如何在机器学习竞赛中更胜一筹?

    你必须理解它,特别是它如何随着目标变量的变化而变化。 c.确定交叉验证策略——为避免过拟合,确定你在初期阶段已经设置了交叉验证策略。一个很好的CV策略将帮助你在排行榜上获得可靠的得分。...我使用的一些特征选择技术包括: 向前(cv或否)——从空模型开始。 一次添加一个特征并检查CV精度。 如果改进保持变量,否则丢弃。 向后(cv或否)——从完整模型开始,逐个删除变量。...3.你能详细说明交叉验证策略吗? 交叉验证意味着从我的主集中随机地创建了2个集。 我用第一个集建立(训练)我的算法(让我们称之为训练集),并用另一个评分(让我们称之为验证集)。...对于时间敏感的数据,确保你在测试时总是有过去预测未来的规则。 4.你能解释一些用于交叉验证的技术吗?...简而言之,特征工程可以理解为: 特征变换(例如将数字或分类变量转换为其他类型) 特征选择 利用特征交互(比如我应该把变量A和变量B结合起来) 处理空值 处理异常值 34.哪些数学技能在机器学习中很重要?

    1.9K70

    大量参数与信息丢失之间不可不说的故事

    但是从另一个方面来说,之前在我的近期文章当中描述过一些类似的情况,给大家展示了把几个功能几乎一样的方法添加进同一段代码当中的例子。正因如此,我们受益颇多:代码变得更易于理解了。...曾几何时…… 今天我来给你们说说这段黑历史: ? 你可以很容易看出来这个存储方法存储的是什么吗?这个很好理解吗?好吧,就算是可以认出来,但是我们不得不承认这还是很困难的。...难道你还认为这是一种获取信息的便捷方法吗?我们可以不做任何额外的工作就理解某段代码吗?毫无疑问是可以的,这正是我写下这篇文章的目的。...你可以将它视为一个为不同对象服务的盒子,或是一种降低相关性的解决办法。然而对我来说,用这种方法最大的好处在于需要你命名该对象,并且你这样做了之后会被强制提供有价值的信息。 我来展示一下: ?...这样一来读者就可以把注意力放在关键的地方,不会被额外添加的细节所打扰——而这些细节只是你自己写着或者修改方法时有趣罢了。

    42010

    小白科普:线程和线程池

    大师,最近我在学习线程,有很多迷惑的地方。 说来听听,让为师给你排解一下。 ? ? 第一个问题问题就是为什么要多线程啊, 我看了操作系统中的多进程管理,不是挺好的吗? 多线程似乎没有必要啊!...不错,多问问为什么,总是有好处的。所谓线程,就是程序代码的执行,一个进程至少得有一个线程,要不然,这个进程怎么运行? 对吧? ? ? 这个我理解。...以你常用的Word为例,假设这个进程没有多线程(或者说它只有一个线程), 如果它有个定时保存文档的功能,你想象下,当这个自动保存的功能在运行的时候,你还能继续输入文字吗? ? ?...奥,看来线程池中每个线程的run()方法中,要设置一个循环,每次都尝试从BlockingQueue中获取任务,如果Queue是空的,就阻塞等待, 如果有任务来了,就会通知到线程池的某一个线程去处理,处理完了以后...,依然试图从BlockingQueue中获取任务,就这么依次循环下去。

    67730

    小白科普:线程和线程池

    大师,最近我在学习线程,有很多迷惑的地方。 说来听听,让为师给你排解一下。 第一个问题问题就是为什么要多线程啊, 我看了操作系统中的多进程管理,不是挺好的吗? 多线程似乎没有必要啊!...不错,多问问为什么,总是有好处的。所谓线程,就是程序代码的执行,一个进程至少得有一个线程,要不然,这个进程怎么运行? 对吧? 这个我理解。...以你常用的Word为例,假设这个进程没有多线程(或者说它只有一个线程), 如果它有个定时保存文档的功能,你想象下,当这个自动保存的功能在运行的时候,你还能继续输入文字吗?...奥,看来线程池中每个线程的run()方法中,要设置一个循环,每次都尝试从BlockingQueue中获取任务,如果Queue是空的,就阻塞等待, 如果有任务来了,就会通知到线程池的某一个线程去处理,处理完了以后...,依然试图从BlockingQueue中获取任务,就这么依次循环下去。

    72920

    惊艳!可视化的 js:动态图演示 Promises & AsyncAwait 的过程!

    在前面的介绍章节,我展示了一个获得图片、压缩图片、为图片应用过滤器并保存它的例子!最终,这变成了一个混乱的嵌套回调。 幸运的,Promise 可以帮助我们解决这个问题!...---- 顺便提醒一下,当你知道一个 promise 总是 resolve 或者总是 reject 的时候,你可以写 Promise.resolve 或 Promise.reject,传入你想要 reject...当它们返回值的时候,会被从栈内弹出。 当调用栈是空的时,所有排队的微任务会一个接一个从微任务任务队列中弹出进入调用栈中,然后在调用栈中被执行!...被打印到控制台并且console.log从调用栈弹出。 最终,所有的事情都完成了!你注意到async函数相比于promise的then有什么不同吗?...每每看到有很长或者很拗口的句子的时候,我就想按自己的语言来写一篇了 可能自己写一篇都比翻译的快 ?

    2.1K10

    干货 | 国外大神总结的10个Java编程技巧!

    只要我们的Options是真实存在的(Java 8中 Optional是对可以为空的对象进行的封装),不是吗?...所以,-1 就可以理所当然被拿来用,对吗?我说不对,看看这个: ? 谁知道呢。...5 检查 null和长度 不管什么时候你有一个集合、数组或者其他的,确保它存在并且不为空。 ? 你不知道这些数组来自哪儿,也许是早期的JDK API呢?...如果这样做对你来说没有意义,你也可以通过修改或重写字节码来改变类和方法,或者发送功能请求。作为小编,我敢肯定的告诉你重写类/方法并不是一个好主意。...事实上,你甚至可以把case语句和 惊人的FORTRAN77项声明 类比,对于FORTRAN,它的神秘已经超越了它的功能。

    62610

    异步函数中的异常处理及测试方法

    这个话题已被反复提起过几百次,不过这次让我们从TDD的角度来回答它。 如果你能够不在Stackoverflow上搜索就能回答这个问题,会给我留下深刻的印象。 如果不能的话也可以变得很酷。...你可以从函数中抛出错误,可以参照以下示例: ? 这是对它的测试(使用Jest): ? 也可以从 ES6 的类中抛出错误。在 Javascript 中编写类时,我总会在构造函数中输入意外值。...所以无论异常是从常规函数还是从类构造函数(或从方法)抛出的,一切都会按照预期工作。 但是如果我想从异步函数中抛出错误怎么办? 我可以在测试中使用assert.throws吗? 各位看官请上眼!...测试异常 所以你应该知道什么是 Javascript 的异步函数,对吗?先看一段代码: ? 假设你要添加异步方法来获取有关该人的数据。这种方法需要一个网址。...异步函数和异步方法总是返回一个Promise,无论它已完成还是被拒绝,你必须附上 then() 和 catch(),无论如何。(或者将方法包装在try/catch中)。

    3K30

    分享 Java 常见面试题及答案(上)

    在 Windows 下,你可以按下 Ctrl + Break 来获取。这样 JVM 就会将线程的 dump 文件打印到标准输出或错误文件中,它可能打印在控制台或者日志文件中,具体位置依赖应用的配置。...初始时,在Thread里面,threadLocals为空,当通过ThreadLocal变量调用get()方法或者set()方法,就会对Thread类中的threadLocals进行初始化,并且以当前ThreadLocal...29)我们能在 Switch 中使用 String 吗? 从 Java 7 开始,我们可以在 switch case 中使用字符串,但这仅仅是一个语法糖。...不能,虽然你可以调用 System.gc() 或者 Runtime.getRuntime().gc(),但是没有办法保证 GC 的执行。 42)怎么获取 Java 程序使用的内存?堆使用的百分比?...(答案) PriorityQueue 保证最高或者最低优先级的的元素总是在队列头部,但是 LinkedHashMap 维持的顺序是元素插入的顺序。

    75820

    软件设计的目标和途径

    业务太复杂难道是失控的原因吗?回想一下软件的目的是什么?解决一些领域的相关问题,那么我们可以让业务的复杂性会消失或者降低吗?答案是肯定的,不会!这里就有人要说你放屁。。。...这背后你的Web页面从服务器到用户浏览器的过程和浏览器渲染页面的过程是无论如何也无法消除的,但是浏览器可以缓存它,当你下次再打开这个页面时,它就可以省掉上述的交互过程。...前三个还都一眼能看出来是空或者非空的语境,但是4就更差了,4的字面意思是长度不等于0,逻辑上其实和非空是等价的,但是你需要在脑中做这样的一个映射长度!...那么我的回答是:也不是途径,你这条途径可能会违宪,你觉得它合适吗?也不是目标,也不是途径,那么它到底是什么?...这其实大可不必,OO是来解决一些问题的,但是它并不能解决全部问题,那么多static的类或者方法,它OO吗?OO只是解决我们问题的一种途径,也不是唯一的途径,千万不可把工具当目的。

    42810

    前端工程化发展历史

    我现在需要写一个展示用户活动的页面,我需要通过 RESTful 接口获取数据,然后展示到可筛选的表格中。我是不是可以用 jQuery 去获取数据和展示?...你听过 exports 和 require 吗?你可以通过 AMD 或者 CommonJS 编写不同的 js 模块,然后可以使用 Browserify 把这些文件打包起来。...目前这些对于我来说应该用不到,我只想拉取数据然后展示出来。让我们回到 React,我怎么用 React 从服务器获得数据? emmm,你不是用 React 获取数据,你只是用它展示数据。...Fetch 和 XMLHttpRequests 一样是浏览器的原生实现,是为了从服务器获取数据。 那就是 AJAX 吧?...我需要从 npm 加载它的核心库? 对的。 我还需要 Browerify 或者 Webpack 或者 SystemJS 来管理这些模块? 对的。

    78920

    国外大神总结的 10 个 Java 编程技巧!

    只要我们的Options是真实存在的(Java 8中 Optional是对可以为空的对象进行的封装),不是吗?讨论一下… 2....所以,-1 就可以理所当然被拿来用,对吗?我说不对,看看这个: ? 谁知道呢。...检查null和长度 不管什么时候你有一个集合、数组或者其他的,确保它存在并且不为空。 ? 你不知道这些数组来自哪儿,也许是早期的JDK API呢? 6....如果这样做对你来说没有意义,你也可以通过修改或重写字节码来改变类和方法,或者发送功能请求。作为Java技术栈公众号小编,我敢肯定的告诉你重写类/方法并不是一个好主意。 7....事实上,你甚至可以把case语句和 惊人的FORTRAN77项声明 类比,对于FORTRAN,它的神秘已经超越了它的功能。

    2.3K20

    国外大神总结的 10 个 Java 编程技巧!

    只要我们的Options是真实存在的(Java 8中 Optional是对可以为空的对象进行的封装),不是吗?讨论一下… 2....所以,-1 就可以理所当然被拿来用,对吗?我说不对,看看这个: ? 谁知道呢。...检查null和长度 不管什么时候你有一个集合、数组或者其他的,确保它存在并且不为空。 ? 你不知道这些数组来自哪儿,也许是早期的JDK API呢? 6....如果这样做对你来说没有意义,你也可以通过修改或重写字节码来改变类和方法,或者发送功能请求。作为Java技术栈公众号小编,我敢肯定的告诉你重写类/方法并不是一个好主意。 7....事实上,你甚至可以把case语句和 惊人的FORTRAN77项声明 类比,对于FORTRAN,它的神秘已经超越了它的功能。

    63820

    高级Java都这样优雅处理空值

    如果他并非谨慎,或者他是一个面向接口编程的狂热分子 (当然,面向接口编程是正确的方向),他会按照自己的理解去调用接口,而不进行是否为 null 的条件判断,如果这样的话,是非常危险的,它很有可能出现空指针异常...我看到过的实现: publicUserget(Integer id){ return userRepository.selectByPrimaryKey(id);//从数据库中通过id直接获取实体对象...} @Override publicString getName() { return""; } } 它作为 Person 的一种特例而存在,如果当 Person 为空的时候,则返回一些 get *...Optional 作为返回值 当个实体的返回 那 Optioanl 可以做为返回值吗? 其实它是非常满足是否存在这个语义的。 你如说,你要根据 id 获取用户信息,这个用户有可能存在或者不存在。...小结 可以这样总结 Optional 的使用: 当使用值为空的情况,并非源于错误时,可以使用 Optional! Optional 不要用于集合操作!

    1.7K30

    如何优雅地根治null值引起的Bug!

    如果他并非谨慎,或者他是一个面向接口编程的狂热分子(当然,面向接口编程是正确的方向),他会按照自己的理解去调用接口,而不进行是否为null的条件判断,如果这样的话,是非常危险的,它很有可能出现空指针异常...我看到过的实现: publicUserget(Integer id){ return userRepository.selectByPrimaryKey(id);//从数据库中通过id直接获取实体对象...@Override publicString getName() { return""; } } 它作为Person的一种特例而存在,如果当Person为空的时候,则返回一些 get*的默认行为....Optinal作为返回值 当个实体的返回 那Optioanl可以做为返回值吗? 其实它是非常满足是否存在这个语义的。 你如说,你要根据id获取用户信息,这个用户有可能存在或者不存在。...小结 可以这样总结Optional的使用: 当使用值为空的情况,并非源于错误时,可以使用Optional! Optional不要用于集合操作!

    88710

    关于线程池你不得不知道的一些设置

    看完我上一篇文章「你都理解创建线程池的参数吗?」之后,当遇到这种问题,你觉得你完全能够唬住面试官了,50k轻松到手。殊不知,要是面试官此刻给你来个反杀: 初始化线程池时可以预先创建线程吗?...我建议如果您在应用场景中没有特殊的要求,就不需要使用这些设置。 初始化线程池时可以预先创建线程吗?...private boolean addWorker(Runnable firstTask, boolean core) { // .. } addWorker方法目的是在线程池中添加任务并执行,如果task为空...从测试结果来看,线程池中已经预先创建了1条空闲线程。 线程池的核心线程可以被回收吗?...,则返回null; take():从blocking阻塞队列取出一个任务,如果BlockingQueue为空,阻断进入等待状态直到BlockingQueue有新的任务被加入为止。

    82730

    使用Optioanl优雅的处理空值

    如果他并非谨慎,或者他是一个面向接口编程的狂热分子(当然,面向接口编程是正确的方向),他会按照自己的理解去调用接口,而不进行是否为null的条件判断,如果这样的话,是非常危险的,它很有可能出现空指针异常...我看到过的实现: public User get(Integer id){return userRepository.selectByPrimaryKey(id);//从数据库中通过id直接获取实体对象...} @Overridepublic String getName() {return "";}}它作为Person的一种特例而存在,如果当Person为空的时候,则返回一些get*的默认行为....Optional作为返回值 当个实体的返回 那Optioanl可以做为返回值吗?其实它是非常满足是否存在这个语义的。 你如说,你要根据id获取用户信息,这个用户有可能存在或者不存在。...小结 可以这样总结Optional的使用: 当使用值为空的情况,并非源于错误时,可以使用Optional!Optional不要用于集合操作!

    1.9K20
    领券