面试

JS案例:实现Promise

≯℡__Kan透↙ 提交于 2020-11-20 16:05:14
说到ES6的Promise,大家并不陌生,它是JS中解决异步的方法之一 其优点:避免回调地狱,链式调用,函数思路清晰,逻辑相对回调函数和事件发布/订阅更强 缺点:理解性差,异步操作在promise构造函数内部 这段时间在整理面试题时发现,Promise的实现可以单独拿出来分享,于是自己简单实现了一下 码云地址: https://gitee.com/DieHunter/myCode/tree/master/Promise%E5%B0%81%E8%A3%85 实现完整功能之前,我们先了解一下Promise的用法,并实现一个简单的Promise和Promise.then函数 Promise(executor: (resolve: (value?: any) => void, reject: (reason?: any) => void) => void): Promise<any> 上述配置提示中显示,Promise需要传入一个回调函数,函数有两个参数(resolve, reject),第一个是异步执行成功后回调,另一个是失败时的回调。Promise.then方法是执行异步函数成功,即resolve执行时,才会执行then方法中的回调,以下是Promise最简单的一个用法 new Promise(function (resolve, reject) { setTimeout

GET和POST两种基本请求方法的区别

南笙酒味 提交于 2020-11-20 08:14:23
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。 当你在面试中被问到这个问题,你的内心充满了自信和喜悦。 你轻轻松松的给出了一个“标准答案”: GET在浏览器回退时是无害的,而POST会再次提交请求。 GET产生的URL地址可以被Bookmark,而POST不可以。 GET请求会被浏览器主动cache,而POST不会,除非手动设置。 GET请求只能进行url编码,而POST支持多种编码方式。 GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 GET请求在URL中传送的参数是有长度限制的,而POST么有。 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。 GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。 GET参数通过URL传递,POST放在Request body中。 (本标准答案参考自w3schools) “很遗憾,这不是我们要的回答!” 请告诉我真相。。。 如果我告诉你GET和POST本质上没有区别你信吗? 让我们扒下GET和POST的外衣

神坑,junit 惊现重大 bug!!!

青春壹個敷衍的年華 提交于 2020-11-20 07:25:06
老铁们好,这里是java研究所。 做java的,junit应该非常熟悉吧,天天和这哥们打交道,没想到这哥们却隐藏了一个神坑,我们一起来看下。 运行下面的main方法,会输出什么? public class JunitTest { public static void main(String[] args) { System.out.println("main thread"); new Thread() { @Override public void run() { System.out.println("子线程 start"); try { //休眠1秒 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("子线程 end"); } }.start(); } } 很明显会输出 main thread 子线程 start 子线程 end ok,结果确实没问题。 咱们来调整一下代码,如下,将main方法中的代码用junit来运行,然后运行test1方法,大家觉得会输出什么???结果会和main方法的输出一样么?? import org.junit.Test; public class JunitTest { @Test public void

编码之路,与君共勉。

时间秒杀一切 提交于 2020-11-20 04:42:55
不知道各位是如何踏上程序员之路的。 我选择程序员这个职业是因为一部韩剧《幽灵》。 没记错的话那是一个闷热的下午,我姐双手做紧握状,满脸激动地向我推荐了这部剧。 这部写黑客的韩剧揭开了网络世界不为人知的一面,展现了隐写、逆向工程、通信拦截等各种当时在我看来非常酷炫的技术,坚定了我学计算机的决心。 那时候的我就是这么的天真无知,以为选了软件工程这个专业就能当黑客了。 就这样我踏上了北上的路程, 从一个贫困县来到了杭州。 来到了我的母校 浙江大学城市学院 。 之所以选择这个学校的原因就是寝室好,都是浙大老师。还听说里面都是富二代,豪车遍地那种,所以寻思着能不能碰到土豪室友带带我。 没错我就是这么的务实。 大学时候开销有点大,很穷,于是我就盯上了奖学金,而奖学金的吸引让我有学习的动力,所以大学成绩还挺好的,拿过年级第一,基本前三。 你可能以为我是好学生,然而并不是,我天天 10 黑,参加了学生会两周就辞了,因为每周得开两次晚间会议,影响我开黑的时间。 上课的时候基本上就是天天酷跑,课堂上经常有同学忘记关声音, Timi 的声音此起彼伏。 至于为什么能拿奖学金主要是投入产出比太高了。经过了第一个学年的观察,我发现基本上只要努力一个多星期期末考就稳了,把课本从头到尾自学一遍,课后练习都做一遍,历年考卷再做一遍。 基本上一场考试没有任何阻碍,几千块奖学金就到手了。

【面试】40道题搞定 JavaScript 的 this

纵饮孤独 提交于 2020-11-20 04:31:55
这篇文章是我整理和自编的一些 this 面试题,其实在写之前,我也没想到关于 this 面试题能有这么的考点,但是如果你的思想开放一点,大胆一点,结合例如 let 、闭包、 forEach、map等ES6方法 来出题的话,会发现一些好玩有趣的题。 咳咳,开玩笑的哈,这篇文章对你理解 this 还是挺有帮助的,所以,请放心"食用"吧。😁 让我们来看看,通过阅读本篇文章你可以学习到: this 的默认绑定 隐式绑定 隐式绑定的隐式丢失问题 显式绑定 显式绑定的其它用法 new 绑定 箭头函数绑定 综合题 几道手写题 前期准备 在正式阅读之前,你需要知道 this 的5种绑定方式: 默认绑定(非严格模式下this指向全局对象, 严格模式下 this 会绑定到 undefined ) 隐式绑定(当函数引用有 上下文对象 时, 如 obj.foo() 的调用方式, foo 内的 this 指向 obj ) 显示绑定(通过 call() 或者 apply() 方法直接指定 this 的绑定对象, 如 foo.call(obj) ) new绑定 箭头函数绑定( this 的指向由外层作用域决定的) 1. 默认绑定 先介绍一种最简单的绑定方式吧: 默认绑定 。 也就是我们常说的:在非严格模式下 this 指向的是全局对象 window ,而在严格模式下会绑定到 undefined 。 1.1

Java中不可或缺的59个小技巧,贼好用!

我只是一个虾纸丫 提交于 2020-11-20 03:57:04
来源:https://blog.dogchao.cn/?p=70 《Effective JavaJava 》 名著,必读。如果能严格遵从本文的原则,以编写API的质量来苛求自己的代码,会大大提升编码素质。 以下内容只记录了我自己整理的东西,还是建议读原文。为了聚焦知识点,一些说明故意忽略掉了。相当于是一篇摘要。 1、考虑用静态工厂方法替代构造函数 例子: Integer.valueOf(“ 1 ”)、Boolean.valueOf(“ true ”)等。 优势: 可读性高(方法名) 性能(不一定创建对象) 灵活性高 下面针对三个优势进行一些解读。 可读性高 new Point(x,y)和Point.at(x,y)、Point.origin()。构造函数只能看出两个参数,不知其意,后者更易理解。 性能 在某些情况下,可以事先进行实例化一些对象,调用时直接调用即可,不需要进行改变。比如,Boolean。 public final class Boolean implements Serializable , Comparable < Boolean > { // 预先设置两个对象 public static final Boolean TRUE = new Boolean( true ); public static final Boolean FALSE = new Boolean(

Java面试题2-附答案

只谈情不闲聊 提交于 2020-11-20 03:56:27
JVM的内存结构 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、Java虚拟机栈: 线程私有;每个方法在执行的时候会创建一个栈帧,存储了局部变量表,操作数栈,动态连接,方法返回地址等;每个方法从调用到执行完毕,对应一个栈帧在虚拟机栈中的入栈和出栈。 2、堆: 线程共享;被所有线程共享的一块内存区域,在虚拟机启动时创建,用于存放对象实例。 3、方法区: 线程共享;被所有线程共享的一块内存区域;用于存储已被虚拟机加载的类信息,常量,静态变量等。 4、程序计数器: 线程私有;是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的程序计数器,这类内存也称为“线程私有”的内存。 5、本地方法栈: 线程私有;主要为虚拟机使用到的Native方法服务。 强引用,软引用和弱引用的区别 强引用: 只有这个引用被释放之后,对象才会被释放掉,只要引用存在,垃圾回收器永远不会回收,这是最常见的New出来的对象。 软引用: 内存溢出之前通过代码回收的引用。软引用主要用户实现类似缓存的功能,在内存足够的情况下直接通过软引用取值,无需从繁忙的真实来源查询数据,提升速度;当内存不足时,自动删除这部分缓存数据,从真正的来源查询这些数据。 弱引用: 第二次垃圾回收时回收的引用,短时间内通过弱引用取对应的数据,可以取到,当执行过第二次垃圾回收时,将返回null

2020互联网寒冬之下,作为一个Android老码农,是如何进入腾讯的?

混江龙づ霸主 提交于 2020-11-19 23:56:06
由于众所周知的原因,原生Android开发如今已经日渐凋敝,作为一个Android程序员,不仅要会Java,Kotlin,JavaScript,Css,Html,还要会Flutter,C++,FFmpeg,Linux等相关知识。 笔者从7月份开始面试,到8月中旬截止(因为腾讯已经面试通过,自己面试面的也累了,就决定去腾讯了) 接下来就说说各家的面试题,一共面试了快二十家公司,既有外包,也有中小型企业,也有准备D轮甚至上市的C轮企业,更有BAT等知名企业。 接下来就一一说一下各家公司的面试题。 也建议各位面试的时候不要上来就直奔BAT等,大厂面试官的技术广度与深度也不是刚出来面试的你,能搞定的。最好先去一些小公司看看他们问的哪些东西,自己回去在查漏补缺一下,刷书大厂的面试题,最后去大厂。 最后祝各位能进入自己心仪的公司。 按照面试的时间顺序来一一罗列各家公司的面试题。(记忆可能出现纰漏,哈哈,各位看看就好,有些公司的面试可能比较常规,就没有什么特别的印象) 武汉佰钧成(外包OPPO,自家面试官) 因为是周六的专场面试,也不用请假,所以马上就参加了这家公司的面试。 两轮面试 Activity的启动流程 Activity的启动模式,应用场景 如何减少对第三方框架的耦合 hashmap的基本原理 博彦科技(外包OPPO,OPPO面试官) 两轮面试 Handler机制 Binder机制

面了美团我才知道大公司的面试有多恐怖,附上我的美团5面经历,终拿offer!

微笑、不失礼 提交于 2020-11-19 13:26:49
前言 面了美团,越发让我觉得想进大厂还需要很长时间的积累,问的知识点并没有那么多那么宽,但是会比我看到的更深入一点更贴近使用场景一点,自己差的还很远,可能真的要以春招为目标了 1.自我介绍 2.简单说一下项目,项目的问题,难点 3.Mybatis的$和#的区别 4.Mysql的存储引擎有哪些 5.Myisam和Inodb的区别 6.Innodb一定要有主键嘛,原因是什么 7.主键为什么建议使用自增主键,比如是字符串可以做主键嘛 8.Innodb的锁有哪些 9.解释一下间隙锁 10.间隙锁是共享锁还是排它锁 11.共享锁和排它锁对比 12.什么情况触发表锁和行锁和间隙锁(间隙锁没答对被追问了) 13.最左匹配原则,abc,顺序也是abc,什么情况索引肯定会失效,什么情况下整个索引都失效 14.spring mvc的执行流程 15.lock的底层实现原理(忘记了,很尴尬,很急但就是想不起来了) 16.jdk的线程池有哪些,怎么选择使用哪个线程池(只记得概念,怎么选择完全说不出来) 17.核心线程数和最大线程数的数量该设计为多大 18.设计模式了解哪些,工厂模式什么情况会用到 19.哪个框架在什么地方会用到这些模式 20.有用过redis,esmq嘛(后面告诉我我的知识范围宽度广度都需要提高,这些技术还需要去学习 😭😭) 21.jvm什么情况下触发young gc和full gc

初出校园,从Java小白到阿里P8架构师需要学习哪些技术?

*爱你&永不变心* 提交于 2020-11-19 12:39:31
过度忙碌使你落后 对于 IT 人而言忙碌已成为了习惯,加班常挂在嘴边。“996”工作制似乎也变成了公司高效的标志。而事实上过度的忙碌使你落后。经常遇见一些朋友,在一个公司没日没夜的干了几年,没有留一点学习时间给自己。几年之后倒是对公司越来越“忠诚”了,但忙碌的工作同时也导致了没有时间更新知识,使得自己已经落后了,连跳槽的能力和勇气都失去了。 过度忙碌会导致没有时间学习和更新自己的知识,尤其在这个高速发展的时代。我在工作经历中发现过度繁忙通常会带来以下问题: 缺乏学习导致工作能力没有提升,而面对的问题却变得日益复杂。 技术和业务上没有更大的领先优势,只能被动紧紧追赶。试想一下,要是你都领先同行业五年了,还会在乎通过加班来早一个月发布吗? 反过来上面这些问题会导致你更加繁忙,进而更没有时间提高自己的技术技能,很快就形成了一个恶性循环。 练过健身的朋友都知道,光靠锻炼是不行的,营养补充和锻炼同样重要。个人技术成长其实也一样,实践和学习是一样重要的,当你在一个领域工作了一段时间以后,工作对你而言就主要是实践了,随着你对该领域的熟悉,能学习的到技术会越来越少。所以每个技术人员都要保证充足的学习时间,否则很容易成为井底之蛙,从而陷入前面提到的恶性循环。 所以在此给大家推荐一些学习资料,可以收藏备用,利用空余时间进行学习。 Spring源码深度解析31精讲,阿里P8架构师讲解的太牛了!