面试

JavaScript面向对象(一)——JS OOP基础与JS 中This指向详解

↘锁芯ラ 提交于 2020-11-21 12:47:28
前 言   学过程序语言的都知道,我们的程序语言进化是从“面向机器”、到“面向过程”、再到“面向对象”一步步的发展而来。类似于汇编语言这样的面向机器的语言,随着时代的发展已经逐渐淘汰;而面向过程的语言也只有C语言老大哥依然坚挺;现在主流的语言(例如Java、C++、PHP等)都是面向对象的语言。 而我们的JavaScript语言,恰恰介于面向过程与面向对象之间,我们称它为“基于对象”的语言。但是,JS中的OOP依然是我们学习JS的重要一环,当然像“继承”“封装”这样的面向对象特征,都是由模拟实现的。今天,我们就一起来探讨一下JS中的面向对象吧! 一、面向对象概述 1.1面向过程与面向对象   面向过程:专注于如何去解决一个问题的过程。编程特点是用一个个函数去实现过程操作,没有类与对象的概念;   [举个栗子]   当你想吃一个鸡蛋灌饼的时候,面向过程的思维需要你掌握购买食材、和面、烙饼、煎蛋等一系列的方法,然后按照顺序一个一个方法的去执行。   面向对象:专注于有哪一个对象实体去解决这个问题。编程特点是:出现了一个个的类,由类去生成对象。   [举个栗子]   还是想吃鸡蛋灌饼,按照面向对象的思维,你需要去找一个买鸡蛋灌饼的阿姨,让他给你做一个。这时候,这个阿姨就是我们解决这个问题的对象。 1.2面向对象三大特征   继承、封装、多态 1.3类&对象的关系   ① 类

拼多多四面(Java岗):多线程+算法+网络+MySQL+Redis+分布式

心已入冬 提交于 2020-11-21 12:36:38
一面 线程池由哪些组件组成,有哪些线程池,分别怎么使用,以及拒绝策略有哪些 写一题算法,层次遍历树并输出每层的层级 写一道题,二叉树的后序遍历,非递归算法。 什么时候多线程会发生死锁,写一个例子 说一说jdk1.8中,对hashMap的优化,对concurrentHashMap的优化 如何解决hash冲突的,以及如果冲突了,怎么在hash表中找到目标值 有1000个数据存在hashmap中,实际的数量是多少,考虑负载因子和扩容 常见的RPC有哪些?对应的区别和性能比较? 操作系统的用户态和核心态切换条件以及为什么要切换 线程间的通信方式,异步队列,消息延迟获取 二面 MySQL的主从复制怎么做 MySQL的索引,使用B+树索引的好处 MySQL性能查看以及如何优化 Redis是怎么做缓存的 Redis的持久化操作 如何利用redis处理热点数据 TCP三次握手的过程,如果没有第三次握手有什么问题。 分布式锁怎么实现 三面 cap了解么,分别指什么 网络编程nio和netty相关,netty的线程模型,零拷贝实现 Redis是单线程还是多线程?Redis的分布式集群怎么做? 分布式消息队列有哪些(Kafka等)?有使用过哪些?具体应用在什么场景? 负载均衡怎么做的呢,为什么这么做,了解过集群雪崩么。 谈谈高并发场景下削峰,限流的实现? 四面(HR) 为什么跳槽? 期望的薪资是多少?

执行流程 | 你真的了解Spring AOP的执行顺序吗?

老子叫甜甜 提交于 2020-11-21 12:21:55
Hi! 我是小小,我们又见面了,今天的主要内容是,你真的了解Spring AOP的执行顺序吗?跟随着我的脚步,一块丈量世界,了解世界,重新认识,重新了解Spring AOP的执行顺序。 聊一聊毕业四个月的感受 毕业四个月了,劳动合同还没有签,一切都没有稳定下来,不过也似乎也将要稳定下来了,生活如流水一般非常平稳的运行着,而我的公众号也在非常平稳的编写着,当然啦,自己最喜欢听的音乐也还是没有变,MySoul,一成不变,似乎生活进入了稳定状态,又或者生活没有进入稳定状态,我也不知道,只知道,这就是生活,唯有这样的生活才能继续进行。这四个月对我感觉,就是每天敲啊敲,每天的敲,拿着微薄的薪水,获得着微薄的收入,或许这就是生活,自己的,也许这就是一个普通人,再也不能普通过的了生活了,好啦,不吐槽了,生活还需要继续进行下去,我们隆重的开始今天的正文。 AOP核心概念 需要了解AOP,首先需要了解这些Spring AOP这些核心概念。 Aspect 切面:由一系列切点,增强和引入组成的模块对象,可定义优先级,从而影响增强和引入的执行顺序,事物管理,在Java中就是一个切面应用的例子。 Join point 接入点:程序执行期的一个点,例如方法执行,类初始化,异常处理,在Spring AOP中,接入点始终表示方法的执行。 Advice 增强切面在特点接入点的执行动作,包括 around

Redis实战 | 5种Redis数据类型详解

六眼飞鱼酱① 提交于 2020-11-21 11:16:40
我们知道Redis是目前非常主流的KV数据库,它因高性能的读写能力而著称,其实还有另外一个优势,就是Redis提供了更加丰富的数据类型,这使得Redis有着更加广泛的使用场景。那Redis提供给用户的有哪些数据类型呢? 主要有:string(字符串)、List(列表)、Set(集合)、Hash(哈希)、Zset(有序集合)、HyperLogLogs(计算基数用的一种数据结构)、Streams(Redis 5.0提供一种建模日志用的全新数据结构)。 需要注意的是这里说的数据类型是指Redis值的数据类型,而Redis键的类型总是string。 本文主要详解一下前5种,也就是最常用的5种数据类型。剩下两种可上Redis官网(redis.io)自行了解下。另外,Redis已经是目前Java程序员面试必问内容,而 “Redis有哪些数据类型?” 更是面试官张口就来的基础问题。如果连这第一问都过不了,那基本上Redis这块已经凉凉了。 string | 字符串类型 redis的字符串类型,可以存储字符串、整数或者浮点数。如果存储的是整数或者浮点数,还能执行自增或者自减操作。 并且 redis的string类型是二进制安全的 ,它可以包含任何数据,比如一个序列化的对象、一个图片字节流等。不过存储大小是由上限的-512M 这里解释下二进制安全的含义:简单的来说

面试题思考:GET和POST两种基本请求方法的区别

谁都会走 提交于 2020-11-21 11:13:25
面试回答: GET请求在URL中传送的参数是有长度限制的,而POST没有。 GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。 GET参数通过URL传递,POST放在Request body中。 GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 GET请求只能进行url编码,而POST支持多种编码方式。 GET请求会被浏览器主动cache,而POST不会,除非手动设置。 GET产生的URL地址可以被Bookmark,而POST不可以。 GET在浏览器回退时是无害的,而POST会再次提交请求。 答上几条就行了。 深入: GET和POST本质上没有区别 GET和POST是什么?HTTP协议中的两种发送请求的方法。 HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。 HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。 GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。 那么,“标准答案”里的那些区别是怎么回事? 举例: TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。 但是如果路上跑的全是看起来一模一样的汽车

java IO NIO BIO 最权威的总结

折月煮酒 提交于 2020-11-21 08:41:02
1. BIO (Blocking I/O) 1.1 传统 BIO 1.2 伪异步 IO 1.3 代码示例 1.4 总结 2. NIO (New I/O) 2.1 NIO 简介 2.2 NIO的特性/NIO与IO区别 1)Non-blocking IO(非阻塞IO) 2)Buffer(缓冲区) 3)Channel (通道) 4)Selectors(选择器) 2.3 NIO 读数据和写数据方式 2.4 NIO核心组件简单介绍 2.5 代码示例 3. AIO (Asynchronous I/O) 参考 BIO,NIO,AIO 总结 Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候,不需要关心操作系统层面的知识,也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。 在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。 同步与异步 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。 异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。 同步和异步的区别最大在于异步的话调用者不需要等待处理结果

【原创】Java并发编程系列10 | 线程状态

大城市里の小女人 提交于 2020-11-21 08:19:38
【原创】Java并发编程系列10 | 线程状态 收录于话题 #进阶架构师 | 并发编程专题 12个 点击上方“java进阶架构师”,选择右上角“置顶公众号” 20大进阶架构专题每日送达 Java并发编程脑图 本文为何适原创并发编程系列第 10 篇,前面几篇没看过的,可以在文末找到前几篇的跳转链接。前面几篇理论知识介绍了一大堆,实际编程中线程应该怎么用呢?接下来就要开始介绍实际编程中如何操作线程,本文内容如下: 如何创建并启动线程? 创建并启动线程时需要注意些什么问题? 线程都有哪些状态?这些状态之间如果转换的? 应该如何查看线程的状态? 1. 创建启动线程 两种方法 创建和启动线程两种方法:继承 Thread 类、实现 Runable 接口。 方法一:继承 Thread public class Test { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); } } class MyThread extends Thread { @Override public void run() { System.out.println("创建线程"); } } 方法二:实现 Runable public class Test { public static

面试官问:为什么 Java 线程没有 Running 状态?我懵了

↘锁芯ラ 提交于 2020-11-21 06:16:39
编辑:沉默王三 http://rrd.me/ekN5T Java 虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事。具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态: 01、什么是 RUNNABLE? 直接看它的 Javadoc 中的说明: 一个在 JVM 中执行的线程处于这一状态中。(A thread executing in the Java virtual machine is in this state.) 而传统的进(线)程状态一般划分如下: 注:这里的进程指早期的单线程进程,这里所谓进程状态实质就是线程状态。 那么 RUNNABLE 与图中的 ready 与 running 区别在哪呢? 02、与传统的 ready 状态的区别 更具体点,javadoc 中是这样说的: 处于 RUNNABLE 状态下的线程正在 Java 虚拟机中执行,但它可能正在等待来自于操作系统的其它资源,比如处理器。 A thread in the runnable state is executing in the Java virtual machine but it may be waiting forother resources from the operating system such as

深信服,前端面试

偶尔善良 提交于 2020-11-21 05:30:18
7月7,怀着期待害怕的心情去了深信服的面试,到最后走出面试“食堂”,深信服给我的印象,依然还是挺美好。不能成为公司的一员虽然遗憾但也情理之中。(毕竟我真的水平很差啊。。) 面试官的第一个问题,给了我一张纸,让我写 JS继承 。直中命门,没学过,GG。 既然不会写继承,那么 原型链 是否有了解? 我。。。 call() 是否有用过,它的作用是什么? 我。。。 怎样 遍历一个对象的属性 ?我本来想这不是我经常碰到的吗,但是估计是脑子抽到了,我说了for循环。其实我常用的是$.each(),这里他是想考我for in。 了解过 闭包 吗?心里稍微松了口气,回答了闭包的含义以及闭包的坏处,但是对于内存泄漏如何查看,使用什么工具查看我依然回答不上来,面试官告诉我简单的F12就可以查看了。 我。。。 看出了我的JS基础并不好,面试官尝试了解我的其他技能水平,于是转到了TP框架的 MVC原理 以及 数据库的多表查询 。MVC原理我心里还是懂的,但是我感觉自己描述的并不专业。多表查询以前我写项目的时候还是蛮熟的,不过这么久没接触了感觉自己是写错了。 依旧在寻找我的发光点的面试官,把问题转到了我自以为比较熟悉的JQuery。 splice() 函数??!!为什么我没有深深的记住这些操作数组的方法!!事实证明,平时工作不要过多依赖百度,以为自己懂这个知识点只是暂时忘记的心里安慰

多益游戏研发笔试-2019秋招

此生再无相见时 提交于 2020-11-21 04:43:27
今天...早上10点赶去西电去参加了宣讲会,完了做了一个笔试....估计没什么情况。编程题不会做。下午又做了平安产险的笔试(比较随便,编程是一道Leetcode简单题吧---求最大连续子数组的和O(n)),晚上通知去第二天面试。 晚上刚做完多益的笔试,比较正经。 1. 20道选择,涉及算法数据库和操作系统方面的知识; 2. 6道填空题,涉及数据结构和算法; 3. 简答题:一个英翻汉,一个数据库,还有一个多线程和多进程的区别; 4. 一道编程:O(n)洗牌算法,忘记了,写了一个大于O(n)的。 贴一下简单实现的O(n)代码 1 // 一种O(n)的洗牌算法 2 vector< int > randNUms(vector< int > &nums, int m) 3 { 4 int len = nums.size(); 5 if (len < m) 6 return {}; 7 8 vector< int > res; 9 for ( int i = len - 1 ; i >= 0 , m-- > 0 ; i-- ) 10 { 11 int r = rand() % i; 12 res.push_back(nums[r]); 13 int tmp = nums[r]; 14 nums[r] = nums[i]; 15 nums[i] = tmp; 16 } 17 return res