笔试面试
文章平均质量分 92
IT技术管理认知&技能全面升级
不辜负自己,成就更好的自己!
展开
-
2018年,其实你可以让自己更幸运
2018年,我的第一个愿望:所有在奋斗路上的伙伴们,都有属于自己的收获。而我更加希望众多学员们能那一块“铂金砖”去敲开心仪企业大门!我先说一下这个“铂金砖”,如何制作高水平简历?问题隐隐透露着一种想炫技的需求。那我就先提醒一下关注这“铂金砖”的朋友,简历是用来找工作的,是写来总结和展示自己、并力求能够和应聘岗位匹配、进入面试、拿到Offer的。在HR眼里简历没有高水平低水平,只转载 2017-12-26 21:42:49 · 2014 阅读 · 1 评论 -
Linux资源管理之cgroups简介
cgroups 是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制,目前越来越火的轻量级容器 Docker 就使用了 cgroups 提供的资源限制能力来完成cpu,内存等部分的资源控制。另外,开发者也可以使用 cgroups 提供的精细化控制能力,限制某一个或者某一组进程的资源使用。比如在一个既部署了前端 web 服务,也部原创 2016-09-09 09:49:16 · 10265 阅读 · 0 评论 -
使用异步 I/O 大大提高应用程序的性能
Linux® 中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待 I/O 请求完成时不需要使用任何中央处理单元(CPU)。但是在某些情况中,I/O 请求可能需要与其他进程产生交叠。可移植操作系统接口(POSIX)异步 I/O(AIO)应用程序接口(API)就提供了这种功能。在本文中,转载 2016-07-28 12:00:24 · 792 阅读 · 0 评论 -
多进程单线程模型与单进程多线程模型之争
服务器,事件多进程单线程模型典型代表:nginx单进程多线程模型典型代表:memcached另外redis, mongodb也可以说是走的“多进程单线程模”模型(集群),只不过作为数据库服务器,需要进行写保护,只提供了读同步。原因很简单,因为服务器的发展大部分都是归功于Linux Unix,而不是Windows。Linux内核提供的epoll为开发服务器提供了很大的便利,lib转载 2016-06-17 12:12:02 · 7523 阅读 · 0 评论 -
事件驱动模型
围绕如何构建一个高效稳定的网络服务器程序,本文从一个最简单的服务器模型开始,依次介绍了使用多线程的服务器模型、使用非阻塞接口的服务器模型、利用select()接口实现的基于事件驱动的服务器模型,和使用libev事件驱动库的服务器模型。通过比较各个模型,得出事件驱动模型更适合构建高效稳定的网络服务器程序的结论。前言事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面转载 2016-03-29 10:39:52 · 1624 阅读 · 0 评论 -
使用 SCTP 优化网络
流控制传输协议(Stream Control Transmission Protocol,SCTP)是一种可靠的传输协议,它在两个端点之间提供稳定、有序的数据传递服务(非常类似于 TCP),并且可以保护数据消息边界(例如 UDP)。然而,与 TCP 和 UDP 不同,SCTP 是通过多宿主(Multi-homing)和多流(Multi-streaming)功能提供这些收益的,这两种功能均可提高转载 2016-03-29 09:25:45 · 2647 阅读 · 0 评论 -
史上最全面最精华的Linux内存相关资料
学习Red Hat's Linux System Administration Primer 提供一个很好的虚拟内存总结。关于 Linux 交换空间的一切 讨论了交换的目的、交换驻留的地方、以及用于管理交换空间的各种命令。为了提高缓存性能,制定了一个 压缩缓存模式。在这个模式中,交换磁盘事实上是一个快速内存磁盘,页面根据词条进行压缩来提高存储效率。Linux 内存管原创 2016-03-25 16:30:27 · 3728 阅读 · 0 评论 -
Linux保护模式之-CPL、RPL、DPL
先说下特权级的概念,在保护模式下,系统依靠特权级来实施代码和数据的保护,相当于权限啦。特权级共有4 个级别,0,1,2,3,数字越小表示权限越高。如图:较为核心的代码和数据放在较高(靠内)的层级中,处理器用此来防止较低特权的任务在不被允许的情况下访问处于高特权级的段。为了防止概念混淆,我们不用特权级大小来说明,改为内层(高),外层(低)来讲。特权级有3 种:CPL,DP转载 2016-03-29 09:09:43 · 6039 阅读 · 0 评论 -
DNS解析与域名服务安全防护策略
企业开源 DNS 服务应用概述在 Internet 上域名与 IP 地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识 IP 地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS 就是进行域名解析的服务器。DNS 是域名系统 Domain Name System 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。DNS 命名用于原创 2016-03-25 16:19:10 · 9156 阅读 · 2 评论 -
tcp详解之三次握手和四次挥手
作为一名开发者,无论使用什么样的开发语言,最基本的网络知识一定要理解透彻,这样才能获得更好的职业发展。整合两个blog内容,便于查看学习。建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:先来看看如何建立连接的。首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端转载 2016-03-25 09:35:30 · 611 阅读 · 0 评论 -
TCP 系统调用
引言典型的 TCP 客户机和服务器应用程序通过发布 TCP 系统调用序列来获取某些函数。这些系统调用包括socket ()、bind ()、listen ()、accept ()、send () 和 receive()。本文介绍在应用程序发布 TCP 系统调用时在较低级别中发生的情况,如下图 所示。图 1. TCP 应用程序进行的普通调用序列图转载 2016-03-24 17:06:46 · 6174 阅读 · 0 评论 -
地理空间距离计算优化
#1 地理空间距离计算面临的挑战打开美团app,不管是筛选团购还是筛选商家,默认的排序项都是“离我最近”或者“智能排序”(如下图所示)。不管是“离我最近”还是“智能排序”,都涉及到计算用户位置与各个团购单子或者商家的距离(注:在智能排序中距离作为一个重要的参数参与排序打分)。以筛选商家为例,北京地区有5~6w个POI(本文将商家称之为POI),当用户进入商家页,请求北京全城+所转载 2016-09-09 09:54:03 · 809 阅读 · 0 评论 -
浅谈TCP/IP网络编程中socket的行为
想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉:1. TCP/IP协议(如连接的建立和终止、重传和确认、滑动窗口和拥塞控制等等)2. Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为。3. 编写Performant, Scalable的服务器程序。包括多线程、IO Multiplexin转载 2016-11-25 18:46:15 · 915 阅读 · 0 评论 -
国内各大互联网公司Java工程师笔经面经
系统复习后,常规笔试面试题目,还是有必要看下,毕竟校招也是一场“应试”。原文链接:https://www.zhihu.com/question/26350691/answer/201135416?group_id=871448183987933185今天斩获今日头条 实习offer 特来分享WAP onsite interview面经BAT面经,暑假前趁热来一发吧怒斩阿里、百度、微转载 2017-09-03 13:50:51 · 2238 阅读 · 0 评论 -
常见数据结构简介
### BasicsStack: Array Implementation: 数组从前往后插入,从后往前删除,用 top 指针指示栈顶(待插入位置)。Stack: Linked List Implementation Top: 指针指向非空的链头元素,每次插入都从 top指向的链头位置插入,删除也是从链头。Queues: Array Implementation: 数组转载 2017-07-31 14:36:38 · 1066 阅读 · 0 评论 -
Netty线程模型(中)
1. 背景1.1. 惊人的性能数据数据分析与企业架构京东618大促下的数据驱动个性化推荐如何构建软硬件结合的人工智能产品研发体系中国创新型互联网企业走向海外的技术机遇与挑战LinkedIn成员分类平台大数据应用的最佳实践1.2. Netty基础入门2. Netty高性能之道2.1. RPC调用的性能模型分析 2.1.1. 传统RPC调用性能差的三宗罪转载 2017-07-05 18:01:00 · 1181 阅读 · 0 评论 -
Netty线程模型(上)
1. 背景1.1. Java线程模型的演进1.1.1. 单线程时间回到十几年前,那时主流的CPU都还是单核(除了商用高性能的小机),CPU的核心频率是机器最重要的指标之一。在Java领域当时比较流行的是单线程编程,对于CPU密集型的应用程序而言,频繁的通过多线程进行协作和抢占时间片反而会降低性能。1.1.2. 多线程随着硬件性能的提升,CPU的核数越转载 2017-07-05 17:55:04 · 794 阅读 · 0 评论 -
全面深入分析TCP的TIME_WAIT和CLOSE_WAIT(下)
讨论前大家可以拿手头的服务器摸摸底,记住「ss」比「netstat」快:shell> ss -ant | awk ' NR>1 {++s[$1]} END {for(k in s) print k,s[k]}'如果你只是想单独查询一下TIME_WAIT的数量,那么还可以更简单一些:shell> cat /proc/net/sockstat我猜你一定被巨大无比的TI转载 2017-07-05 17:48:39 · 1418 阅读 · 0 评论 -
全面深入分析TCP的TIME_WAIT和CLOSE_WAIT(上)
你遇到过TIME_WAIT的问题吗?我相信很多都遇到过这个问题。一旦有用户在喊:网络变慢了。第一件事情就是,netstat -a | grep TIME_WAIT | wc -l 一下,哎呀妈呀,几千个TIME_WAIT。然后,做的第一件事情就是:打开Google或者Bing,输入关键词:too many time wait。一定能找到解决方案,而排在最前面转载 2017-07-05 17:43:37 · 5736 阅读 · 1 评论 -
Linux系统的启动流程
图文讲述开机流程关于linux系统的启动流程可以分为以下步骤:POST(加电自检)–>加载BIOS(Basic Input/Outpu System)–>确定启动设备(Boot sequence)、加载Boot Loader–>加载内核(kernel)初始化initrd–>运行/sbin/init初始化系统–>打印用户登录提示符下面让我们逐步剖析说明系统启动过程转载 2017-07-05 17:39:53 · 763 阅读 · 0 评论 -
Linux开机启动过程分析
开机过程,需要了解。整理给大家。开机过程指的是从打开计算机电源直到LINUX显示用户登录画面的全过程。分析LINUX开机过程也是深入了解LINUX核心工作原理的一个很好的途径。启动第一步--加载BIOS当 你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关 信息、设转载 2017-07-05 17:36:13 · 658 阅读 · 0 评论 -
从文件 I/O 看 Linux 的虚拟文件系统
Linux 允许众多不同的文件系统共存,并支持跨文件系统的文件操作,这是因为有虚拟文件系统的存在。虚拟文件系统,即VFS(Virtual File System)是 Linux 内核中的一个软件抽象层。它通过一些数据结构及其方法向实际的文件系统如 ext2,vfat 提供接口机制。本文在简要介绍 VFS 的相关数据结构后,以文件 I/O 为切入点深入 Linux 内核源代码,追踪了 sys_o转载 2016-12-26 09:56:45 · 835 阅读 · 0 评论 -
安全编程: 避免竞争条件
了解什么是竞争条件,以及它们为什么会引发安全问题。本文展示了如何在类 UNIX(Unix-like)系统中处理常见的竞争条件,包括如何正确地创建锁文件、锁文件的替代者,如何处理文件系统,以及如何处理共享目录(特别是如何在 /tmp 目录下正确创建临时目录)。竞争条件简介这是个假想的故事;“Mallory”是攻击者的一个惯用名。但是这类攻击,以及它所利用的缺陷,都转载 2016-12-26 09:53:24 · 4446 阅读 · 1 评论 -
GDB 命令详细解释
GDB 命令详细解释 Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。 和所有常用的调试工具一样,gdb提供了以下功能: # 监视程序中变量的值 # 在程序中设置断点 # 程序的单步执行 在使用gdb前,必须先载入可执行文件,转载 2016-03-10 19:12:57 · 739 阅读 · 0 评论 -
Linux调试工具
1. 使用printf调试#ifdef DEBUGPrintf(“valriable x has value = %d\n”, x)#endif然后在编译选项中加入-DDEBUG更复杂的调试应用如:#define BASIC_DEBUG 1#define EXTRA_DEBUG 2#define SUPER_DEBUG 4转载 2016-03-10 19:11:46 · 11939 阅读 · 2 评论 -
Linux 内核中断内幕
本文对中断系统进行了全面的分析与探讨,主要包括中断控制器、中断分类、中断亲和力、中断线程化与 SMP 中的中断迁徙等。首先对中断工作原理进行了简要分析,接着详细探讨了中断亲和力的实现原理,最后对中断线程化与非线程化中断之间的实现机理进行了对比分析。什么是中断Linux 内核需要对连接到计算机上的所有硬件设备进行管理,毫无疑问这是它的份内事。如果要管理这些设备,首先得和它们互转载 2016-03-16 18:00:50 · 2441 阅读 · 0 评论 -
linux深入分析进程调度
本文从 Linux 2.4 调度系统的缺陷入手,详细分析了 Linux 2.6 调度系统的原理和实现细节,并对与调度系统相关的负载平衡、NUMA 结构以及实时性能进行了分析和评价。1. 前言Linux 的市场非常广阔,从桌面工作站到低端服务器,它都是任何商用操作系统的有力竞争对手。目前,Linux 正全力进军嵌入式系统和高端服务器系统领域,但它的技术缺陷限制了它的竞争力:缺乏对转载 2016-03-04 10:50:59 · 4603 阅读 · 0 评论 -
Linux内存管理误区问答总结
1,为什么需要分段,分页机制呢?2,所有进程拥有相同的虚拟地址空间吗?3,待续。。。原创 2016-03-16 16:06:53 · 539 阅读 · 0 评论 -
linux和windows的进程的虚拟地址空间
昨晚看到了深夜,终于对进程的虚拟地址空间有了个大致的了解,很激动,也很欣慰。回头想来,一个程序员,真的应该知道这些知识,否则还真不太称职。首先告诉大家,我后面提到的这些知识在《windows核心编程》中都有,强烈建议大家把这本书翻翻,我相信会对你的编程境界拔高好几个层次的。可是我最近没那么多时间,因此就只能了解个大概,然后等今后闲暇时再看这本书吧。昨天我媳妇还反复和我说:学东西必须要有选择转载 2016-03-16 15:37:06 · 1387 阅读 · 0 评论 -
Linux面试之进程地址空间
主要内容:*内核如何实现对进程动态内存的推迟分配?——使用一种新的资源(线性地址区)当用户进程请求动态内存时,并没有获得请求的页框,而是获得了一个新的线性地址的使用权。这线性地址区域就成为进程地址空间的一部分。*为什么要推迟分配?*进程怎样看待动态内存。*进程地址空间的基本组成。*缺页异常处理程序在推迟给进程分配页框中所起的作用。*内转载 2016-03-03 15:33:09 · 2185 阅读 · 0 评论 -
linux面试之你认识的fork、vfork、clone
在Linux中主要提供了fork、vfork、clone三个进程创建方法。fork:fork创建一个进程时,子进程只是完全复制父进程的资源,复制出来的子进程有自己的task_struct结构和pid,但却复制父进程其它所有的资源。例如,要是父进程打开了五个文件,那么子进程也有五个打开的文件,而且这些文件的当前读写指针也停在相同的地方。所以,这一步所做的是复制。这样得到的子进程独原创 2016-03-03 13:35:20 · 680 阅读 · 0 评论 -
linux面试之内存管理
一、前言二、简单的内存管理器示例三、GNU malloc算法四、Kernel Buddy伙伴系统算法五、Kernel Slab/Slub高速缓存算法 一、前言这次课程最初的题目叫《linux内存管理》, 可是写着写着就感觉这个题目起的太大了, VM(virtul memory)是操作系统中最抽象最复杂的子系统, 想通过一次课把它全部讲清楚有点不现实。 所以我把这转载 2016-03-03 12:11:25 · 3301 阅读 · 0 评论 -
linux面试之-多线程的用武之地
原因1.耗时的操作使用线程,提高应用程序响应2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。3.多CPU系统中,使用线程提高CPU利用率4.改善程序结构。一个既长又复杂的进程可以考虑分割为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。 使用多线程的理由之一是和进程相比,它是一种非常花销小,切换转载 2016-03-03 12:08:27 · 892 阅读 · 0 评论 -
linux面试之-谈谈你理解的堆和栈
问题描述 编程语言书籍中经常解释值类型被创建在栈上,引用类型被创建在堆上,但是并没有本质上解释这堆和栈是什么。我仅有高级语言编程经验,没有看过对此更清晰的解释。我的意思是我理解什么是栈,但是它们到底是什么,在哪儿呢(站在实际的计算机物理内存的角度上看)?在通常情况下由操作系统(OS)和语言的运行时(runtime)控制吗?它们的作用范围是什么?它们的大小由什么决定?哪个更快?转载 2016-03-03 12:06:01 · 1800 阅读 · 0 评论 -
linux面试基础考题
本片文章可能对没什么基础的初学者有些用,大部分有linux基础的童鞋们就请自动略过此节吧-_-||而且,学习或者复习linux这个东西,强烈建议不要光看书,一定动手敲一敲,玩一玩,会上手快得多。 linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多中型,大型甚至是巨型项目都在使用linux。linux内核:redhat 、红转载 2016-03-03 12:02:57 · 21845 阅读 · 0 评论 -
linux深入解析分段机制
先对分段机制中必须用到的一些名词作一个解释:段选择符:又称端选择子,是段的一个16位标识符。它并不直接指向段,而是指向段选择符表中定义段的段描述符。它有三个字段内容:请求特权级RPL(Request Privilege Level)、表指示标志TI(Table Index)、索引值(Index)段描述符:段描述符石GDT和LDT表中的一个数据结构项,用来向处理器提供一个转载 2016-03-15 18:27:27 · 4568 阅读 · 0 评论 -
linux内存模型
理解 Linux 使用的内存模型是从更大程度上掌握 Linux 设计和实现的第一步,因此本文将概述 Linux 内存模型和管理。Linux 使用的是单一整体式结构 (Monolithic),其中定义了一组原语或系统调用以实现操作系统的服务,例如在几个模块中以超级模式运行的进程管理、并发控制和内存管理服务。尽管出于兼容性考虑,Linux 依然将段控制单元模型 (segment control转载 2016-03-17 17:22:39 · 5657 阅读 · 0 评论 -
linux面试之--堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。堆,就是那些由 new 分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个 new 就要对应一个 delete。如果程序员没有释转载 2016-03-08 18:14:22 · 4510 阅读 · 4 评论 -
Linux 2.6内核中新的锁机制RCU
一、 引言众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度差距越来越大,而这种锁使用了原子操作指令,它需要原子地访问内存,转载 2016-04-01 13:43:32 · 3025 阅读 · 0 评论 -
linux面试之--栈,堆,全局,文字常量,代码区
一. 区域划分 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack): 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) : 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)转载 2016-03-08 18:12:58 · 1052 阅读 · 0 评论