面试

八种经典排序算法总结

此生再无相见时 提交于 2020-11-16 08:27:43
前言 算法和数据结构是一个程序员的内功,所以经常在一些笔试中都会要求手写一些简单的排序算法,以此考验面试者的编程水平。下面我就简单介绍八种常见的排序算法,一起学习一下。 一、冒泡排序 思路: 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素就是最大的数; 排除最大的数,接着下一轮继续相同的操作,确定第二大的数... 重复步骤1-3,直到排序完成。 动画演示: 实现代码: /** * @author Ye Hongzhi 公众号:java技术爱好者 * @name BubbleSort * @date 2020-09-05 21:38 **/ public class BubbleSort extends BaseSort { public static void main (String[] args) { BubbleSort sort = new BubbleSort(); sort.printNums(); } @Override protected void sort ( int [] nums) { if (nums == null || nums.length < 2 ) { return ; } for ( int i = 0 ; i < nums.length - 1 ; i++)

阿里的面试、晋升、层级、培训体系……

混江龙づ霸主 提交于 2020-11-16 07:09:57
一、阿里巴巴是怎么面试的? 2009年,我在北京创业,做自己的公司。有一天接到一个电话说“天机老师,您想不想到杭州工作?”我当时想:“杭州?什么都没有,不去!”他说“阿里巴巴要不要考虑一下?”我觉得可以考虑一下。 我说出愿意考虑之后,陆续有三个电话从阿里巴巴打过来,包括我的主管、HR和行政。 HR在我没去面试之前和我聊了一个多小时,没有聊其他的东西,她聊的是阿里巴巴的梦想是什么。同样地,主管打电话给我的时候,一直在聊他到公司有多久了,他的梦想是什么。我觉得很意外,基本上没有问我自己的情况。后来行政详细帮我安排什么时候面试、谁负责面试,各方面都井井有条。 到阿里巴巴面试的时候,参加的人很多。轮到我的时候,说安排半个小时让我讲课。包括我们部门当时的总监,听了都觉得讲得还不错。 然后他单独面试我,他说“你的性格中,最突出的是什么”,我说“我的性格最典型的是学习”。 他说“怎么证明你喜欢学习?” 我说“我每周可以看两本书”。 他下一个问题是“你最近在看什么书?” 我说“我最近看《大秦帝国》”。 我们聊了两个小时的《大秦帝国》,最后他说“明天去体检,后来开始上班吧!” 我当时觉得好奇怪,为什么因为《大秦帝国》就面试成功了。 二、马云是怎么看招聘的? 阿里巴巴2002年才500人,04、05年开始快速增长,销售人员比例不断增长,我们06年、07年15000人中大部分是销售人员

小林读者喜提微软offer,来瞧一瞧他的算法学习之路

谁都会走 提交于 2020-11-16 01:52:09
大家好,先简单做个自我介绍,我是非科班出身,通过自学的方式,拿到了BATTMD多家和微软offer。今天给大家分享一下自己的算法的经验。 写在前面 随着互联网的发展,各大厂的招聘要求水涨船高,几年前,做算法题还不是必备项,有的公司最多要求写个链表插入,二叉树遍历这种课本上的模板题。但如今由于投身互联网的人太多,国内公司也向硅谷大厂招聘看齐,推行了代码考察。按形式来讲,代码考察的难度和广度可能还会随着时间增长。 因此,掌握算法能力不仅仅是外企所需,更是拿到国内互联网厂的基本功。 但很多同学开始接触算法的时候直接硬刷,通过做题学习知识点,虽然这不失为一种学习方法,但是这种方法往往效率偏低,而且学习的知识点偏琐碎,比较难形成一个体系。由于本人非科班,学习算法也算是从零开始,这里分享一下自己在算法学习的路径,给大家做个参考。 第一阶段(1-2个月) 掌握一门面向对象语言,能熟悉它的语法规则和常用包。以java为例,java是一门面向对象的程序语言,我在这阶段做的工作有: 找一本市面上好评较多的教材熟悉语法规则,这里我用的是《疯狂java讲义》。 下载 IDE对着敲一下,巩固自己对语言的书写。 在这一部分,很多人就会在意语言的选择,有的程序员说php是世界上最好的语言,又有人说人生苦短,我用 Python 。有人学了 C++,又去学了 Python , Go 语言,陷入了语言的学习不能自拔

2020-11-15:手写代码:行有序、列也有序的二维数组中,找num,找到返回true,否则false?

守給你的承諾、 提交于 2020-11-15 23:52:23
福哥答案2020-11-15: 此题来源于leetcode240和剑指 Offer(第 2 版)面试题4。 1.线性查找。 从二维数组的坐下角开始查找。如果当前元素等于目标值,则返回 true。如果当前元素大于目标值,则上移。如果当前元素小于目标值,则右移。 2.线性查找+二分查找。 当前元素上移和右移,采用二分法。要用到如下两道题: 2.1.在一个有序数组中,找<=某个数最右侧的位置。 2.2.在一个有序数组中,找>=某个数最左侧的位置。 golang代码如下: package main import "fmt" //https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ //https://leetcode-cn.com/problems/search-a-2d-matrix-ii/ func main() { matrix := [][]int{ {1, 4, 7, 11, 15}, {2, 5, 8, 12, 19}, {3, 6, 9, 16, 22}, {10, 13, 14, 17, 24}, {18, 21, 23, 26, 30}, } target := 15 fmt.Println("线性查找:", findNumberIn2DArray1(matrix, target))

一文读懂:从 Python 打包到 CLI 工具

自古美人都是妖i 提交于 2020-11-15 19:12:57
码农那点事儿 关注我们,一起学习进步 作者:xiaoh 来源:http://www.xiaoh.me/2015/12/11/python-egg/ 最近项目组在写项目的 CLI 工具,已经接近尾声,想做成 pip 的安装包,所以才有了这篇文章。 1,文章介绍了如何生成 Python Egg ,上传 PyPI 及其 pip 的安装测试 2,在后面的进阶部分会介绍简单的生成cli工具的方法 话说既然研究了如何做包,不想浪费这次机会,干脆水一个博客吧 整理项目 先创建一个项目的文件夹 $ mkdir eds # eds 是我项目的名称,你随意修改成自己的即可 $ cd eds 在里面在创建一个 edssdk 的文件夹,这个文件夹的名称我故意创建的和上层目录不一样,以免误会,这个文件夹其实就是包名称了 $ mkdir edssdk # 这个文件夹就是包名称 $ cd edssdk 这个时候就是写代码的时候了,如果项目逻辑简单,你可以选择在文件夹里面只创建一个 init .py 文件,将所有的函数写到此文件里 当然如果项目复杂,你可以多创建几个文件,这里我繁中取简,只创建一个其他文件。 $ touch __init__ . py # 这个文件作用就是给这个文件夹打成包 $ touch help . py # 这里是你的逻辑代码了,我就简单写了 我写了两个函数在 help.py 中 $ cat

知乎高赞:35岁失业的程序员,最后都去了哪儿?是在路边摊炒粉和做烤鸭?

寵の児 提交于 2020-11-15 17:44:23
点击“ 开发者技术前线 ”,选择“星标🔝” 让一部分开发者看到未来 作者丨临公子 来源丨临公子的后花园(ID:hi-lingongzi) 在知乎上刷到一个有意思的问题: 现在网上流传的35岁很多人会失业,究竟是危言耸听,还是真实存在的? 这问题很多人问过我,首先我想说的是: 脱离行业聊年龄和失业,其实没什么意义 。 我曾就职过的一家互联网公司,成立20年了,大几千名员工的平均年龄始终没超过27岁。30岁确实面临转型的问题。毕竟35岁,实打实地算“老人”了。 但医生、律师、建筑师等行业,35岁可能还是个职业起步阶段,方兴未艾。 知乎这个问题下,最高赞答案是一个程序员讲了自己35岁因病被公司逼退的经历。 这几年因为自己写公众号的关系,加上本职在IT圈,接触到很多互联网或是其他行业的“35岁现象”,唏嘘是有的,沉重是有的,但问题的本质是个灵魂拷问: 如何不被“35岁失业”的困境所困? 01 我知道大家听到失业内心都忍不住瑟瑟发抖,总觉得没工作了,日子完蛋了,职业生涯葬送了。 可什么叫失业呢? 我同事家里卖茶叶的,他跟着家人做了几年太无聊就出来找了份设备维护的工作,然后又转行做程序员。后来公司裁员把他列入“考核人员”名单里,于是他一转头又回去帮家里做生意; 认识的一位项目经理,37岁刚做到中层就被裁员,他就和亲戚一起做微商,还开了家小餐饮店; 还有一个原本做架构的同事,被裁后

面试官:动态内存分配时需要注意哪些坑?我懵懵懵了

混江龙づ霸主 提交于 2020-11-15 17:42:17
在使用C语言开发嵌入式产品的过程中,当使用到malloc函数时候都会有一个争议, “使用动态内存分配安全吗?” ,就连美国军方在safety-critical的嵌入式航空电子设备代码中,也禁止动态内存分配,我们来细细分析下。 C 库函数 - malloc() 函数简介 malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void* 类型返回分配的内存区域地址。 当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小。 函数的声明 用来分配所需的内存空间,并返回一个指向它的指针。 //参数 :size -- 内存块的大小,以字节为单位 //返回值:指针 -- 指向已分配大小的内存 // NULL -- 如果请求失败 void *malloc(size_t size) 介绍一下用法 #include <stdio.h> #include <string.h> #include <stdlib.h> int main () { char *str; str = (char *) malloc(15); strcpy(str, "hello world" ); printf ( "String = %s, Address = %u\n" , str, str); free

StringBuider 在什么条件下使用效率更高?

夙愿已清 提交于 2020-11-15 17:40:27
来源 | cnblogs.com/keatsCoder/p/13212289.html 引言 都说 StringBuilder 在处理字符串拼接上效率要强于 String,但有时候我们的理解可能会存在一定的偏差。最近我在测试数据导入效率的时候就发现我以前对 StringBuilder 的部分理解是错误的。 后来我通过实践测试 + 找原理 的方式搞清楚了这块的逻辑。现在将过程分享给大家 测试用例 我们的代码在循环中拼接字符串一般有两种情况 第一种就是每次循环将对象中的几个字段拼接成一个新字段,再赋值给对象 第二种操作是在循环外创建一个字符串对象,每次循环向该字符串拼接新的内容。循环结束后得到拼接好的字符串 对于这两种情况,我创建了两个对照组 第一组: 在每次 For 循环中拼接字符串,即拼即用、用完即毁。分别使用 String 和 StringBuilder 拼接 /** * 循环内 String 拼接字符串,一次循环后销毁 */ public static void useString(){ for (int i = 0; i < CYCLE_NUM_BIGGER; i++) { String str = str1 + i + str2 + i + str3 + i + str4 ; } } /** * 循环内 使用 StringBuilder 拼接字符串,一次循环后销毁 */

动态规划算法

非 Y 不嫁゛ 提交于 2020-11-15 14:20:02
动态规划 算法 是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。 [1] 动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。 基本思想与策略 编辑 动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。 由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。 适用情况 编辑 能采用动态规划求解的问题的一般要具有3个性质: (1)最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。 (2)无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。 (3

面试官问:MySQL 的自增 ID 用完了,怎么办?

流过昼夜 提交于 2020-11-15 14:04:25
来源:程序猿面试指南 既然这块知识点不清楚,那回头就自己动手实践下。 首先,创建一个最简单的表,只包含一个自增 id,并插入一条数据。 create table t0(id int unsigned auto\_increment primary key) ;insert into t0 values(null); 通过 show 命令 show create table t0; 查看表情况 CREATE TABLE \`t0\` ( \`id\` int(10) unsigned NOT NULL AUTO\_INCREMENT, PRIMARY KEY (\`id\`)) ENGINE=InnoDB AUTO\_INCREMENT=2 DEFAULT CHARSET=utf8 可以发现 AUTO_INCREMENT 已经自动变成 2,这离用完还有很远,我们可以算下最大当前声明的自增 ID 最大是多少,由于这里定义的是 intunsigned ,所以最大可以达到 2 的 32 幂次方 - 1 = 4294967295 这里有个小技巧,可以在创建表的时候,直接声明 AUTO_INCREMENT 的初始值 create table t1(id int unsigned auto\_increment primary key) auto\_increment = 4294967295