面试

[面试]future模式

坚强是说给别人听的谎言 提交于 2020-12-16 10:08:31
Future模式 什么是future模式? 传统单线程环境下,调用函数是同步的,必须等待程序返回结果后,才可进行其他处理。 Futrue模式下,调用方式改为异步。 Futrue模式的核心在于:充分利用主函数中的等待时间,利用等待时间处理其他任务,充分利用计算机资源。 简单描述一下future模式的实现 future模式有两种数据, 一种是真实数据RealData, 里面就是业务中想要得到的目标数据. 另一种是虚拟数据FutureData, 它是在使用future模式时立即返回的一个对象. 调用方会首先拿到一个FutureData, 然后调用方就认为自己拿到该数据了, 没有进行阻塞, 继续去执行下面的逻辑处理. 如果真实数据准备好了, 就会把自己的引用赋给之前的那个FutureData, 并且置一个标记, 表示这个FutureData里面包含一个RealData, 拿到了想要的数据, 可以使用. 详细分的话, 会有下面这几种情况(假设RealData需要2秒才能创建好): 1. 调用方发送了自己需要RealData的请求的后, 会立即拿到一个FutureData, 但是根本就不着急使用, 所以, 第2秒的时候RealData创建完成后, 就会被绑定到对应的FutureData里. 假设第6秒调用方才开始使用RealData, 他会发现FutureData已经准保好了他想要的数据,

分布式架构的演进

本秂侑毒 提交于 2020-12-16 06:54:14
系统架构演化历程-初始阶段架构 初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP特征:应用程序、数据库、文件等所有的资源都在一台服务器上。描述:通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。 系统架构演化历程-应用服务和数据服务分离 好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver特征:应用程序、数据库、文件分别部署在独立的资源上。描述:数据量增加,单台服务器性能及存储空间不足,需要将应用和数据分离,并发处理能力和数据存储空间得到了很大改善。 系统架构演化历程-使用缓存改善性能 特征:数据库中访问较集中的一小部分数据存储在缓存服务器中,减少数据库的访问次数,降低数据库的访问压力。描述:系统访问特点遵循二八定律,即80%的业务访问集中在20%的数据上。缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况。 系统架构演化历程-使用应用服务器集群 在做完分库分表这些工作后,数据库上的压力已经降到比较低了,又开始过着每天看着访问量暴增的幸福生活了,突然有一天

不同类型数据运算的总结

懵懂的女人 提交于 2020-12-16 04:25:46
前几天在学习交流群里,有个小伙伴问了一个问题,是关于有符号整数和无符号字符数的运算的问题。对于这部分,我个人理解的也有点问题,现在来做个总结回顾。 有符号整型和无符号数整型 举例 #include <stdio.h> #include <stdlib.h> int main() { int a = -1; unsigned int b = 1; printf("%d", a > b); return 0; }   输出结果为:1 解析   无符号整型和有符号整型比较时,有符号整型会转化成无符号整型。因此,-1转化为无符号数为0xFFFFFFFF,所以a>b,输出1。 有符号字符型和无符号字符型 举例 #include <stdio.h> #include <stdlib.h> int main() { char a = -1; unsigned char b = 1; printf("%d", a > b); return 0; }   输出结果:0 解析   要解释以上这个现象,首先要明白整型提升:   整型提升 是C程序设计语言中的一项规定:在表达式计算时,各种整形首先要 提升为int类型 ,如果int类型不足以表示 则要提升为unsigned int类型 ;然后执行表达式的运算。   整型提升的意义在于:表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器

String、StringBuffer、StringBuilder的区别——(面试题)

僤鯓⒐⒋嵵緔 提交于 2020-12-16 02:43:33
String、StringBuffer、StringBuilder的区别: String StringBuffer StringBuilder 执行速度 最差 其次 最高 线程安全 线程安全 线程安全 线程不安全 使用场景 少量字符串操作 多线程环境下的大量操作 单线程环境下的大量操作 String: 对于String来说,是把数据存放在了常量池中,因为所有的String,默认都是以常量形式保存,且由final修饰,因此在线程池中它是线程安全的。因为每一个String当被创建好了以后,他就不再发生任何变化,但是它的执行速度是最差的。 我们要创建String的时候,他在常量池中对这些信息进行处理,如果在程序中出现了大量字符串拼接的工作,效率是非常底下的。 因此使用场景是在少量字符串操作的时候才建议直接使用String来操作。 StirngBuffer:(效率不如StringBuilder,但远比String要高) StringBuffer相对于StringBuilder效率要相对低一点,但也远比String要高的多。效率低的原因:对于StringBuffer来说更多的考虑到了多线程的情况,在进行字符串操作的时候,它使用了synchronize关键字,对方法进行了同步处理。 因此StringBuffer适用于多线程环境下的大量操作。 StringBuilder:(没有考虑线程安全问题)

你还在用分页?试试 MyBatis 流式查询,这个你知道吗?

╄→尐↘猪︶ㄣ 提交于 2020-12-16 01:12:35
基本概念 流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。 如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。因此流式查询是一个数据库访问框架必须具备的功能。 流式查询的过程当中,数据库连接是保持打开状态的,因此要注意的是:执行一个流式查询后,数据库访问框架就不负责关闭数据库连接了,需要应用在取完数据后自己关闭。 先分享一个MyBatis知识点思维导图给大家 MyBatis 流式查询接口 MyBatis提供了一个叫org.apache.ibatis.cursor.Cursor的接口类用于流式查询,这个接口继承了java.io.Closeable和java.lang.Iterable接口,由此可知: Cursor 是可关闭的; Cursor 是可遍历的。 除此之外,Cursor 还提供了三个方法: isOpen():用于在取数据之前判断 Cursor 对象是否是打开状态。只有当打开时 Cursor 才能取数据; isConsumed():用于判断查询结果是否全部取完。 getCurrentIndex():返回已经获取了多少条数据 因为 Cursor 实现了迭代器接口,因此在实际使用当中,从

刷题2个月,我拿25k去了字节跳动,数据结果与算法太重要了

旧城冷巷雨未停 提交于 2020-12-15 08:47:46
前两天,字节跳动官方发文称,字节跳动计划在年底前将再扩招 1 万人,前景好、福利佳,想进大厂得各位,一定要把握这次机会。很巧的是 我有个朋友,他坚持刷题2个月,终于去了他字节跳动,薪资涨幅非常可观,期间面试还 遇到了算 法原题...并表示目前国内的大厂和一些独角兽,已经越来越效仿硅谷公司的做法,通过面试给定题编程,来考察数据结构和算法的扎实程度。 众所周知,算法确实对于程序员来说越来越重要了,我认识 不少以前履历普通的,通过刷题改变了自己进入大厂的轨迹。 因为据我所知很多大厂技术面试的要求是: 技术要好,计算机基础扎实,熟练掌握算法和数据结构,语言不重要,熟练度很重要。每一轮技术面试都可能考代码,不只考算法,但一定会考算法。 那你知道为什么要考算法么? 其实核心是看候选人是不是足够聪明。考算法一般会分两步,第一步是直接让你说思路,第二步是让你直接上手写代码。很多大厂的算法题一般对应的是 LeetCode 中级模式,要通过面试,你肯定得花时间好好准备。 所以说算法是其中必要的一个环节! 然而在我看来,这已经是相对来说比较公平的方式了。从项目来说,每位程序员做的差异非常大,很难通过你以往的项目经验判断出你的真正潜力。但是对于算法来说,大家起点都一样,这就像高考,通过考核算法题是可以看出你的编程内功是否深厚的,而且还能多维度考察你的其他能力,比如:逻辑思维清晰与否、debug 能力如何

刷题2个月,我拿25k去了字节跳动,数据结构与算法太重要了……

一世执手 提交于 2020-12-15 08:40:46
我有个朋友,他坚持刷题2个月,终于去了他梦寐以求的大厂,薪资涨幅非常可观,期间面字节跳动还遇到了算法原题...并表示目前国内的大厂和一些独角兽,已经越来越效仿硅谷公司的做法,通过面试给定题编程,来考察数据结构和算法的扎实程度。 众所周知,算法确实对于程序员来说越来越重要了,我认识 不少以前履历普通的,通过刷题改变了自己进入大厂的轨迹。 因为据我所知很多大厂技术面试的要求是: 技术要好,计算机基础扎实,熟练掌握算法和数据结构,语言不重要,熟练度很重要。每一轮技术面试都可能考代码,不只考算法,但一定会考算法。 那你知道为什么要考算法么? 其实核心是看候选人是不是足够聪明。考算法一般会分两步,第一步是直接让你说思路,第二步是让你直接上手写代码。很多大厂的算法题一般对应的是 LeetCode 中级模式,要通过面试,你肯定得花时间好好准备。 所以说算法是其中必要的一个环节! 然而在我看来,这已经是相对来说比较公平的方式了。从项目来说,每位程序员做的差异非常大,很难通过你以往的项目经验判断出你的真正潜力。但是对于算法来说,大家起点都一样,这就像高考,通过考核算法题是可以看出你的编程内功是否深厚的,而且还能多维度考察你的其他能力,比如:逻辑思维清晰与否、debug 能力如何、编码习惯怎样、是否能写出可维护的代码等等。 并且算法根基不扎实,不仅难过面试,对于代码性能的提升

Linux学习中,用户管理有哪些面试题需要掌握?

情到浓时终转凉″ 提交于 2020-12-15 08:24:02
Linux系统是个多用户系统,能做到不同的用户能同时访问不同的文件,因此一定要有文件权限控制机制。Linux系统的权限控制机制和 Windows的权限控制机制有着很大的差别。Linux运维学习中,用户管理有哪些面试题需要掌握? 1 选择 1.1 增加一个新用户admin,权限是root? useradd -u 0 -o admin useradd -g 0 -o admin useradd -g 1 -o admin useradd -u 1 -o admin 1.2 普通用户的ID一般是() =100 =500 =1000 =0 1.3 增加一个用户的命令是() useradd usermod groupadd userdel 1.5 (多选)Linux的非root用户,在自己的目录中,不可以删除非空目录dirs的方法是: rm dir dirs. rm -r dirs. mv dirs /dev/null destroy dirs 1.6 要查看当前unix系统中有哪些用户,可以查看以下哪个文件? profile passwd env boot 1.7 改变文件所有者的命令为_ chmod touch chown cat 1.8 sudo根据文件_判断谁是授权的用户 /etc/sudo /etc/sudoers /etc/login.defs /etc/.login 1.9

提个好问题,是可刻意练习的。

旧街凉风 提交于 2020-12-15 05:51:05
文 / IDO老徐 如何提问?如何高效提问?如何问个好问题? 这些是有方法可循,俗称是有套路的。 提问题比回答问题更启发人的智慧。 “ 最好的导师不是告知答案,而是向人提问。” @乔布斯 老徐观点: “ 好的领导,不会直接告诉你答案,而是善于通过提问引导 ” 有很多关于提问方面的书籍, 比如《学会提问》《提问的艺术》。 当然,这些书籍老徐并没有完整的看过,如果你有兴趣,可以去挑几本买来看看,毕竟书籍很便宜, 就几十块钱 。 买书,是最有价值的投资之一。 关于如何提问,理论性的内容,网上资料很多,通过看书籍,也能获取到。这些并不是老徐今天想分享的。 老徐想通过几个每天经历的事,阐述一些观点。 当然,如下老徐讲的,可能与你书上看的不完全一样,算是经验之谈,也许是错的,看之前,你要学会判断。 从技术人的角度,聊聊各位提问经常会遇到的5个问题。 1. 说了一连串,不知道你到底想问什么。 自己都没想清楚自己要问什么,如何能得到你想要的解答。 2. 想问的问题太多,不知道挑重点,不知道拆解。 很多同学,提的问题,里面包含多个问题,无法重点回答。 3. 明知故问。 有些同学,在提问的过程中,明明已经有了自己的答案了。 4. 问题太初级,未经大脑思考,未查阅资料。 5. 提的问题,没有给出前提条件,太泛,无法回答。 给几点建议: 提问之前,先去检索下,这个问题,是否之前给过答案,已经解答过

初级软件测试工程师面试题

删除回忆录丶 提交于 2020-12-15 02:21:43
点击上方蓝色“ 程序员一凡 ”,选择“设为星标” 回复“ 关键词 ”获取整理的资料 初级软件测试工程师面试题整理 1、软件的生命周期(prdctrm) 2、测试用例主要包括哪些类目 3、你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 4、问:给你一个网站,你如何测试? 5、在搜索引擎中输入汉字就可以解析到对应的域名,请问如何用LoadRunner进行测试。 6、问:一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别? 7、 试 述软件的概念和特点?软件复用的含义?构件包括哪些? 8、软件生存周期及其模型是什么? 9、什么是软件测试?软件测试的目的与原则 10、软件配置管理的作用?软件配置包括什么? 11、什么是软件质量? 12、目前主要的测试用例设计方法是什么? …… 文中面试题均整理自网络,完整版网盘链接(如果已经失效可以私信我): 链接: https://pan.baidu.com/s/174z2c8pDvmpzErIqztE0fw 提取码: f89w 如果整理的资料对你有帮助,我也会很开心,祝你生活愉快,事业顺利! 最后: 汲取经验在前,方能功成在后,不断学习成长!欢迎加入我们QQ交流群: 1079636098 ,交流软件测试Python自动化、测试开发。不管你现在处于哪一个阶段,都可以一起来报团取暖, 我们都是测试人!