用 Python 解答两道来自阿里伯乐系统的笔试题
目录
前言
朋友到阿里面试,分享两道小题,博主比较闲就试着用 Python 解答一下,实现方式肯定是多种多样的,优劣也会各有不同,欢迎交流。
题目一
三个线程交替打印 abcabcabc…,一个打印 a,一个打印 b,一个打印 c。
分析
典型的线程同步问题,解决思路是互斥锁,三个线程通过锁来完成互斥下的协作同步。
实现
import threading
lock_a = threading.Lock()
lock_b = threading.Lock()
lock_c = threading.Lock()
def print_a(num):
if num < 0:
return
lock_a.acquire()
print('a')
lock_b.release()
print_a(num-1)
def print_b(num):
if num < 0:
return
lock_b.acquire()
print('b')
lock_c.release()
print_b(num-1)
def print_c(num):
if num < 0:
return
lock_c.acquire()
print('c')
lock_a.release()
print_c(num-1)
def main():
num = 9
thread_a = threading.Thread(target=print_a, args=(num,))
thread_b = threading.Thread(target=print_b, args=(num,))
thread_c = threading.Thread(target=print_c, args=(num,))
lock_b.acquire()
lock_c.acquire()
thread_a.start()
thread_b.start()
thread_c.start()
if __name__ == '__main__':
main()
题目二
有一个 String 类型数组 arr = { "a", "b", "d", "d", "a", "d", "a", "e", "d", "c" },请编码实现统计该数组中字符重复次数并由多到少的顺序对 a,b,c,d,e 重新排序输出。
分析
如果用 C 语言实现,那么姑且还是一道冒泡排序算法题。对于 Python 而言,这题就是比较单纯的熟练度考验,使用 collections 模块可以轻松实现。
实现
from collections import Counter
li1 = ["a", "b", "d", "d", "a", "d", "a", "e", "d", "c"]
print(Counter(li1))
或
from collections import defaultdict
from collections import OrderedDict
li1 = ["a", "b", "d", "d", "a", "d", "a", "e", "d", "c"]
d = defaultdict(int)
for k in li1:
d[k] += 1
print OrderedDict(sorted(d.items(), key=lambda t: t[1], reverse=True))
用 Python 解答两道来自阿里伯乐系统的笔试题的更多相关文章
- 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制
你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...
- Python编程-多道技术和进程
一.多道技术 1.多路复用 操作系统主要使用来 记录哪个程序使用什么资源 对资源请求进行分配 为不同的程序和用户调解互相冲突的资源请求. 我们可将上述操作系统的功能总结为: 处理来自多个程序发起的多个 ...
- 两道二分coming~
第一道:poj 1905Expanding Rods 题意:两道墙(距离L)之间架一根棒子,棒子受热会变长,弯曲,长度变化满足公式( s=(1+n*C)*L),求的是弯曲的高度h. 首先来看这个图: ...
- java面试题—精选30道Java笔试题解答(二)
摘要: java面试题-精选30道Java笔试题解答(二) 19. 下面程序能正常运行吗() public class NULL { public static void haha(){ System ...
- Python 使用有道翻译
最近想将一些句子翻译成不同的语言,最开始想使用Python向有道发送请求包的方式进行翻译. 这种翻译方式可行,不过只能翻译默认语言,不能选定语言,于是我研究了一下如何构造请求参数,其中有两个参数最复杂 ...
- 两道面试题,带你解析Java类加载机制
文章首发于[博客园-陈树义],点击跳转到原文<两道面试题,带你解析Java类加载机制> 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Gr ...
- 【转】两道面试题,带你解析Java类加载机制(类初始化方法 和 对象初始化方法)
本文转自 https://www.cnblogs.com/chanshuyi/p/the_java_class_load_mechamism.html 关键语句 我们只知道有一个构造方法,但实际上Ja ...
- [ZZ]知名互联网公司Python的16道经典面试题及答案
知名互联网公司Python的16道经典面试题及答案 https://mp.weixin.qq.com/s/To0kYQk6ivYL1Lr8aGlEUw 知名互联网公司Python的16道经典面试题及答 ...
- 【笔试题】精选30道Java笔试题解答
转自于:精选30道Java笔试题解答 精选30道Java笔试题解答 1. 下面哪些是Thread类的方法() A. start() B. run() C. exit() D. getPriority( ...
随机推荐
- VUE的Seo优化 如何实现
今天看到这样一个问题,在vue中,如何进行seo优化呢? 大家应该都知道,seo优化主要是做搜索引擎的排名,但是ajax异步又不支持seo,同时对于url #/的写法,搜索引擎也没办法爬取网站内其他路 ...
- 【微信小程序】图片压缩-纯质量压缩,非长宽裁剪压缩
原理:利用canvas来实现,将图片绘制到canvas上,然后canvas转图片时,微信提供的一个方法wx.canvasToTempFilePath(Object object, Object t ...
- Pycharm新建第一个Django项目
1:安装django 打开Pycharm,在creatproject那里选择新建django项目的时候,会自动帮你安装最新版的Django版本 2:进入Pycharmd的命令窗口,在下方Termina ...
- psu补丁
1.查看命令 su - oracle opatch lspatches su - grid opatch lspatches
- HDU - 1024 Max Sum Plus Plus 最大m段子段和+滚动数组优化
给定n个数字,求其中m段的最大值(段与段之间不用连续,但是一段中要连续) 例如:2 5 1 -2 2 3 -1五个数字中选2个,选择1和2 3这两段. dp[i][j]从前j个数字中选择i段,然后根据 ...
- for 循环,range()函数和导入模块
(一)for语句构成: for i in range(5): print('My name is') for i in range(5): print('Jimmy Five Times ('+str ...
- Python修炼之路-数据类型
Python编程之列表 列表是一个使用一对中括号"[ ]" 括起来的有序的集合,可以通过索引访问列表元素,也可以增加和删除元素. 列表的索引:第一个元素索引为0,最后一个元素索 ...
- Kendo UI for jQuery使用教程:入门指南
[Kendo UI for jQuery最新试用版下载] Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support ...
- Vue框架使用sass
引入: cnpm install node-sass --save-dev //安装node-sass cnpm install sass-loader@7.3.1 --save-dev cnpm i ...
- springMVC项目访问URL链接时遇到某一段然后忽略后面的部分
背景:一个链接URL:http:localhost/tq/asf/218732,配置URL使遇到/asf后直接跳转不识别/asf后面的218732 因为是在ssm框架下做的项目,所以用spring的注 ...