面试
文章平均质量分 67
大仙带你飞
活到老,学到老!
展开
-
常用的数据结构-树
树(Tree)的基本概念树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。二叉树每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树的性质1.若二叉树的层次从0开始,则在二叉树的第i层至多有2^i个结点(i>=0)2.高度为k的二叉树最多有2^(k+1) - 1个结点原创 2021-02-02 15:10:38 · 421 阅读 · 0 评论 -
如何实现一个高效的单向链表逆序输出?
示例:以逆序A->B->C->D为例,图示如下java实现public void reverseLinkList() { //逆序输出链表的所有内容if (head == null || head.getNext() == null) { //当链表只有一个头节点或者只有一个结点,逆序还是原来的链表,所以直接返回 return;} else { Node p = head.getNext(); Node q = head.getNext().getNext()原创 2021-01-19 19:55:02 · 302 阅读 · 0 评论 -
java的HashMap知多少
首先,我们需要知道HashMap的底层实现是数组、链表、红黑树。HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快 的访问速度,但遍历顺序却是不确定的。 HashMap 最多只允许一条记录的键为 null,允许多条记 录的值为 null。HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导 致数据的不一致。如果需要满足线程安全,可以用 Collections 的 synchronizedMap 方法使 H原创 2021-01-17 18:56:42 · 144 阅读 · 0 评论 -
面试必问题-乐观锁和悲观锁
前言在学习异步的时候,经常会听到锁的概念,常见的锁有行锁,表锁,读写锁等。但是这些锁属于乐观锁还是悲观锁呢?什么是乐观锁以及悲观锁呢?什么时候用乐观锁以及悲观锁呢以及使用它们所带来的问题有哪些呢?本文带你深入研究一下这两种锁,也是程序员面试必备的技能。正文悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿...原创 2020-03-03 10:54:40 · 184 阅读 · 0 评论 -
架构之路-微服务
前言要想成为一名优秀的机构师,掌握微服务是必不可少的,那什么是微服务呢?使用微服务有什么好处?下面带大家来了解这个被越来越多人使用的东西。正文什么是微服务微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。一.单体架构1.1什么是单体架构在软件设计的时候经常提到和使用经典的3层模型,即表现层,业务逻...原创 2020-02-28 14:12:22 · 124 阅读 · 0 评论 -
Rocketmq原理
一、 MQ背景消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性。主要具有以下优势:削峰填谷(主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题)系统解耦(解决不同重要程度、不同能力级别系统之间依赖导致一死全死)提升性能(当存在一对多调用时,可以发一条消息给消息系统,让消息系统通知相关系统)蓄流压测(线上有些链路不好压测,可以通过堆积一定量消...原创 2020-02-05 19:39:10 · 1708 阅读 · 0 评论 -
如何处理负载、高并发?
答:从低成本、高性能和高扩张性的角度来说有如下处理方案:1、HTML静态化其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的 网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。2、图片服务器分离把图片单独存储,尽量减少图片等大流量的开销,可以放在一些相关的平台上,如骑牛等3、数据库集群和库表散列及缓存数据库的并发连接为...原创 2020-02-04 15:55:20 · 1983 阅读 · 0 评论 -
静态化如何实现的?伪静态如何实现?
1、 静态化指的是页面静态化,也即生成实实在在的静态文件,也即不需要查询数据库就可以直接从文件中获取数据,指的是真静态。实现方式主要有两种:一种是我们在添加信息入库的时候就生成的静态文件,也称为模板替换技术。一种是用户在访问我们的页面时先判断是否有对应的缓存文件存在,如果存在就读缓存,不存在就读数据库,同时生成缓存文件。2、伪静态不是真正意义上的静态化,之所以使用伪静态,主要是为了SE...原创 2020-02-04 12:42:52 · 926 阅读 · 0 评论 -
腾讯的一道面试题
使用正则表达式提取一段标识语言(html或xml)代码段中指定标签的指定属性值(需考虑属性值对不规则的情况,如大小写不敏感,属性名值与等号间有空格等)。此处假设需提取test标签的attr属性值,请自行构建包含该标签的串(腾讯)个人解法(仅供参考):<?phpheader("content-type:text/html;charset=utf-8");f...原创 2020-02-04 12:08:25 · 264 阅读 · 0 评论 -
从一个标准url获取文件后缀,你知道怎么处理嘛?
今天面试了一个公司,其中有个面试题就是从标准url获取文件后缀,刚看到 这个题目,就想url是一个字符串,所以获取文件后缀就是截取一段字符串。 本人提供两种方案: //方案一functiongetExt1($url){$arr=parse_url($url);//Array([scheme]=&g...原创 2020-02-04 11:45:14 · 646 阅读 · 0 评论 -
算法-洗牌算法
今天面试了一家公司,要求写洗牌算法,我想这个很简单啊,就是要求输出不同的牌并且牌的顺序尽量分开嘛想了一下代码就出来了(php实现比较简单,其他语言可能复杂一点单思想是一样的),当然了还有很多的算法可以实现,以下为个人代码:<?php/*** 洗牌程序* edit wuhaifei* email 18879388361@163.com* at 2020/2/1*/$ca...原创 2020-02-01 15:59:19 · 321 阅读 · 0 评论 -
[编程题]集合遍历
有K种颜色的小球(K<=10),每种小球有若干个,总数小于100个。现在有一个小盒子,能放N个小球(N<=8),现在要从这些小球里挑出N个小球,放满盒子。想知道有哪些挑选方式。注:每种颜色的小球之间没有差别。请按数字递增顺序输出挑选小球的所有方式。如有3种颜色,每种颜色小球的个数分别为a:1,b:2,c:3,挑出3个小球的挑法有:003,012,021,102,111,120...原创 2020-01-12 23:03:01 · 1236 阅读 · 0 评论 -
[编程题]子串模糊匹配
[编程题]子串模糊匹配时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M从字符串string开始完整匹配子串sub,返回匹配到的字符个数。sub中如果出现'?'表示可以匹配一到三个除'\0'以外的任意字符。如果sub还有找不到匹配的字符,则说明不能完整匹配。如果能完整匹配,返回匹配到的字符个数,如果有多种匹配方式,返回匹配字符数最少的那个,如果不...原创 2020-01-11 02:06:31 · 757 阅读 · 1 评论 -
Linux 磁盘管理
Linux磁盘管理好坏直接关系到整个系统的性能问题。Linux磁盘管理常用三个命令为df、du和fdisk。df:列出文件系统的整体磁盘使用量 du:检查磁盘空间使用量 fdisk:用于磁盘分区dfdf命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。语法:df [-ahikHTm] [目录或文件名]选...原创 2020-01-10 14:55:19 · 153 阅读 · 0 评论 -
Linux 用户和用户组管理
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个唯一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系统...原创 2020-01-10 13:48:24 · 261 阅读 · 0 评论 -
Linux 文件与目录管理
我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /。其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们。在开始本教程前我们需要先知道什么是绝对路径与相对路径。绝对路径: 路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。 相对路径: 路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/shar...原创 2020-01-10 13:19:54 · 169 阅读 · 0 评论 -
设计模式-装饰器模式
我们都知道,得到一匹布需要大概这么几步: 1、染色 2、印花 3、裁剪 这种形式在面向对象中怎么实现呢?面向过程【继承模式】实现: 继承模式得到需要的布料,一步一步的加工。 继承的层次越来越深,扩展性差。如果中间加道其他程序,就有些吃力了。<?php header("content-type:text/html;ch...原创 2020-01-08 12:14:07 · 100 阅读 · 0 评论 -
设计模式-策略模式
策略模式 简单理解就是 有n个做法供你选择,根据你的需要选择某个策略得到结果就应用场景来说:例1:比如购买商品需要支付,你可以提供 微信支付、支付宝支付、支付通支付。。。。(不同的支付方式就是不同的策略)例2:购物车对产品的计价,如非vip 按原价计算 、vip按8折计算、有推广积分的可以用100积分抵20块。。。(不同的客户条件计价算法有所不同,只是这里的策略选择是根据登录顾客资料来...原创 2020-01-08 11:54:41 · 134 阅读 · 0 评论 -
设计模式-观察者模式
一.观察者模式特点解释:观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码,而观察者模式实现了低耦合,非侵入式的通知与更新机制二...原创 2020-01-08 10:34:28 · 171 阅读 · 0 评论 -
设计模式-适配器模式
一.适配器模式的特点适配器模式核心思想:把对某些相似的类的操作转化为一个统一的“接口”(这里是比喻的说话)--适配器,或者比喻为一个“界面”,统一或屏蔽了那些类的细节。适配器模式还构造了一种“机制”,使“适配”的类可以很容易的增减,而不用修改与适配器交互的代码,符合“减少代码间耦合”的设计原则。角色:目标(Target)角色:定义客户端使用的与特定领域相关的接口,这也就是我们所期待...原创 2020-01-08 09:59:47 · 248 阅读 · 0 评论 -
设计模式-单例模式
一、三私一公:①、私有静态属性,又来储存生成的唯一对象②、私有构造函数③、私有克隆函数,防止克隆——clone④、公共静态方法,用来访问静态属性储存的对象,如果没有对象,则生成此单例二、关键词instanceof检查此变量是否为该类的对象、子类、或是实现接口。1、一个private的__construct是必须的,单例类不能在其它类中实例化,只能被自身实例化;2、拥有...原创 2020-01-07 22:15:53 · 97 阅读 · 0 评论 -
面试问有哪几种垃圾回收算法,再也不怕了!
可以从不同的的角度去划分垃圾回收算法:一、按照基本回收策略分初级篇引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。标记-清除(Mark-Sweep):此算法执行分两阶段。第一阶段从引用根节点开始标...原创 2020-01-07 14:21:40 · 236 阅读 · 0 评论 -
贪心算法
文章目录1.贪心算法简介1.1 基本定义1.2 贪心算法案例1.3.贪心算法的基本思路2.贪心算法最优性证明2.1 贪心算法的前提2.2 最优子结构2.3 贪心算法与动态规划的区别3.贪心算法的经典问题3.1 近似解3.2 最优解参考资料1.贪心算法简介1.1 基本定义在贪婪算法(greedy method) 中,我们要逐步构造一个最优解。每一步,我们都在一定的标准下...原创 2020-01-06 20:58:06 · 336 阅读 · 0 评论 -
分治算法
分治算法一、算法设计与分析的基本概念一、算法二、算法设计三、算法的表示二、算法分析基础一、算法复杂度分析三、分治法一、递归的概念二、分治法的基本思想一、算法设计与分析的基本概念一、算法算法是指解决问题的一种方法或一个过程。是若干指令的有穷序列。算法具有5个重要特性:(1)有穷性:算法必须在执行有穷步之后结束,且每一步都可以在有穷的时间内完成。(2)确定性:算法的每条指...原创 2020-01-06 19:15:47 · 519 阅读 · 0 评论 -
为PHP面试而准备的算法题总结
1、插入排序(一维数组)基本思想:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。示例:[初始关键字] [49] 38 65 97 76 13 27 49J=2(38) [38 49] 65 97 76 13 27 49J=3(65) [38 49 65] 97 76 13 27 49J=4(97) [38 49 ...原创 2020-01-06 18:59:00 · 173 阅读 · 0 评论 -
工作中常用的正则表达式
一、校验数字的表达式数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$ 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$ 正数、负数、和小...原创 2020-01-05 19:16:22 · 112 阅读 · 0 评论 -
docker的常见命令?
安装 参考官⽹⽂档进⾏安装: https://www.docker.com/get-started 配置 docker加速 daocloud加速: https://www.daocloud.io/mirror 阿⾥云加速:https://blog.csdn.net/kozazyh/article/details/79511723 ⼯作⽬录迁移 /var/lib/...原创 2020-01-02 13:33:33 · 144 阅读 · 0 评论 -
缓存雪崩和缓存穿透解决方案
缓存雪崩和缓存穿透缓存雪崩:简单的说就是缓存失效,原本该访问缓存的数据直接访问数据库,从而造成数据库和内存压力大,严重的可能导致数据库宕机、服务器崩溃。解决方案:1.使用分布式锁或者对列控制读数据库写缓存的线程数,保证这有一个个线程进行操作。缺 点降低了系统的吞吐量2.redis中的key 失效时间尽量设置分布均匀3.使用mq来解决缓存雪崩效应。当大量请求访问redis中没有值,把查询...原创 2020-01-01 18:41:20 · 113 阅读 · 0 评论 -
如何将 Redis 的内存优化?
双十一、双十二都是买买买的节奏,但是你知道吗?像京东、淘宝这样的电子商城是如何扛得住几亿的请求吗?下面是一个电商网站的基本架构,他包括了一个前端入口和一个缓存集群以及数据库集群。一般来说,web 服务器作为前端入口,在 web 服务器内会把一些静态文件通过 CDN 分发到各个节点分摊服务器的请求压力。同时也能加速网站的访问。当用户的一些查询请求,比如要查询一个商品的信息,会通过前端页面...原创 2020-01-01 18:22:53 · 252 阅读 · 0 评论 -
常用的三种nosql非关系数据库redis、memcache、mongoDB比较
常用的三种nosql非关系数据库-redis、memcache、mongoDB比较:两者的相同之处在于把数据保存在内存中。(1)性能性能都比较好。从总体来看,TPS 方面 redis 和 memcache 差不多,一般要大于 mongodb。(2)操作的便利性memcache 数据结构单一,只有key-value结构。redis数据结构非常丰富,数据操作方面,redis 更好一些...原创 2020-01-01 18:00:55 · 273 阅读 · 0 评论 -
如何解决Redis的并发竞争key问题
第一种方案:分布式锁1.整体技术方案这种情况,主要是准备一个分布式锁,大家去抢锁,抢到锁就做set操作。2.为什么是分布式锁因为传统的加锁的做法(如java的synchronized和Lock)这里没用,只适合单点。因为这是分布式环境,需要的是分布式锁。当然,分布式锁可以基于很多种方式实现,比如zookeeper、redis等,不管哪种方式实现,基本原理是不变的:用一个状态值表...原创 2020-01-01 13:49:57 · 281 阅读 · 0 评论 -
redis如何实现分布式锁?
1.分布式锁需要解决的问题互斥性:任意时刻只能有一个客户端拥有锁,不能同时多个客户端获取安全性:锁只能被持有该锁的用户删除,而不能被其他用户删除死锁:获取锁的客户端因为某些原因而宕机,而未能释放锁,其他客户端无法获取此锁,需要有机制来避免该类问题的发生容错:当部分节点宕机,客户端仍能获取锁或者释放锁2.如何通过Redis实现分布式锁:(非完善方法)SETNX key value :如果...原创 2020-01-01 13:22:04 · 135 阅读 · 0 评论 -
MySQL中redo日志和undo日志,你知道吗?
redo日志磁盘的随机IO和顺序IO随机IO即IO操作的地址是随机的不连续的,顺序IO是操作的磁盘地址是连续的Buffer Pool缓冲池,也就是当读取一页数据进行一波操作后并不会立马就删除或者同步更新修改到磁盘中,而是保存在所谓的Buffer Pool中,下次用到时就不用重新读取了,因为读取磁盘的速度实在太慢太慢了。Buffer Pool的空间肯定是有限的,为了保存一直用到的数据,所以会...原创 2019-12-31 20:10:04 · 299 阅读 · 0 评论 -
事务的四种隔离级别
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。下面通过事例一一阐述它们的概念与联系。Read uncommitted读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。事例:老板要给程序员发工...原创 2019-12-30 23:38:52 · 1693 阅读 · 0 评论 -
给你一张百万级数据的表,如何做到查询优化?
1.两种查询引擎查询速度(myIsam 引擎)InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作有些不同,InnoDB类型的表用count(*)或者count(主键),加上w...原创 2019-12-30 22:55:24 · 3261 阅读 · 0 评论 -
数据库的几种索引
(1)按照索引列值的唯一性,索引可分为唯一索引和非唯一索引①非唯一索引:B树索引create index 索引名 on 表名(列名) tablespace 表空间名;②唯一索引:建立主键或者唯一约束时会自动在对应的列上建立唯一索引(2)索引列的个数:单列索引和复合索引(3)按照索引列的物理组织方式①B树索引create index 索引名 on 表名(列名) tablespace 表...原创 2019-12-30 22:42:04 · 492 阅读 · 0 评论 -
[mysql]原理之auto_increment
引言MySQL中auto_increment字段估计大家都经常用到,特别是innodb引擎。我也经常用,只知道mysql可以保证这个字段在多进程操作时的原子性,具体原理又是什么,后来查阅了MySQL手册以及相关资料,了解了个大概。本文只探究了mysql5.5中innodb引擎auto_increment的问题。定义使用auto_increment的字段可能生成唯一的标识。如何使...原创 2019-12-30 22:17:56 · 746 阅读 · 0 评论 -
B+树总结
B+树特征B+ 树是一种树数据结构,是一个n叉树,每个节点通常有多个孩子,一颗B+树包含根节点、内部节点和叶子节点。B+ 树通常用于数据库和操作系统的文件系统中。 B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。 B+ 树元素自底向上插入。一个m阶的B树具有如下几个特征:1.根结点至少有两个子女。2.每个中间节点都至少包含ceil(m / 2)个孩子,...原创 2019-12-30 21:29:22 · 512 阅读 · 0 评论 -
INNODB索引实现原理
一 序本篇继续整理Innodb索引实现原理。二 B+树B+树属于索引的基础,不在详细介绍插入删除过程。只介绍特点。1 搜索二叉树:每个节点有两个子节点,数据量的增大必然导致高度的快速增加,显然这个不适合作为大量数据存储的基础结构。2 B树(m阶):一棵m阶B树是一棵平衡的m路搜索树。每个节点之多拥有m棵子树;根结点至少拥有两颗子树(存在子树的情况下);除了根结点以外...原创 2019-12-30 19:27:03 · 1470 阅读 · 0 评论 -
事务的ACID特性
什么是ACIDACID是衡量事务的四个特性:原子性(Atomicity,或称不可分割性) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability)原子性:原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做;如果事务中一个sql语句执行失败,则已执行的 语句也必须回滚,数据库退回到事务前的状态。实现原理:undo lo...原创 2019-12-30 19:16:14 · 419 阅读 · 0 评论