从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

基于ROS2的实时视频流转换:image2rtsp在多路相机采集中的应用 本文详细介绍了如何在ROS2机器人系统中使用image2rtsp工具,将ROS2内部的相机图像话题实时转换为标准的RTSP视频流。重点阐述了其安装配置、核心参数调优,并提供了多路相机采集的实战方案,解决了机器人视觉数据跨平台、跨网络分发的难题,极大提升了视频流集成的部署效率。 阅读详情

关于一线码农的面试,我想说

求职面试在绝大部分人来说都是必不可少的,自己作为求职者也参与了不少面试(无论成功或者失败),作为技术面试官参与面试也有四五年的经验,在面试过程中也见识到了各种各样的人(有厉害的,也有奇葩的)。在这里也只想谈谈自己的一些看法,我说的不一定对,有不同的意见可以留言参与讨论。

面试本来就是一个双向选择的过程,面试官和候选人的地位本应该是一个平等的位置,面试官希望通过简单的交流沟通可以对候选人的技术,沟通等有一定了解进而确定候选人是否匹配相应的职位。个人认为一场成功的面试最好是能够让求职者和面试官都有一定的收获(曾经也遇到过在某次面试后,HR 告诉我有候选人特意跟她反馈要表达对面试官的感谢,因为让他很有收获,这当然还是让我感到非常高兴的),每次参与面试,也希望自己能达到这个目标。对于候选人来说能从面试过程了解自己的不足或者交流探讨面试问题;对于面试官来说能了解候选人的技术和项目,在交流探讨中也是一次学习和巩固。 另外面试能否通过最终强调的是职位匹配,一个萝卜一个坑,萝卜太大或太小都不一定合适。所以有时候面试没通过并不是候选人不够优秀,也有可能是候选人过于优秀(例如本来只想招聘 P6,结果来了一个 P8的候选人肯定不合适)。

因为面试时间有限,1个小时(一般情况)的时间很难去全面了解候选人的技术实力,因此在面试过程中很难做到绝对的公平。举个简单的例子,面试官出一道题目,候选人 A 可能曾经做过或见过,所以能够比较轻松地回答出这个问题,而候选人 B 没有做过,虽然不能答出让面试官满意的答案,但 B 提供了一些解题的思路,虽然最终并没有答出这道题目,这就一定说明候选人 B 比 A 差么? 并不是吧。

下面就从这道题目说起,这道题目是我在过往的面试中经常考察的一道题目。

动笔试试吧

实现一个函数,完成 开根号 的操作,方法签名如下:

double sqrt(int v, double t)

要求:

  1. 不能调用系统库函数,诸如 Math.sqrt(v) 之类的;
  2. 假设计算出的结果为 r,要求满足这个条件: ,其中 是真实的值, t 为给定的一个误差范围,例如0.1等,即你计算出的值要在给定的误差范围内。
  3. 实现语言不限,你条件可以比上述更加苛刻,但不能宽松。例如调用你的接口 sqrt(9, 0.21) 返回值属于 [2.79, 3.21] 这个区间的任意一个都满足条件。

看到这里,其实你可以 拿出笔和纸,尝试解答一下,需要注意的是答案要满足给定的误差条件,欢迎沟通交流。其实这个题目是就是 leetcode 上原题稍加变化得到,做过的肯定觉得 leetcode 其他题目来说相对比较简单。但没做过也没关系,如果在面试官的提示下能够最终把这道题目解出来,在我看来也 OK 的,甚至有可能比刷过题记住解题答案的更好(当然刷过题目本身的肯定会围绕这个题目穿插其他小问题的)。





从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

分割线

开始解答

其实刚开始,我认为这道题目比较简单,至少在给予提示后,理想情况下大部分一线coding的程序员都可以给出实实在在 code 的。然而“理想很丰满,现实很骨感”,事实并非如此,然而在面试很很多人之后, 发现此道题目并不简单,如果你能写出来,说明你已经比很多人优秀了(至少在我过往的社招面试经历中)。

当被问起这道题目之后,可能遇到的答案如下。

直接放弃

题目给出后,我一般首先明确候选人弄清楚了题目的含义然后会给一两分钟让候选人先思考一下。

面试官:你有什么思路吗?求职者: 没有啊。

可能候选人内心OS是: “你出这样的题目是不是有病啊,明明有 lib 函数可以直接用的”。(之前同组有其他小伙伴确实有遇到这样的候选人,语言虽没这样夸张,大意是:实际工作中会出现这样的问题吗? 我直接给你百度一个就行了)

在此强调,面试这道题目并不是想强调这个题目本身,期望以这道题目为契机,考察候选人在分析问题和解决问题的能力,在交流过程中所体现的逻辑推理和思维方式等,当然最后也会看看实实在在的 Code,从编码过程中看候选人的编程习惯,风格等等。

也有候选人刚开始抱着那个约束误差范围的不等式研究 N 久,然后没有然后了的。刚开始看这个条件当然好,但如果这个不等式没有思路可以先放一放,没必要在那苦熬。

面试官:这样吧,如果我问题 根号10 等于多少?你怎么回答?求职者:3点几吧。面试官:你怎么知道是3 点击,因为你知道9开根号是3,想象一下,你也可以完全用程序帮忙模拟你大脑思考的过程。求职者: 我再想想……

其实这里是希望提醒候选人,我们首先是要解题,然后才考虑效率。即不管用什么方法能够给出一个答案的,这个时候候选人可能进入下一个阶段了。

在实际工作场景中其实也是一样,遇到一个问题,首先我们要想到的是如何解决这个实际问题,有了最基础的解决方案之后再谈优化。

暴力搜索

实际面试过程中也有人是直接到这个阶段的。

先用一个循环找到 r,使得 r^2 是离给定 v 最近的平方数,即你希望算根号10 ,先找到3,因为3^2=9 。

然后再用一个循环, 每次 r+=t ,直到 r^2 > v 为止。

面试官:这个方法从理论上讲, 是一个可行的方案,设想一下,如果我的精度要求很高,希望计算的 v 也很大,如 sqrt(v = 10000000, t = 0.000001) 之类的,调用你这个方法效率是不是很低,这个时候应该怎么优化?求职者:这样的话,我这个方法效率确实比较低,不过可以这样优化,比如设置一个步长,一次迭代后,如果没有达到预期,可以不断修改这个步长来增大逼近真实值的速度,比如10倍误差,100倍误差等。

其实,在与候选人的不断交流中可以看出候选人的 Problem Solving 的能力,这也是面试考察中的一点。例如关于上面问题的优化,也可能用于在实际工作中遇到的问题。

例如,我们在实际工作中可能经常会写一些异步的回调通知接口等,这个接口可能是其他团队维护的,有可能由于网络问题等回调接口可能会失败进而需要重试,对于重试的机制其实就可以借鉴上面的“步长”机制,第一次回调失败, 我等待 1s 后重试,失败再重试,也许间隔 1s 不太恰当,是否可以修改等待的步长,等待比如 5s,10s?等等再重试直到成功。为什么要这样做? 也许对方 server 本来现在就处于峰值,你不停的重试不但没有增加你接口调用成功的机会,反而增加对方 server 的负担。

额,跑题了,回到这个问题本身,继续

面试官:恩,这样做确实可以优化。但从本质上讲,假设我们不考虑误差的话,这个题目其实就是在一个有序的列表里面去搜索满足条件的特定的值。刚刚你的方法是一个线性的搜索方案。常见的搜索还有其他什么吗?

求职者:二分搜索?

面试官:对呀,你可以尝试想想能否借用一下这个思路来解决这个问题。

 

二分搜索

当然,部分候选人提示二分后,就直接能够 get 到点,并且能够写出二分大体框架,但可能结束条件写的有点问题。

如果候选人还没有思路,就会继续

面试官:这样理解吧,你刚刚的搜索整数部分的过程其实是线性的,一个一个数去暴力穷举。借助二分的意思就是,比如算 根号10,你搜索范围是 [0, 10] (其实除了几个数之外范围可以更小[0, v/2],你能证明么?)。

因为5^2 = 25 > 10 , 所以 r 属于[0, 5)

因为(5/2) ^2 = 6.25 < 10 , 所以 r 属于 (2.5, 5)

因为(3.75^2 = 14.0625 > 10) ,所以 r 属于 (2.5, 3.75)

继续,如果你结束条件不太确定,可以暂时不管…

提示到这里,感觉已经相对比较明显了。

面试官: 你现在明白了吗?求职者:明白了。面试官:那你写一下代码吧。

一个二分查找,算法思路都结合例子讲一遍了,在候选人回答明白的情况下,理想当中,作为一线开发者写出来应该不成问题吧。然而…理想和现实还是有差距的。很多人都喜欢用递归写,可是很多人递归里面的最重要的结束条件都木有, 一些边界条件等等都木有。所以一般情况下,代码写完后,我会让候选人自己写测试用例。

面试官:写好了是吧,你写几个测试用例吧,假设这个接口是别人写的,你应该从哪几个角度去测试。求职者:sqrt(-4, 0.21),哎呀,我这里忘了判断了。改一下代码。求职者:sqrt(0, 0.21),sqrt(4, 0.21)… 还有问题,再改改。面试官:……

为什么要别人提示要测试用例,才去 check 自己写的代码的正确性呢。有的候选人写的代码,就不拿一些异常情况去 check,就用上面讲的 sqrt(10, 0.21) 的例子都得不到预期结果。

能够到达这一个步骤的人已经较少了,如果你有较全测试用例和边界条件的判断,再加上后面的结束条件能够正确,基本上这道题目就算满意了。

关于结束条件

本质上讲,这个算法就是一个迭代逼近的过程,用二分的思路后,关键就在于什么时候结束。 题目中已经给了误差条件

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

,难点在于其中的

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

不知道,不太方便直接进行计算判断。不少人用一个另外的结束条件来进行了判断即:

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

,其实这两个条件是不一样的。

对于这个结束条件,你有什么看法吗? 能证明你的想法吗?

其他解法

当然本题还有一些其他的数学解法,例如用牛顿迭代法,梯度下降法(最速下降法),泰勒公式展开等等。如果候选人能想到这些,说明他还是有一定数学基础的,如果愿意可以让他讲讲。(考察这道题目本意并不是期望候选人用这些数学方法解的。)

对于这道题目,你有什么比较好的思路吗? 欢迎留言参与讨论。

常见问题

  1. 问:为什么题目中的 v 的类型是 int?答:还真没有理由,double 也无所谓,可能仅仅是因为 leetcode 上原题计算的数是 int 吧。
  2. 问:我能正确答对这道题目就一定能通过这次面试吗?
    答:强调一下,面试中考察这样一个题目,并不是仅仅考察这道题目本身,不是说你将这道题做对了,就能通过面试,反之也不是说你没做对这道题目就一定不能通过我们的面试。我们通过这道题目为契机,希望考察的是候选人在分析问题解决问题的能力,在交流过程中所体现的逻辑推理和思维方式等,当然也有最后实实在在的 code。
  3. 问:这不是一道数学题目吗,为什么程序员面试需要考察这样的数学问题?
    答:同上,不是考察这道题目本身。另外,这也可以说不是一道数学题目,当然能用数学的方式解答。候选人能用数学的方式解答也算正确。
  4. 问:二分是这道题目的标准答案吗?我能用其他解法吗?
    答:同上,题目没有标准答案,就算你用最暴力的算法搜索出来也是正确的解法,其他数学方法也对。
  5. 问:这道题目这么简单,牛顿迭代分分钟秒掉,是不是太简单了?
    答: 给你点赞。
  6. 问:这题目在说什么,我搞了半天没看懂,这TM是啥?
    答:如果确实认真看完整篇文章或跟面试官交流了那么久,还是根本不明白这到底说的是一个什么问题。那就别管了吧,随他去吧,可能不是目标用户而已。
  7. 问:我在实际工作中根本就不会遇到这样的问题,你问这个有什么用?
    答:同第2条答案。
  8. 问:你们公司还缺人么,面试会考察哪些点?
    答:有兴趣或者有其他问题可以戳我邮箱,邮箱地址:aUB0YW5nbGVpLm1l。 面试考察可能会涉及:CS 基础/Code/数据结构和算法/解决问题/项目经验/系统设计/沟通团队协作等等。

结语

本文题目是“从一道面试题谈谈一线大厂码农应该具备的基本能力”,其实,上面大部分内容只谈到了这道题目本身(也穿插了一些对这道题目的分析和理解)。上述题目的场景是社招面试中的,对于这样的题目来说校招的反馈会更好。因为在校生可能对于工作经验,项目经验等比较欠缺,所以只好用一些比较固定的算法来面试进行筛选(本质上跟学校考试没有太大的区别)。

但这种类似的题目在社招场景下就完全不适用吗?社招的的同学写不出来就有很充分的理由吗?或许你在工作场景中不会遇到实际这种题目,但我其实想表达的是,作为在最前线写代码的码农,在别人讲解了二分算法且自己也能理解的情况下,能写出这个二分算法应该不算太难?相当于一个需求,大家讨论了算法实现和解法,需要你把它变成能跑的 code 而已。

其实这篇文章最开始叫“从一道面试题谈谈一线码农应该具备的基本能力”,几年前发出来被喷了,后来想想似乎被喷也有点道理,因为在日常有些场景下,“复制粘贴”工程师貌似也够用了,遇到问题有更高水平的人来帮你解决就行,大家都一样的话,怎么体现高手水平呢?但从用人单位角度想,当然是更希望招聘更加优秀的选手,怎样体现优秀呢?候选人基数太大,怎么筛选,其实也就“高考”一样嘛,通过“考试”择优录取而已。

我们就不去讨论是否每个写代码的人都需要有这样的能力(好像答案也是显而易见并不是)。但我建议咱们一线的程序员们(特指有上进心的一线程序员)应该对一些基本的数据结构和算法有所了解,对常见的算法复杂度有所了解? 或者至少应该有这样的追求吧?比如二分搜索复杂度为什么是

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

。之前遇到过比如有的候选人,Java 开发七八年经验了,简历描述精通 Java,但不清楚 ArrayList, HashMap 内部大概是怎么做的(我理解,不管什么都需要知道大致的实现原理才有可能去优化遇到的各种性能问题吧?)。还有什么熟练掌握 Vim,结果其实就是熟练掌握如何打开和关闭 vim。还有的候选人口头表达头头是道,结果落实到写代码就根本下不了笔。

有时候感觉大部分程序员都被大量的需求压迫着,被产品经理催促着,仓促地码着繁琐的业务代码,不断的改着 Bug 又引入新的 Bug。 业务代码重要么,当然重要(代码就是服务于具体业务的),但同时也还是希望我们不要抛弃一些基础的东西,多培养一下我们的编程素养。我们在用编程语言,利用各种工具来实现我们想要达到的目的的时候,能做到“知其然,知其所以然”岂不更好?

附Java进阶学习提升资料

每天2小时跟马士兵学习Spring、高并发、Redis、Jvm、分布式,坦克大战,网约车项目,你终将成长为架构师。

干货视频,高级架构师最新java、spring、Redis、JVM、分布式、高并发。要的留下私信我,一小时之内回复。里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring,MyBatis,Netty源码分析,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点高级进阶干货的免费直播讲解。

如何获取?

关注我,私信回复“马士兵”即可获取高清大纲,以上 spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构

如何私信?

(非头条极速版)关注我后,在手机,点进我的主页,主页上方右上角有个私信,点击私信,如何回复关键字“马士兵”即可精选马士兵JAVA 高并发分布式架构课程视频

马士兵多线程、高并发、设计模式、Redis、Spring、Jvm

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

网约车项目

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

需要资料直接关注留言私信“马士兵”即可免费领取。

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

 

从 AccessControl.authorizationCheck 读懂 ABAP CDS 访问控制:默认策略、取舍边界与一线项目实战 摘要: 本文深入解析ABAP CDS视图中@AccessControl.authorizationCheck注解的核心功能与工程实践。该注解通过DCL角色实现行级数据过滤,提供三类能力:控制访问生效条件、约束语义一致性及管理特权访问。文章详述四种注解取值(#CHECK、#NOT_REQUIRED、#NOT_ALLOWED、#PRIVILEGED_ONLY)的适用场景与默认行为,并结合采购订单案例演示DCL与PFCG授权的落地步骤。同时指出访问控制的边界问题(如JOIN场景可能绕过过滤),并给出视图层级决策矩 阅读详情

相关推荐

Python制作【大麦网】自动抢票程序

Python 的迅速崛起对整个行业来说都是极其有利的,但“人红是非多”,导致它平添了许许多多的批评,不过依旧挡不住它火爆的发展势头。如果你对Python感兴趣,想要学习pyhton,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓点击这里。

mate1357的博客 2万+

Java程序员去BATJ一线互联网大厂需要哪些技能?

什么是BATJ 大家口中的BATJ,通常都是百度、阿里巴巴、腾讯、京东,那BATJ的技术专家相当于是腾讯T4技术专家、阿里P7高级技术专家级别,是一线Team leader或者二级域架构师,需要对一个领域的业务非常熟悉并且能够将影响力辐射到其他合作团队。 一般来说一些业务架构、应用架构、产品功能决策、技术选型、协作分工等问题应该在技术专家层次终结,技术专家是一线作战的小队长,向下提供决策,向上...

csdn鲲鹏号 2960

基于 SpringAI 整合 DeepSeek 模型实现 AI 聊天对话

很多云平台都提供了一键部署大模型的功能,这里不再赘述(阿里云百炼平台、火山方舟-火山引擎等)Ollama。

📜一个热爱探索的人 1280

php 常考 常见 面试题

又是跳槽季,跳槽就有面试,面试难免会问一些理论问题,前面面试了几家,做了一些面试题,记住了一部分,整理了一下: 1.cookie 和session区别 session存在服务器,cookie存在浏览器;session安全性比cookie高;session为会话服务,在使用时需要开启服务,cookie不需要开启,可以直接使用。 2.redis和memcached区别 redis 系统库有个快照...

稳哥的小灶 7049

村田电感模型选型指南:.s2p和SPICE netlist在ADS中的表现差异

本文深度解析了村田电感在ADS仿真中.s2p与SPICE netlist两种模型的表现差异。通过对比模型本质、仿真设置及高低频段精度,揭示了.s2p文件基于实测插值而SPICE netlist基于等效电路外推的特性。文章提供了明确的选型策略,帮助工程师根据项目频段、仿真类型和精度需求,在射频与微波电路设计中做出最优模型选择。

k9l0m1的博客 452

UE5 使用Slate制作对话窗口

使用Slate制作对话框窗口并获取对话框结果,非UMG

qq_25521145的博客 3189

一线大厂的程序员职级对标

互联网行业对标——阿里,腾讯,百度,滴滴,美团,头条,京东,网易,亚马逊等等马上要过年了,过完年就到了大伙开始看新机会的时候了,了解目前互联网的薪资情况和级别成了跳槽前需...

singwhatiwanna 2万+

PSI5协议技术文档与驱动开发指南

• 供电与数据复用:ECU通过双绞线为传感器提供稳压(典型值5V-11V),同时检测线路电流变化实现数据传输。• 同步信号:ECU发送3.5V电压脉冲(上升沿触发传感器响应),用于时序同步。• 安全气囊:PSI5-P模式实现多碰撞传感器同步采样(响应时间<10ms)• CRC-3(3位):ASIL-B以上功能安全要求(如动力总成传感器)• 奇偶校验(1位):适用于低安全等级场景(如PSI5-P10P模式)• 典型应用:PSI5-P(并行总线)、PSI5-U(通用总线)

u012733413的博客 2870

php面试题,各大企业常见的php面试题之三

1、如何声明一个名为”myclass”的没有方法和属性的类? (1分) 答:class myclass{} 2、如何实例化一个名为”myclass”的对象?(1分) 答:$myclass = new myclass(); 3、你如何访问和设置一个类的属性? (2分) 答: class A{ public $name = “A”; } $a = new A(); n=a->nam

site008的博客 528

电路板保险丝如何选型

在电路板保险丝选型过程中,需要考虑多个因素以确保其适合特定的电路需求。最后,经过以上程序选定的样品需要在实际的电路中进行测试,以验证所选择的保险丝是否合适。

weixin_57010826的博客 1310

软件可靠性测试与评价

本文系统介绍了软件可靠性工程的核心内容,包括可靠性概念、模型分类、测试方法和评价体系。重点解析了可靠性测试的三大步骤:定义运行剖面、设计测试用例和实施测试收集数据,并以智能安防系统为例说明具体应用。可靠性评价需结合业务场景,通过量化指标(MTBF、失效率等)和模型预测持续优化系统。文章强调可靠性需贯穿软件全生命周期,通过闭环反馈实现持续改进,为关键系统提供质量保障。

moton2017的博客 2050

腾讯面试题

PHP开发工程师笔试试卷 姓名:天才 一、PHP开发部分 1.合并两个数组有几种方式,试比较它们的异同 答:1、array_merge() 2、’+’ 3、array_merge_recursive array_merge 简单的合并数组 array_merge_recursive 合并两个数组,如果数组中有完全一样的数据,将它们递归合并 array_combine 和 ‘+’ :合并两个数...

weixin_38259248的博客 2233

【思博伦】史上最详细Spirent TestCenter测试仪使用教程精讲(一)!图解超赞超详细!!!

3. 在弹出的界面中,找到菜单栏中的“Connect/Create”,选择下拉框中的“Connect to Physical/Visual Chassis”,在弹出的对话框中输入思博伦测试仪的IP地址:192.168.6.244,点击“OK”;说明:目前我们只需要使用到Raw Stream Block,不需要用到Bound Stream Block。说明:如果要使用100G模式,由于硬件限制,必须连续3个面板端口同时配置为100G使用。打开安装包,并按照提示按照即可。

风云说通信 6481

从一道面试题谈谈一线大厂码农应该具备的基本能力

关于一线码农的面试,我想说求职面试在绝大部分人来说都是必不可少的,自己作为求职者也参与了不少面试(无论成功或者失败),作为技术面试官参与面试也有四五年的经验,在面试过程中也见识到了各种各...

HollisChuang's Blog 1053

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

互联网寒冬,如何才能进入一线大厂?

在一线大厂,没有测试这个岗位,只有测开这个岗位。这几年,各互联网大厂技术高速更新迭代,软件测试行业也正处于转型期。传统的功能测试技术逐步淘汰,各种新的测试技术层出不穷,测试人员的薪资也水涨船高。与此同时,各大厂对测试人员的要求也越来越高,纯功能测试的市场空间越来越小。

软件自动化测试技术交流、资源分享 243

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

大厂的新代码超过27%来自AI,程序员的未来何去何从

"编程也要被AI吃掉了?"这曾经只是一句调侃,但当前看来,却渐显雄威。AI编程已成大厂标配记得去年那会儿,阿里、百度、谷歌宣布招募AI程序员的消息,就在圈内引起了不小的轰动。有人笑称"自己给自己找个’替补’呗",更多人则直接否认"AI程序员"这个职位的合理性,充满了戏谑和质疑。然而现在,AI编程在这些科技巨头们的公司里已悄然成为标配。可不可怕?曾几何时,AI代码还只是试验品,如今已在这些顶级企业渗透开来,而且势头正猛。别小看这些数字,背后代表的可是巨大的人力成本节省和效率提升。

weixin_42924914的博客 1962

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

面试了一个34岁的java老码农年薪50w的面试题基本都能答得上

互联网行业竞争也越来残酷,我们工程师只有不断地学习,提升自己的能力才更保障你拿到更好的薪水,进入理想的企业(阿里、字节、腾讯,虎牙,美团 等等.....)出现了一系列的问题就是:以你目前的个人能力能不能满足公司的晋升标准?如果想跳槽大厂的话面试要求有哪些?这应该是你目前比较迷茫的一部分 还有就是在你进入大厂后薪资有没有上升的空间?空间有多大?......归根结底薪资取决于你自身的技术与能力,当你的能力达到一定水平,薪资与岗位自然会上升。程序员的等级这是一个漫长的过程,绝大多数人不可能有限的时间里快速成长为一

JavaMonsterr的博客 421

2024年最新年龄真成了程序员求职天壑,40岁技术体系全精通却无人问津,2024年最新Java大厂面试题来袭

在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!大家看完有什么不懂的可以在下方留言讨论也可以关注。本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取。

2301_82243799的博客 383

2024最全的Java架构面试指南,作为一个码农终于把MySQL日记看懂了

今天刚好有空,跟大家聊聊如何学好算法进大厂。前两天一个读者和我说,他坚持刷算法题2个月,薪资翻番去了他梦寐以求的大厂,期间面字节跳动还遇到了原题…其实据我所知目前国内的大厂和一些独角兽,已经越来越效仿硅谷公司的做法,通过编程定题面试,来考察数据结构和算法的扎实程度。点击领取2024完整开源项目《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》以我的经验来说,**对于新手来说,扎实的掌握一门语言是其一,其二就是要有基本的算法能力,这个非常重要。

m0_60575487的博客 902

2024年这就是程序员里90%的码农成不了架构师的原因,java数据结构与算法面试

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料展示部分截图,有需要完整版pdf文档的,可到文末免费获取,或者直接扫码下载1、底层源码与设计模式:详细介绍源码中所用到的经典设计思想,看看大牛是如何写代码的,提升技术审美、提高核心竞争力。帮助大家寻找分析源码的切入点,在思想上来一次巨大的升华。知其然,并知其所以然。把知识变成自己的。

2301_82241675的博客 566

7年开发码农,疫情期间连面美团阿里,因精通多线程拿offer定级P7

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。

2401_84558388的博客 505

大专码农和985程序员有什么区别?

昨天在知乎上看到一个问题“大专码农和985程序员有什么区别?“,这个问题蛮有意思的,下面是我在知乎的回答。其实最大的差别在面试,校招进大厂至少是本科!很多大厂更倾向985、211的学生,很多双非本科、大专学生的简历都会被hr pass。华为有52所定向院校,基本上都是985、211,只有三所计算机强势的双非学校,就是杭州电子科技大学、南京邮电大学、重庆邮电大学。所以大专学生投递华为,根本没机会,这很现实。但双非二本、大专码农机会仍然很多,进大厂的最好路径是社招。

VN520的博客 393

42岁程序员面试,在百度等大厂呆过,工资却只敢要一万六,心酸

蚂蚁面试比较重视基础,所以Java那些基本功一定要扎实。蚂蚁的工作环境还是挺赞的,因为我面的是稳定性保障部门,还有许多单独的小组,什么三年1班,很有青春的感觉。面试官基本水平都比较高,基本都P7以上,除了基础还问了不少架构设计方面的问题,收获还是挺大的。经历这次面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。本文已被。

2401_84004024的博客 459

工作3年了,非计算机专业,现在还值得转行做码农吗?

很多人工作后发现自己的原工作并不是自己想要的,就萌生了转行的想法。这里有位朋友就问:假如一个非计算机专业的985硕士想转码,他对薪资的要求也没有很高,只要15k左右,他的人生目标就是30k,他已经在传统工科行业工作3年了,请问他转码的可能性大吗?未来能不能实现他的人生目标呢?而码农工资高,福利好,就成了大家考虑转行的一个有吸引力的方向。从职业发展未来潜力上看,转行成为码农(即程序员或软件工程师)是一个具有潜力的选择。

qkh1234567的博客 1457

Java最新程序员之天梯排行榜,你在哪一级?(1),字节跳动Java开发

既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。

2401_84006757的博客 1062
上一篇: 我3年开发经验,从字节跳动抖音组离职后,一口气拿到15家Offer
下一篇: 初出校园,从Java小白到阿里P8架构师需要学习哪些技术?
JavaAOE
博客等级 码龄7年 27粉丝 49原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值