Category: 编程
今年明显减少了教孩子编程的频率。从年初的一周两节课,逐渐减少到一节课,最终在今年8月26日迎来了第700天的里程碑。在此期间,还新增了一个系列——教孩子学习理财和赚钱的知识。 随着事情越来越多,孩子逐渐长大,学校的作业负担加重,再加上练琴等其他活动,时间变得格外紧张。经过反复考虑,决定不再设定硬性指标,改为随缘而教,有时间就继续。 从第1天到达成第700天,这段旅程已经非常不容易。第1天始于2020年11月22日,第700天是2024年8月26日,间隔1374天,平均每1.96天上一次编程课。我在第200天时曾立下计划,要坚持到1000天,但现在看来这个目标无法实现。到了500天后,开始剪辑教学视频,进度逐渐放缓。正所谓“行百里者半九十”,许多事情越接近目标,越难坚持。 回想起第一天教编程时,我还在亚马逊工作。3.76年后,我在微软剑桥研究院,而孩子在这4年中也发生了很大的变化。翻看早期的视频,可以清晰感受到孩子的成长,尤其是声音的变化,让人感慨万分。 教孩子编程不仅是开发智力的一种好方法,也让我更深入地了解了他们的兴趣与未来的方向。大儿子表示他未来想从事金融相关的工作,小儿子则对计算机领域充满热情,计划成为一名工程师,目前他对硬件相关方向更感兴趣。两娃的数学都很不错。 这700天的编程教学,不仅是孩子们的成长,也是我自身的提升。我通过费曼学习法,提高了自己的表达能力和英语口语水平。这段旅程,无疑是一段珍贵的记忆,也是一笔丰厚的收获。 完整700天的视频只上传到了B站和油管。西瓜视频从300天到697天(后面上传不了了:西瓜视频再也上传不了视频了(字节头条: 抖西合并)),微博视频从680天到700天,还有就是后面百来天上传到了微信视频号。 终于把存货处理完。还有一些娃教我的视频。记得做到200天的时候还信心满满的要做到1000天计划赶不上变化。一是娃大了有更多的事情要做。一个是我要多花点时间在搞钱上。欣慰的是俩娃很聪明。 垂直比较当年这个年纪已经远胜于我了。不过时代不一样了。现在Al scale的速度太可怕了。搞纯技术会有危机感。得要思考。知其不可奈何而安之若命。 对了:教娃编程有趣的瞬间 vlog视频集合 本文一共 883 个汉字, 你数一下对不对. 写在教娃编程700天, what’s next?. (AMP 移动加速版本) 赞赏我的几个理由. ¥ 打赏支持 扫描二维码,分享本文到微信朋友圈
微软这几年在AI领域的布局可谓精准。当年收购GitHub时,许多人还认为微软出价过高。然而,看看近年来推出的GitHub Copilot,以及对OpenAI的ChatGPT的投资,微软显然已经引领了这波AI浪潮。 懒人编程神器: Copilot GitHub Copilot最初的订阅费用是每月10美元。虽然我平时工作时会用Copilot,因为作为微软员工可以免费使用,但如果要用于自己的side project,每月10美元的费用还是显得有些高。 或许是由于微软面临其他竞品的压力,最近微软终于将Copilot免费开放了。如果需要使用,可以通过这个链接安装Visual Studio Code的插件。 注意:免费的条件之一就是:开源、非盈利。 对于广大程序员来说,编程从来都不是一件轻松的事情。从思考代码逻辑到调试程序运行,每一步都需要花费大量的时间和精力。而如今,一款被誉为“程序员神器”的工具——GitHub Copilot,终于免费了!这项由微软和 OpenAI 联合开发的人工智能代码生成工具,已经从一开始的收费订阅模式,迈向了普惠程序员的新时代。 作为一名程序员,你是否曾苦恼于寻找灵感,或者为琐碎的代码撰写而感到疲惫?GitHub Copilot 就是为了解决这些问题而生的。它能够智能地分析你当前正在编写的代码,并实时为你提供相关建议,从简单的语句补全到复杂的函数实现,甚至是生成整段代码框架。这样一来,程序员不仅能显著提升开发效率,还能专注于解决核心问题,而不是被重复性工作拖累。 微软此次宣布让 GitHub Copilot 免费化,无疑是一个让整个开发者社区欢欣鼓舞的消息。作为背后的支持者,微软通过整合 OpenAI 的先进技术,将 Copilot 打造成了集代码补全、优化建议和智能代码解释于一体的强大工具。此前,尽管 Copilot 的付费订阅价格并不算高,但对于许多个人开发者和学生来说,仍然可能是一个负担。而现在,所有人都可以毫无门槛地体验这一切,得以更加自由地挥洒创意。 更令人兴奋的是,GitHub …
前不久,力扣说我刷题刷了2000天,不是连续的,这个是一共刷的天数。2000天也就是5.479年。 我的力扣,欢迎围观:https://leetcode.com/u/justyy/ 注册力扣帐号是2013年10月10号,当天提交了6次。当时是在谢菲尔得/Sheffield。 后来就是断断续续,甚至有很长一段时间都没有刷,直到2019年3月2日开始才未间断刷到今天(当时拿着Ipad中午在美国通用电气的食堂里刷题)。2016年竟然4月份连续刷了25天,我已经忘记当时为啥这么有闲情逸致了。哦,当时已经搬到了剑桥/Fen Drayton了,可能在准备谷歌的面试。 019年在美国通用电气/General Electric工作的时候中午吃完饭在湖边着着IPAD刷题。 从2013年到2024的力扣刷题之路,一点点改变,一点点变好。 现在刷题是保持面试状态的好方法,就像飞机飞到高空时油耗已经减少,我希望自己能维持这个状态。每天打卡,哪怕有时只是拷贝代码,依然会稍微思考并熟悉解法和算法。每天坚持打卡还能积累积分,兑换力扣衬衫。 英文:Milestone: Leetcoding for 2000 Days 网友:以后每天比比看是cursor做得快 还是你快。 答:刷题的目的又不是比快。让脑子思考,训练脑子。 网友:惭愧,我在 GE时候天天打酱油,群主确是每天在刷题飞。 网友:看似不起波澜的日复一日让我们看到坚持的意义! 本文一共 475 个汉字, 你数一下对不对. 十年: 力扣刷题2000天. (AMP 移动加速版本) 赞赏我的几个理由. …
2024年11月17日
Javascript, Poloniex P站, 交易所 Crypto Exchanges, 加密货币, 区块链, 比特币 BTC, 程序设计, 算法, 编程, 计算机, 计算机, 软件工程
币圈的P站是Poloniex,前几年被孙宇晨收购了,它是一个交易所。我很久之前用过Poloniex,当时对其印象并不是很好。 不过,现在我对其好感增加,因为币安买下的coinmarketcap免费的接口就很多限制。 官方文档),这个接口的频率限制是一秒200次,很慷慨了。 https://api.poloniex.com/markets/price 能返回所有交易配对,比如这样的: 这个JSON返回的结构是一个数组,每个元素是个结构体,也就是一个币价的具体配对信息,我们可以看成是一条边Edge两个顶点Vertice,这样就是一个图结构(带权图 Weighted Graph,权值就是兑换价格),虽然给的是单边,但其实是个双向的,比如USD_BTC得值可以反过来推得BTC到USD的价格。我们可以设计一个算法,从币价A到币价B,可以通过BFS广度优先搜索算法来获取价格。比如有配对A_B、B_C、C_D我们就可以获得A_D的值。 深度优先搜索算法DFS也可以,不过这个算法会返回找到的第一条路径,并不能保证是最短的,最短的确实是最准确的,因为链也长,转换精度就会下降。 当然,可能存在多条路径,最理想的状态是把这些路径都求出来,取个平均啥的,不过这样就得暴力搜索所有的路径了,算法时间复杂度就会比较高。 以下是BFS广度优先算法的代码,Javascript的,可以用于网页前端或者NodeJs后端,甚至是CloudFlare Serverless Worker或者是其它无服务框架:Azure Function、AWS Lambda等。 const fetch = require('node-fetch'); async function getTicker(a, b) { try { const response = …
一年一度的万圣节要到了,正好这天在Linkedin上看到Mathworks发的帖子,用Matlab画一个南瓜,很是有趣。 % Pumpkin =sphere(200); R=1-(1-mod(0:.1:20,2)).^2/12; x=R.*X; y=R.*Y; z=Z.*R; c=hypot(hypot(x,y),z)+randn(201)*.03; surf(x,y,(.8+(0-(1:-.01:-1)'.^4)*.3).*z,c, 'FaceColor', 'interp', 'EdgeColor', 'none') % Stem s = .* ,1,10) .1 ]'; = meshgrid(0:pi/15:pi/2,0:pi/20:pi); Xs = -(.4-cos(p).*s).*cos(t)+.4; Zs = …
最近面试的时候遇到这个问题。这个问题考你计算机的基本功。 在 C/C++ 中,内存管理是控制程序如何分配和管理其资源的关键方面。C/C++ 程序中的内存通常分为不同的区域:堆栈和堆是最主要的动态和自动内存分配区域。 ACM题解系列之 – 最小堆栈 (Min Stack) 堆栈内存 定义:堆栈内存用于静态(自动)内存分配。它是存储函数参数、本地变量和返回地址的地方。当调用一个函数时,一个新的内存块(称为堆栈帧)会被添加到堆栈的顶部。当函数返回时,该内存会被自动释放。 分配:内存由系统自动管理——在变量超出作用域时自动分配和释放。无需人工干预。 生命周期:受限于函数或代码块的作用域。一旦函数退出,内存将被释放。 大小限制:堆栈的大小通常较小并由系统预定义,意味着大的分配可能导致堆栈溢出。 访问速度:由于其后进先出(LIFO)的结构,堆栈内存访问速度更快。由于内存是连续的且可预测的,它允许快速访问。 使用场景:局部变量、函数调用信息和固定大小的对象(数组、结构体)。 堆内存 定义:堆内存用于动态内存分配,程序员使用 C 中的 malloc()、calloc()、free() 和 C++ 中的 new、delete 手动分配和释放内存。 分配:内存在运行时分配,并且分配的生命周期由程序员手动控制。它可以持续存在,直到显式释放。 生命周期:堆分配的对象的生命周期不受作用域的限制。内存将一直被使用,直到被释放为止。 …
在面试流程(例如筛选)的早期阶段,一位 Google 招聘人员曾向我问过这个问题。 在C++中,当你使用std::map访问一个不存在的键时,行为取决于你是如何访问它的。 使用下标操作符 访问时 如果键不存在,std::map 会默认插入一个该键的元素,并为其赋值为类型的默认值。比如,如果 map 的值类型是 int,那么它会插入该键并赋值为 0。 例子: std::map<int, int> myMap; int value = myMap; // 如果键10不存在,会插入myMap = 0 使用 at() 方法访问时 如果键不存在,at() 会抛出 …