关于面试技巧:笑傲Java面试面霸修炼手册网盘分享

download:笑傲Java面试:面霸修炼手册Golang泛型进步了编码效率序Golang的泛型曾经进去一段时间了,大家应该对它有所理解,甚至在利用中应用过。尽管Golang的泛型性能简略,而且可能会减少代码的复杂度,然而适度应用也可能会升高代码的可读性。但不可否认的是,泛型的确使咱们在应用Golang时可能提取一些罕用代码,防止代码的反复拷贝,进步代码性能(防止类型转换),进步编码效率和体验,进步代码可维护性。本文次要介绍我用Golang泛型做了什么。工具性能尽管规范库中曾经提供了大量的工具函数,然而这些工具函数并不是由泛型实现的。为了改善体验,咱们能够通过泛型来实现它们。比方经典的数学。Max()和数学。数值算法中的Min()是float64类型,然而很多时候咱们应用这些类型的int和int64。在Golang引入泛型之前,咱们常常依照如下类型来实现它们,从而产生了大量的模板代码:func MaxInt(a,b int) int {如果a > b {返回a}返回b} func MaxInt64(a,b int64) int64 {如果a > b {返回a}返回b} //...其余类型复制代码应用泛型时,咱们只须要一个实现:func MaxT束缚。有序 T {如果a > b {返回a}返回b}复制代码束缚在哪里。Ordered示意可排序的类型,即[>,=,代码地址其余如json解析、参数查看、切片等。也能够通过泛型实现。数据结构Golang本人的通用容器是切片和地图。这两种数据结构实际上能够实现大部分工作,但有时咱们可能须要其余数据结构,比方优先级队列和链表。尽管Golang在容器包下有堆、列表、环三种数据结构,然而用起来说实话不是很不便,尤其是元素类型都是接口{}。应用这些构造须要各种类型转换。所以咱们能够简略地复制这些代码,而后用泛型对它们进行转换,比方heap:咱们不仅应用泛型来实现,还默认将heap改为slice来实现,所以咱们只须要实现一个LessFunc而不是五个。包堆 类型LessFunc[T any] func(e1 T,e2 T) bool 类型堆[T any]构造{h []TlessFunc} func NewT any *Heap[T] {堆:= &Heap[T]{h: h,lessFunc: lessFunc,}heap.init()返回堆} //移除堆顶部元素func (h *Heap[T]) Pop() T {n := h.Len() - 1h.swap(0,n)h.down(0,n)return h.pop()} //获取堆顶部元素func (h *Heap[T]) Peek() T {返回h.h[0]} //向堆中增加元素func (h *Heap[T]) Push(x T) {h.push(x)h.up(h.Len() - 1)}复制代码代码地址其余数据结构包含list、set、pqueue等。模板代码在后盾业务代码中,咱们常常会有很多业务处理函数,每个业务处理函数基本上都是由一些代码封装成一个HTTP接口。其实都是模板代码。例如,对于gin实现的HTTP服务,咱们须要如下解决每个接口: 指定HTTP办法、URL证实参数绑定解决申请反馈 能够发现参数绑定和解决响应简直都是同一个模板代码,认证根本都是模板代码(当然有些认证可能比较复杂)。因而,咱们能够编写一个通用模板,并提取雷同的局部。用户只须要用不同的接口实现指定的HTTP办法、URL和申请解决逻辑://解决申请func doReq any,Rsp any,Opt any,serviceFunc ServiceFunc[Req,Rsp],serviceopttfunc serviceopttfunc[Req,Rsp,Opt],opts...Opt)杜松子酒。HandlerFunc {返回函数(c *gin。上下文){//参数绑定req,err := BindJSONReq如果err!=零{返回}//进一步解决申请构造if reqFunc!=零{申请函数}var rsp *Rsp//业务逻辑函数调用if serviceFunc!=零{rsp,err = serviceFunc(c,req)} else if serviceOptFunc!=零{rsp,err = serviceoptpfunc(c,req,opts...)}否则{panic("必须设置ServiceFunc或ServiceFuncOpt ")}//解决响应处理器sp(c,Rsp,err)}}复制代码这样,当初一个接口基本上只须要一行代码就能够实现(不包含具体的业务逻辑性能)://简略申请,不须要身份验证e.GET("/user/info/get ",ginrest。Do(nil,GetUserInfo))//身份验证、绑定UID、解决reqFunc := func(c gin。上下文,req UpdateUserInfoReq) {申请。UID = GetUID(c)}//这里再多一步就是阐明第一个参数是ReqFunc。e.POST("/user/info/update ",Verify,ginrest。Do(reqFunc,UpdateUserInfo))复制代码地址,并实现了一个基于gin的RESTful格调模板。对象池/缓存Golang规范库附带了一个线程平安的高性能对象池同步。池,能够依据物体的热度主动开释物体。然而,作为对象池,咱们通常只放一种类型的对象进去,然而元素是同步的。池是接口{}类型,所以咱们能够简略地封装sync。池并使其元素具备特定的类型:事实上,这里有一个简略的对象同步。Pool进行打包,而后增加一个ClearFunc()在回收对象时做一些清理操作。例如,咱们须要使字节片的应用长度为零(容量放弃不变)。//创立一个新对象键入NewFunc[T any] func() T ...

October 20, 2022 · 1 min · jiezi

关于面试技巧:快速搞定前端技术一面-匹配大厂面试要求升级版

download:疾速搞定前端技术一面 匹配大厂面试要求(升级版)Spring5源码5-Bean生命周期后置处理器 次要阐明三种生命周期增强器: BeanFactoryPostProcessor:BeanFactory 后置处理器 BeanDefinitionRegistryPostProcessor:bean定义注册后置处理器BeanFactoryPostProcessorBeanPostProcessor:Bean后置处理器 BeanPostProcessorMergedBeanDefinitionPostProcessorSmartInstantiationAwareBeanPostProcessorInstantiationAwareBeanPostProcessorInitializingBean DisposableBean (销毁的计划咱们临时不做阐明) 1.1 什么是 BeanPostProcessorBeanPostProcessor 是 Spring提供给咱们的一个十分重要的扩大接口,并且Spring外部的很多性能也是通过 BeanPostProcessor 来实现的(目前看到最典型的就是 AnnotationAwareAspectJAutoProxyCreator 的 注入)。 1.2 BeanPostProcessor 的品种BeanPostProcessor 在Spring 中的子类十分多(idea 显是有46个),比方 InstantiationAwareBeanPostProcessorAdapter : 在Spring 的bean加载过程中起了十分重要的作用AnnotationAwareAspectJAutoProxyCreator : bean 创立过程中的 属性注入时起作用AspectJAwareAdvisorAutoProxyCreator : Aspect 的 AOP 性能实现也全凭仗BeanPostProcessor 的个性。1.3 创立机会BeanFactoryPostProcessor:在 Spring 启动时对BeanDefinition 的创立 进行干涉解决。 BeanPostProcessor:一是Bean对应的BeanDefinition 的创立。二是Bean 实例的创立。因为在 Spring容器中,Bean的创立并非仅仅通过反射创立就完结了,在创立过程中,须要思考到Bean针对Spring容器中的一些属性,所以BeanDefinition 中不仅仅蕴含了 Bean Class 文件信息,还蕴含了 以后Bean在Spring容器中的一些属性,比方在容器中的作用域、是否懒加载、别名等信息。当Bean 进行实例化创立时须要依赖于对应的BeanDefinition 提供对应的信息。。 而因为 BeanPostProcessor 是参加了 Bean 创立过程。所以其创立肯定在一般 Bean 之前。实际上 BeanPostProcessor 的创立时在 Spring 启动时容器刷新的时候。 BeanPostProcessor 的 BeanDefinition 创立机会和一般 Bean没有区别,都是在Spring 启动时的BeanFactoryPostProcessor 中实现(确切的说是 ConfigurationClassPostProcessor 中实现)。 ...

September 3, 2022 · 15 min · jiezi

关于面试技巧:迈向高级的Java面试突围课内附资料文档

download:迈向高级的Java面试解围课内附材料文档SpringBoot-全局异样处理背景在 Web 开发中, 咱们常常会需要处理各种异样, 这是一件辣手的事件, 需要考虑以下几个问题 : 什么时候需要捕捉 ( try-catch ) 异样, 什么时候需要抛出 ( throws ) 异样到下层 ?在 dao 层捕捉还是在 service 捕捉, 还是在 controller 层捕捉 ?抛出异样后要怎么处理. 怎么返回给页面错误信息 ? 全局异样处理推荐做法 不要在业务代码中进行捕捉异样, 即 dao, service, controller 层的所有异样都全副抛出到下层. 这样不会导致业务代码中的一堆 try-catch 导致业务代码错乱.哪一层都不捕捉.返回对立的后果集 ( 错误码 + 谬误描述 ). 通常会将事务配置在 Service 层, 当数据库操作失败时, 让 Service 层抛出运行时异样, 而不进行 try-catch 处理,  Spring 事物管理器就会进行回滚. 为了事务回滚但 Service 层抛出后. 在 Controller 层就需要 try-catch 去捕捉异样, 否则会返回原生错误信息到客户端. 然而, 如果在 Controller 层的每个方法体外面都写一些模板化的 try-catch 的代码, 代码岂但不美观, 也减少了保护的难度, 特地是还需要对 Service 层的不同异样进行不同处理的时候.@ControllerAdvice 注解是 Spring 3.2 中新增的. 用于拦挡全局的 Controller 的异样. 注意:该注解只能拦挡 Controller 不能拦挡 Interceptor 的异样.全局异样处理的步骤 ...

August 28, 2022 · 1 min · jiezi

关于面试技巧:前端模拟面试给你真实的求职体验和面试经验

download:前端模仿面试:给你实在的求职体验和面试教训手把手教你用 Jenkins 主动部署 SpringBootCI/CD 是一种通过在利用开发阶段引入自动化来频繁向客户托付利用的方法。CI/CD 的核心概念可能总结为三点: 继续集成继续托付继续部署 CI/CD 次要针对在集成新代码时所引发的问题(俗称"集成地狱")。为什么会有集成地狱这个“雅称”呢?大家想想咱们一个我的项目部署的过程,拉取代码->构建->测试->打包->部署,如果咱们常常需要部署我的项目,特地是在微服务期间,服务特地多的情况下,不停的测试打包部署,那估计得有集体一整天顺便做这事了,而这事又是繁琐的重复无意义的。具体而言,CI/CD 可让继续自动化和继续监控贯穿于利用的整个生命周期(从集成和测试阶段,到托付和部署),这些关联的事务通常被统称为"CI/CD 管道",由开发和运维团队以敏捷形式协同反对。1.1 CI(Continuous Integration)CI/CD 中的"CI"始终指继续集成,它属于开发人员的自动化流程。胜利的 CI 意味着利用代码的新更改会定期构建、测试并合并到代码仓库中,该解决打算可能解决在一次开发中有太多利用分支,从而导致相互冲突的问题。1.2 CD(Continuous Delivery/Continuous Deployment)CI/CD 中的"CD"指的是继续托付和/或继续部署,这些相干概念有时会交叉使用。两者都事关管道后续阶段的自动化,但它们有时也会独自使用,用于说明自动化程度。继续托付(Continuous Delivery)通常是指开发人员对利用的更改会主动进行谬误测试并上传到代码仓库(如 GitHub、GitLab 等),而后由运维团队将其部署到实时生产环境中。这旨在解决开发和运维团队之间可见性及沟通较差的问题。因此,继续托付的目标就是确保尽可能减少部署新代码时所需的工作量。继续部署(Continuous Deployment)指的是主动将开发人员的更改从代码仓库公布到生产环境,以供客户使用。通过一套全自动化的流程,来解决手动测试、编译、打包等操作。继续部署以继续托付的劣势为根基,实现了管道后续阶段的自动化。 什么是 Jenkins后面说的 CI/CD 算是一种思维,思维要落地,就需要对应的工具。Jenkins 是一款开源的 CI/CD 软件,可能算是 CI/CD 软件指导者,它提供了超过 1000 个插件来反对构建、部署、自动化,基本上能够满足任何我的项目的需要。整体来说,Jenkins 有如下六大个性:继续集成和继续托付 作为一个可扩大的自动化服务器,Jenkins 可能用作简略的 CI 服务器,或者变成任何我的项目的继续托付核心。 繁难安装 Jenkins 是一个基于 Java 的独立程序,可能立即运行,蕴含 Windows、Mac OS X 和其余类 Unix 操作系统。 配置简略 Jenkins 可能通过其网页界面轻松设置和配置,其中包含即时谬误检查和内置帮助。 插件 通过更新核心中的 1000 多个插件,Jenkins 集成了继续集成和继续托付工具链中几乎所有的工具。 扩大 Jenkins 可能通过其插件架构进行扩大,从而为 Jenkins 可能做的事提供几乎有限的可能性。 分布式 Jenkins 可能轻松地在多台机器上调配工作,帮助更疾速地跨多个平台推动构建、测试和部署。其实 Jenkins 有很多好玩的用法,明天我还是想先通过一个简略的案例,先来和大家捋一捋如何使用 Jenkins 来实现一个 Spring Boot 我的项目的主动公布部署,这样大家对 Jenkins 现有一个直观的认知,各种其余使用细节松哥在当前的文章中再来和大家细聊。 ...

August 4, 2022 · 1 min · jiezi

关于面试技巧:职场人必修课高效沟通与自信表达

download:职场人必修课:高效沟通与自信表白Java高性能序列化工具Kryo序列化概述Kryo 是一个疾速序列化/反序列化工具,依赖于字节码生成机制(底层使用了 ASM 库),因此在序列化速度上有肯定的劣势,但正因如此,其使用也只能限度在基于 JVM 的语言上。和 Hessian 类似,Kryo 序列化出的后果,是其自定义的、独有的一种格局。因为其序列化出的后果是二进制的,也即 byte[],因此像 Redis 这样可能存储二进制数据的存储引擎是可能间接将 Kryo 序列化进去的数据存进去。当然你也可能抉择转换成 String 的形式存储在其余存储引擎中(性能有损耗)。基础用法介绍了这么多,接下来咱们就来看看 Kryo 的基础用法吧。其实对于序列化框架来说,API 基本都差不多,毕竟入参和出参通常都是必定的(需要序列化的对象/序列化的后果)。在使用 Kryo 之前,咱们需要引入相应的依赖。 com.esotericsoftware kryo 5.2.0复制代码基本使用如下所示import com.esotericsoftware.kryo.Kryo;import com.esotericsoftware.kryo.io.Input;import com.esotericsoftware.kryo.io.Output;import java.io.*; public class HelloKryo { static public void main(String[] args) throws Exception { Kryo kryo = new Kryo(); kryo.register(SomeClass.class); SomeClass object = new SomeClass(); object.value = "Hello Kryo!"; Output output = new Output(new FileOutputStream("file.bin")); kryo.writeObject(output, object); output.close(); Input input = new Input(new FileInputStream("file.bin")); SomeClass object2 = kryo.readObject(input, SomeClass.class); input.close(); System.out.println(object2.value);} ...

June 9, 2022 · 3 min · jiezi

关于面试技巧:2周刷完100道前端优质面试真题源码齐全

2周刷完100道前端优质面试真题超清原画 残缺无密 资料齐全 获取ZY:百度网盘Java 16 新个性:instanceof增强 instanceof这个关键词,次要用来判断某个对象是不是某个类的实例。 比如,有时候咱们要处理一个类似这样的数据集: Map<String, Object> data = new HashMap<>();data.put("key1", "aaa");data.put("key2", 111);复制代码这个Map中的Value值因为可能是不同的对象,所以定义的是Object。这个时候,当咱们get进去的时候,就需要去判断和转换之后再去处理。 比如,咱们取出key1的value,而后截取一段字符串的操作,就需要这样写: Object value =data.get("key1");if (value instanceof String) { String s = (String) value; System.out.println(s.substring(1));}复制代码先判断获取的value是否是String,再做强制类型转换,而后再对字符串进行操作。这是传统的写法,而在Java 16的增强之后,对于instanceof的判断以及类型转换可能合二为一了,所以改进后的写法可能如下: Object value =data.get("key1");if (value instanceof String s) { System.out.println(s.substring(1));}复制代码是不是简略不少呢?如果没用过的话,连忙操作试试看吧! Tips:该功能经历了2个Preview版本(JDK 14中的JEP 305、JDK 15中的JEP 375),最终定稿于JDK 16中的JEP 394。

May 11, 2022 · 1 min · jiezi

关于面试技巧:面试官Handler的runWithScissors了解吗为什么Google不让开发者用

作者:承香墨影起源:承香墨影 runWithScissors() 是 Handler 的一个办法,被标记为 @hide,不容许一般开发者调用。 这个办法算是比拟冷门,面试中被问及时,若面试者不分明,通常面试官会换个问法:"如何在子线程,通过 Handler 向主线程发送一个工作,并等主线程解决此工作后,再继续执行?"。 这个场景,就能够借助 runWithScissors() 来实现。 尽管该办法被标记为 @hide,然而在 Framework 中,也有不少场景应用到它。不过它也有一些隐患,正是因为这些隐患,让 Android 工程师将其标为 @hide,不容许一般开发者应用。 明天咱们就来聊聊,Handler 的这个冷门办法 runWithScissors(),以及它可能呈现的一些问题,正好也温故一下多线程通信相干的常识。 二、Handler.runWithScissors()2.1 runWithScissors()先撇开 runWithScissors() 办法,既然这里存在 2 个线程的通信,那必定须要思考多线程同步。 说到同步,首先想到的就是 Synchronized 锁和它的期待/告诉机制,而通过 Handler 跨线程通信时,想要发送一个「工作」,Runnable 必定比 Message 更适宜。 接下来,咱们看看 runWithScissors() 的实现是不是如咱们料想一样。 public final boolean runWithScissors(final Runnable r, long timeout) { if (r == null) { throw new IllegalArgumentException("runnable must not be null"); } if (timeout < 0) { throw new IllegalArgumentException("timeout must be non-negative"); } if (Looper.myLooper() == mLooper) { r.run(); return true; } BlockingRunnable br = new BlockingRunnable(r); return br.postAndWait(this, timeout);}能够看到,runWithScissors() 承受一个 Runnable,并且能够设置超时工夫。 ...

March 30, 2022 · 2 min · jiezi

关于面试技巧:Java线程池面试要点

作者:August Rush起源: 淘系技术 Java线程池在面试的时候问的挺多的,已经我就在面试过程中两次被问到,面试官通过面试者对线程池的了解答复也能大抵理解到面试者的理论开发教训如何,以及对多线程的了解使用有没有深刻到位。同时,面试官在切入多线程问题的时候通常也不会太过僵硬,而是一步一步通过线程创立形式、线程状态切换、线程协同疏导过去,整体谈下来其实也挺花工夫的,会涉及到多线程的方方面面,但对开发者素质的确也是一番不小的考验,明天咱们也不齐全铺开去形容,就仅仅针对线程池这一点来聊聊面试的时候会碰到的一些问题。 ThreadPoolExecutor参数含意ThreadPoolExecutor 结构函数参数定义咱们能够间接在 concurrent 包当中找到。 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { }这几个外围参数的含意别离是: corePoolSize:线程池外围线程数量,外围线程不会被回收,即便没有工作执行,也会放弃闲暇状态,设置 allowCoreThreadTimeOut 参数为 true 才会进行回收。如果线程池中的线程少于此数目,则在执行工作时创立。maximumPoolSize:线程池最大线程数,示意在线程池中最多能创立多少个线程。当线程数量达到corePoolSize,且workQueue队列塞满工作了之后,持续创立线程,当线程池中的线程数量达到这个数字时,新来的工作会执行回绝策略。keepAliveTime:示意线程没有工作执行时最多能放弃多少工夫会被回收,留神,这个参数管制的是超过corePoolSize之后的“长期线程”的存活工夫。unit:参数 keepAliveTime 的工夫单位。workQueue:工作队列,寄存提交的期待工作,其中有队列大小的限度。threadFactory:创立线程的工厂类,通常咱们会自定义一个threadFactory设置线程的名称,这样咱们就能够晓得线程是由哪个工厂类创立的,能够疾速定位排查问题。handler:如果线程池已满,新的工作进来时的回绝策略。ThreadPoolExecutor 参数含意是最常见的一个问题,如果面试者对这些参数比拟理解,至多阐明面试者在多线程使用层面不会存在太大的问题,反之,如果面试官提醒某个参数后面试者还是一脸懵的话,那么根底印象分就会大打折扣。 线程池线程创立的流程是怎么的线程池线程创立的机会能够用上面这张图简略示意。 线程创立流程是这样的: 如果以后运行的线程少于corePoolSize(外围线程数),则创立新线程来执行工作(执行这一步骤须要获取全局锁)。如果运行的线程等于或多于corePoolSize,则将工作退出BlockingQueue(阻塞队列/工作队列)。如果无奈将工作退出BlockingQueue(队列已满),则在非corePool中创立新的线程来解决工作(执行这一步骤也须要获取全局锁)。如果创立新线程将使得以后运行的线程超出maximumPoolSize限度,工作将被回绝,并执行线程饱和策略,如:RejectedExecutionHandler.rejectedExecution()办法。留神:初始化线程池时,线程数为0。 工作列队有哪几种实现寄存工作的工作队列有6种次要的实现,别离是 ArrayBlockingQueue、LinkedBlockingQueue、LinkedBlockingDeque、PriorityBlockingQueue、DelayQueue、SynchronousQueue。它们的区别如下: ArrayBlockingQueue:一个由数组构造组成的有界阻塞队列(数组构造可配合指针实现一个环形队列)。LinkedBlockingQueue:一个由链表构造组成的有界阻塞队列,在未指明容量时,容量默认为 Integer.MAX_VALUE。LinkedBlockingDeque:应用双向队列实现的双端阻塞队列,双端意味着能够像一般队列一样 FIFO(先进先出),能够以像栈一样 FILO(先进后出)PriorityBlockingQueue:一个反对优先级排序的无界阻塞队列,对元素没有要求,能够实现 Comparable 接口也能够提供 Comparator 来对队列中的元素进行比拟,跟工夫没有任何关系,仅仅是依照优先级取工作。DelayQueue:同 PriorityBlockingQueue,也是二叉堆实现的优先级阻塞队列。要求元素都实现 Delayed 接口,通过执行时延从队列中提取工作,工夫没到工作取不进去。SynchronousQueue:一个不存储元素的阻塞队列,消费者线程调用 take() 办法的时候就会产生阻塞,直到有一个生产者线程生产了一个元素,消费者线程就能够拿到这个元素并返回;生产者线程调用put()办法的时候就会产生阻塞,直到有一个消费者线程生产了一个元素,生产者才会返回。回绝策略有哪几种线程池中的线程曾经用完了,无奈持续为新工作服务,同时,期待队列也曾经排满了,再也塞不下新工作了。这时候咱们就须要回绝策略机制正当地解决新进来的工作。JDK 内置的四种回绝策略如下: AbortPolicy(默认):抛弃工作并抛出 RejectedExecutionException 异样。CallerRunsPolicy:由调用线程解决该工作。(例如io操作,线程生产速度没有NIO快,可能导致阻塞队列始终减少,此时能够应用这个模式)。DiscardPolicy:抛弃工作,然而不抛出异样。(能够配合这种模式进行自定义的解决形式)。DiscardOldestPolicy:抛弃队列最早的未解决工作,而后从新尝试执行工作。线程池的分类Java 外面线程池的顶级接口是 Executor,然而严格意义上讲 Executor 并不是一个线程池,而只是一个执行线程的工具,真正的线程池接口是 ExecutorService。Java中 Executors 工厂类能够为咱们主动创立不同策略配置的线程池,供咱们间接应用。 ▐ newCachedThreadPoolcoreSize 线程数0,最大线程数无限度,线程的容许闲暇工夫是60s,阻塞队列是 SynchronousQueue。实用于“短工作”状况。因为采纳SynchronousQueue,每当提交一个工作,都会超过阻塞队列的长度,导致创立新线程解决,所以说:每当提交一个工作,都会创立一个线程,可能造成OOM。此外,线程闲暇1分钟就会销毁,所以该线程池可能会频繁地创立和销毁线程。 ▐ newFixedThreadPoolcoreSize 和最大线程数都是用户输出的,阻塞队列用的 LinkedBlockingQueue,线程的容许闲暇工夫是0s。其外围个性就是线程数不会减少,不会缩小,线程池也不会本人销毁。因为阻塞队列是无限大的,不会执行回绝策略。所以可能会沉积有限的申请,导致OOM。 ...

March 28, 2022 · 1 min · jiezi

关于面试技巧:2周刷完100道前端优质面试真题

download:2周刷完100道前端优质面试真题在 Web 應用程序開發方面,Vue.js 正快速成爲開發人員的最愛。這個現代、新穎的 JavaScript 庫它在 GitHub 上有超过 123,000 颗星,關於開發人員來說是一個引人瞩目的選择,由於它很容易集成到現有項目中。它的速度很快,它非常強大。妳能夠用它從頭開端樹立一個動態的、可擴展的、可維護的單頁面應用程序。 作爲一個 JavaScript 框架,Vue.js 允許您輕鬆地將動態數據渲染到 DOM,將數據绑定到 DOM 元素,以及治理/維護應用程序的狀態(本地存儲),而無需用戶从新加载阅讀器。它是首選,由於它是輕量級的,模塊化的,需要起码的配置。它的速度也非常快,文件大小也很低。開發人員能夠很容易地把它放入任何項目或現有的框架中。 隨著Vue.js逐渐成爲更多開發者的首選框架,這里有8個值得關注的UI組件,心愿能在2019年整合到妳的項目中。在每個組件的开端,我都增加了該組件GitHub倉庫账戶的链接,以讓妳能夠做出奉獻。

March 16, 2022 · 1 min · jiezi

关于面试技巧:八年Java开发刚从字节腾讯微软面试归来分享个人面经

最近一敌人离了职后,找工作前前后后面试了7天,一共10家公司,我找他分享出面试过程及教训,心愿能对各位正在面试中或者筹备面试的童鞋有所帮忙,以下面试企业为了窃密不说理论名称。以下为第一人称。 总结面试前的“练手”还是很重要的,所以开始面试之前肯定要筹备好啊,不然也是耽误面试官和本人的工夫。 我本人是刷了不少面试题的,所以在面试过程中才可能做到成竹在胸,基本上会分明面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试后期筹备过程中十分重要的一点。 上面我就把我整顿的面试材料分享给有须要的读者敌人。如果有须要这些面试材料的敌人关注转发后,在我主页私信回复【面试材料】就能够了 面试题及解析总结 如果本文对你有帮忙,别忘记给我个3连问 ,点赞,转发,评论,,咱们下期见。 珍藏 等于白嫖,点赞才是真情。 学习更多JAVA常识与技巧,关注与私信博主 收费学习支付JAVA 课件,源码,安装包等

March 8, 2022 · 1 min · jiezi

关于面试技巧:你最崇拜的人是谁从面试问题看标杆学习法

摘要:崇拜一个人,是因为他具备某种你不具备,但十分想领有的品质。 “你最崇拜的人是谁”,个别只会用在大学生身上,貌似随便的闲聊,理论是想看看你的心态、性情和三观。 有什么样的偶像就有什么样的粉丝,你崇拜认真工作了40年的刘德华,是认同“怠惰”,你崇拜谁,就会心愿本人向谁有限凑近。 没有崇拜的人,感觉你没思维没谋求;最崇拜的人是本人,显得过于自卑自负。“你有什么座右铭”,你说“宁使天下人负我,不使我负天下人”,你肯定是疯了…… 面试要时刻放弃现场感,永远记住一点:面试官不会和你聊闲篇,他问任何问题都是想晓得点什么。 两种典型的谬误答复: 一,崇拜虚构的或不出名的人 “我崇拜路飞”,面试官是个HR小姐姐,基本没看过《海贼王》,不晓得你说的是谁;“我最观赏《天龙八部》里深藏不露的扫地僧,轻易不出手,出手吓尿你”,相似答复欠考虑。 “我崇拜明哥”,明哥是谁啊……小姐姐还认为是黄晓明呢,你要说一个出名人物! 二,崇拜的是一个歌星或影星 你说喜爱某小鲜肉,为什么?因为帅。你能够这么想但不要说进去。 多少小鲜肉给人的感觉都是“一副弱不禁风的样子”,当今小鲜肉横行,其实是家庭教育的失败,没有造就孩子的独立人格,才会盲目崇拜。何况当初是一个动不动就塌房的时代,你看最近这瓜多的,大众都吃打嗝了。 你说崇拜王菲,因为她活得随性,想干什么就干什么……招聘用人,要的是稳定性而不是共性。如果你的Superstar对于职业而言是负面展示,不要讲。 答复的根本套路: 应聘程序员,“我崇拜Linux和Git的创始人Linux Torvalds,观赏他的创造力,他写的代码扭转了这个世界……” 应聘销售,“我最崇拜的人是乔吉拉德,看过他的书《世界上最平凡的推销员》,我十分认同他的销售理念,卖产品就是卖本人……” 答复的准则是: 最好与应聘的职位或公司产生关联。 简略来说,找一个行业内的标杆人物,简略陈说你钦佩的理由,表白出你对应聘职业的浓厚兴趣,展现你的价值观或抱负。 面试之前,提前做下功课,理解下应聘公司的文化和理念,对于应聘职位的要求,而后抉择一个突出性的正面人物作为答案,最简略的办法是:你崇拜的人是这家公司的创始人。企慕已久,对这次面试诚惶诚恐,冀望能和偶像共事…… 这是妥妥的稳定性展示,优良如你。 对于崇拜: 崇拜,一种是缺什么想找补什么,另一种是有什么想寻求认同什么。度要适当,前者有限放大,就是充实寂寞冷;后者滥情任意,就是童稚傻白甜。 适度的崇拜,就是一种自我迷失。 崇拜一个人不在乎两点:一是他具备某种你不具备,但很想领有的品质;二是他恰好具备某种你本人引以为傲的品质,在他身上找到了自我认同感。崇拜是一种自我映射,以及对本人将来的期许,这也是面试官问你崇拜谁这个问题的起因所在。 标杆学习法: 当你对成长迷茫时,建立楷模是最间接无效的办法,简略来说,找到你崇拜的人,建立标杆。从方法论而言,你须要找到高中低三种不同规范的楷模。java培训 第一种:低规范的楷模。 你通过致力一两年内能赶超的人。 能够是你优良的共事,能够是你的领导,能够是你倒退比拟好的敌人或同学。你可能会想,他也没比我强很多,没错,但低规范的楷模最容易帮忙你成长,因为他就在你身边。 真正能引领你路线的,不是曾经达到起点的人,而是只比你快两三步的人。 你看过名人传记,学到了多少货色? 第二种:中规范的楷模。 你致力追赶五到十年内可能超过的人。 能够是一位业内出名的前辈,留神你要超过的是当初的他,而不是将来的他,因为他那么优良他也会成长。 第三种:高标准的楷模。 终极目标,是你的精神领袖和灯塔,你特地向往成为的那个人。 正所谓心之所至,行之所及。高标准“虽不中,亦不远矣”也是好的,甚至“虽不能至,然心向往之”都是好的。 楷模的力量是无穷的。 你建立了楷模,他们就能够给你提供事实的借鉴,能够作为激励你的能源,当你懈怠时,想一想他们怎么做的,能够激励本人振作起来。 写出楷模的三个硬本事。 什么是硬本事,就是当他人跟你竞争的时候,可能令你立于不败之地的专业技能。硬本事无关天才,是齐全能够靠先天的学习和怠惰而取得的本事,总结进去每个楷模的三个硬本事,就是你要学习的中央。 思考一下,你的硬本事是什么?你要参照楷模去修炼的硬本事又是什么?你就晓得了本人要学习什么,这就是咱们建立楷模的意义所在。把崇拜化解成实实在在能够看到、能够学到的硬本事,而后把他人的学会变成本人的。

December 23, 2021 · 1 min · jiezi

关于面试技巧:面试官超级喜欢问的CAS

前言自学了一年JAVA阿巴阿巴终于约到了面试,这次面试官让她谈谈对CAS的了解。<Center>回去等告诉</Center> 如果对CAS齐全不理解的同学倡议先去看看相干的博客理解了根本的原理,再来看面试的时候如何解答面试官: 对CAS有理解吗?能够讲讲吗? 阿巴阿巴: 理解一些,CAS全称Compare And Swap,也就是比拟和替换。 阿巴阿巴: CAS的思维比较简单,次要波及到三个值:以后内存值V、预期值(旧的内存值)O、行将更新的内存值U,当且仅当预期值O与以后内存值V相等时,将内存值V批改为更新值U,并返回true,否则返回false。 面试官: 还有嘛?CAS的应用场景晓得吗? 阿巴阿巴: 额...应该差不多了,CAS如同在并发包里应用到了 面试官: 好,CAS有啥毛病吗? 阿巴阿巴: 额....好..如同有个ABA的问题,如同是用AtomicStampedReference解决 面试官: 还有其余毛病吗? 阿巴阿巴: 额...记不太清了.... 面试官: 行,那你这边先回去等告诉哈 阿巴阿巴: 好的~ <Center>当场发offer</Center> 面试官: CAS理解吗?讲讲 阿巴阿巴: CAS全称Compare and Swap,也就是比拟和替换。 阿巴阿巴: CAS的思维比较简单,次要波及到三个值:以后内存值V、预期值(旧的内存值)O、行将更新的内存值U,当且仅当预期值O与以后内存值V相等时,将内存值V批改为更新值U,返回true,否则返回false。 阿巴阿巴: CAS次要应用在一些须要上锁的场景充当乐观锁解决方案,个别在一些简略且要上锁的操作但又不想引入锁场景,这时候来应用CAS代替锁。 阿巴阿巴: CAS次要波及到三个问题:ABA问题、自旋带来的耗费、CAS只能单变量 面试官: 能够具体讲一下这三个问题吗? 阿巴阿巴: ABA问题是指有一个线程t1在进行CAS操作时,其余线程t2将变量A改成了B,而后又将其改成A,这时候t1发现A并没有扭转,因而进行了替换操作,因为在替换操作进行前变量A其实是有变动的,只不过最终又批改回A了,此A非彼A,这时候进行替换操作在一些业务场景下很可能要出问题,要解决ABA问题有2种计划。 阿巴阿巴: 计划一:在对变量进行操作的时候给变量加一个版本号,每次对变量操作都将版本号加1,常见在数据库的乐观锁中可见。 阿巴阿巴: 计划二:Java提供了相应的原子援用类AtomicStampedReference,它通过包装[E,Integer]的元组来对对象标记版本戳stamp,从而防止ABA问题。 阿巴阿巴: 自旋带来的耗费CAS自旋如果很长时间都不胜利,这会给CPU带来很大的开销 阿巴阿巴: 解决方案:1、代码层面毁坏掉for循坏,设置适合的循环次数。2、应用JVM能反对处理器提供的pause指令来晋升效率,它能够提早流水线执行指令,防止耗费过多CPU资源。 阿巴阿巴: CAS只能单变量对于一个共享变量,能够应用CAS形式来保障原子操作,然而当多个共享变量时,那就无奈应用CAS来保障原子性。JDK1.5开始,提供了AtomicReference类来保障援用对象之前的原子性,就能够把多个变量放在一个对象里来进行CAS操作。 阿巴阿巴: 在JDK1.5中新增的java.util.concurrent(JUC),就是建设在CAS之上的,一般来说CAS这种乐观锁适宜读多写少的场景。 面试官见阿巴阿巴对答如流,决定尴尬一下她面试官: 理解JMM吗,讲一下JMM。 阿巴阿巴: 晓得一些,JMM是JAVA内存模型(JAVA Memory Model),目标是为了屏蔽各种硬件和操作系统之间的内存拜访差别,从而让JAVA程序在各种平台对内存的拜访统一。 阿巴阿巴: 不仅如此,JMM还规定了所有的变量都存储在主存中,每个线程都有本人独立的工作空间,线程对变量的操作必须先从主存中读取到本人的工作内存中而后再进行操作,最初回写回主存。 阿巴阿巴: 对于主存和工作内存的交互JAVA定义了八种操作来实现,且这些操作都是原子性的:lock、unlock、read、load、use、assign、store、write 面试官: 不错不错,那JMM是实在存在的嘛,和JVM内存模型(JAVA 虚拟机内存模型)是一样的嘛? 阿巴阿巴: 不是实在存在的,JMM讲的也只是一种模型,实在的实现可能还是和模型会有差别的。JMM和JVM是不一样的,它们并不是同一个档次的划分,基本上没啥关系。 ...

November 2, 2021 · 1 min · jiezi

关于面试技巧:精通不是为了面试而是为了个人品牌

前言最近几个月始终在招人,简直天天看简历,周周面试人。辨认人才的能力也在逐渐晋升,这期间发现很多人在技术学习和使用方面走入了误区,因而特意写这篇文章来聊聊此事。文中提到的一些观点和内容,也曾多次在晨会时跟小伙伴们提起。如果你想在技术畛域梳理集体品牌,自成一家,能够读读这篇文章。 精通意味着什么?写简历时,大家通常都会写几项「精通」的技术来撑门面,但何谓精通?精通的根本定义是:粗浅地了解,熟练地把握。对照一下,你简历上写的技术栈是否达到了这个档次? 就自己而言,面试的时候基本上是不会筹备面试题的,而面试题来源于你简历上写着什么。比方写着精通Spring Cloud的微服务,那就会基于微服务相干的常识深刻的聊一聊。据我所知,大多数面试官也都是这么做的。 这样面试的益处不言而喻,不会因为应聘者未应用过某项技术而陷入无意义的问答。他人都没用过,面试这个又有何意义?但应用过,还理解的不够透彻,那就能反映出一些问题了。 面试会问些什么?对于精通的技术栈,会问一些什么问题呢?还以Spring Cloud微服务为例,假如看到你在简历上写了一大堆的组件,比方Nacos(或Eureka)、Consul、Ribbon、Feign、Hystrix、Zuul等等。通常会问以下三类问题: 技术选型:比方,你们的我的项目当初思考应用微服务的初衷是什么?也就是说为什么要应用微服务,应用微服务带来的益处是什么?技术原理:比方,我的项目中应用到了Nacos(或其余技术栈),能说说它在我的项目中的作用以及工作原理吗?技术细节:比方,在应用Nacos的时候,是否遇到xxx问题,你们是怎么解决的?下面的三个问题,这不就是咱们在实践中应用一项技术时的步骤吗?使用一项技术时先比照选型,看是否合乎以后业务场景;而后,理解一下它的实现原理和机制,这样能力更好的进行使用;最初,真正实际时是会遇到很多问题的,是否可能感知到它们的存在,以及通过什么形式来解决…… 不要只是在用通过大量的面试和察看发现,大多数人对于技术的谋求都只停留在「会用」这个层面了。零碎中要用到某项技术,而后网上搜一篇「如何疾速集成xxx」的文章,依照文章上的步骤,copy代码到我的项目中,跑起来没报错,这就完事了…… 何谓面向搜索引擎编程?这就是典型的面向搜索引擎编程的典型。 在面试中,让应聘者说说一个技术栈的大略实现原理,很多应聘者就开始说如何进行配置了。这还都是工作5-8年的人,这个确实有些汗颜。工作机制都不理解,遇到问题如何排查啊? 精通是为了应酬面试吗?下面始终提到面试,但精通一项技术真的只是为了应酬面试吗?说实话,当初没筹备去面试,但我的项目中应用到的大多数技术栈,自己都在努力做到精通。尽管不怎么写代码了,但出于工作层面,只有精通了,能力为团队兜底。其实,更重要的是乐趣,发现他人优良的设计思维,奇妙的代码实现。 精通带来的集体品牌效应另外还有一个十分十分重要的动因,那就是建立集体品牌。比方,当你从事软件行业多年,怎么能力让他人一眼就辨认到你,记住你呢?写一大堆技术栈?必定不是的。 只有当提起一个畛域,一个技术栈,他人一下子就想到你了;只有当他人遇到问题解决不了时,只能求助于你时;这才算是建立起了本人的集体品牌。 那么,如何能力达到上述成果呢?必定是真正的精通某一个畛域某一个技术栈,而不只是我用过。 那么,如何做到精通呢?每个人都有本人的学习节奏和形式,这里只分享一下集体的「笨办法」。当我接触一个新的技术栈,并想深刻学习时,个别会有以下步骤: 第一,搜寻出大量相干的文章,基本上得几十篇起,依据这些文章写demo实际。每篇文章都是不同的作者,他们会有不同的视角、认识、介绍形式,通过这些文章基本上能理解(或了解)70-80%的知识点。这个层面重视的是广度。 第二,视频材料或书籍。通过第一步之后,曾经可能晓得这个框架是干什么的,有什么优缺点,涵盖多少知识点。此时,就须要通过系列视频或书籍把他们串起来。相较于写文章,视频和书籍更破费作者的工夫,内容品质和系统性更好。这个层面重视的是深度。 第三,实际+输入。如果可能在生产环境实际那再好不过了,但如果无奈在生产环境实际,那就写Demo验证了。而后,最重要的就是输入,无论是外部分享、写文章、录视频等,把学到的货色输入进去。实际是测验真谛的唯一标准,你是否把握了,一输入马上就看进去了。这个层面也是费曼学习法的外围,输入即学习。 第四,浏览源码与交换。大家都是技术人,对于浏览源码的益处就不多说了,它不仅能让你理解实现原理,还能帮你理解如何通过优良的代码进行实现。在这个过程中,很多人会产生不晓得学什么,不晓得该看什么,这就须要交换了。与同样应用过该技术的人交换,他们会分享实际中踩到的坑,你能够钻研钻研为什么有这个坑,如何防止,这又是一个维度的学习。 大家都在聊一万小时定律,但精通一项技术栈,真的不须要那么久。反复述步骤,你会发现,少则几周,多则几个月,你就能够精通对应的框架了。 小结人为什么会焦虑?那是因为没有存在感,没人须要或在意你。人为什么会没有存在感?那是因为你没有价值。人为什么没有价值?那是你做的事他人也能够做到,甚至做的更好,可替代性强。那么如何能力晋升不可替代性呢?那就须要在某一畛域做到他人无奈或一时无奈涉及的档次,遇到问题时只能想到你或找你来解决,只此一项根本就够了。 博主简介:《SpringBoot技术底细》技术图书作者,热爱钻研技术,写技术干货文章。 公众号:「程序新视界」,博主的公众号,欢送关注~ 技术交换:请分割博主微信号:zhuan2quan

July 11, 2021 · 1 min · jiezi

关于面试技巧:画重点如何创建有效的技术面试流程

一场胜利的技术面试须要三个关键点:Tool(工具)+Challenge(问题)+Process(流程)。笔者近期联合专栏“伯乐相“码””中对于技术面试官采访,针对技术面试流程梳理出了一份实际指南。关键步骤一:设计正当无效的问题大的方面来讲,技术面试官要考查候选人: 候选人的基本功是否扎实?候选人技术教训积攒的深度怎么?候选人对问题的思考深度如何?一场无效的代码面试根本能够对以上三个方面进行评估。通常来讲,有教训的面试官除了设计算法问题,加之设计一些考查代码教训的问题,另外还会让候选人进行代码补全。代码补全是让候选人把一段有空白的代码补充残缺,不经对候选人来讲比拟乏味,在此过程中又能够考查候选者的思考和审查他人代码的能力。 关键步骤二:把握沟通技巧,面试流程顺畅高效面试官厘清了本人的需要并且设计出能够筛选出优良的工程师的问题后,应该聚焦在执行面试流程最重要的局部,那就是有技巧地与候选人沟通。 senior工程师喜爱有挑战的,而不是无聊和浪费时间的问题。因而在设计和发送面试邀约的过程中充沛融入同理心是十分重要的。咱们在访谈中发现,在不断扩大招聘规模的同时还致力让候选人感觉被器重的企业,能力博得人才争夺战。过程中应留神很多细节,比方咱们的客户在应用ShowMeBug进行面试前,可能会先向候选人解释为什么要这样做:“代码面试代替了简历或者是后期的电话面试,更加高效进行交换和技能评估,节俭单方的工夫。” 关键步骤三:无效应用面试工具,晋升评估成果自动化的代码笔面试是最主观、无效地批量筛选候选人的形式。不仅考查候选人的思考能力,同时还通过算法和数据结构方面的问题评估他们对基本功的器重,是寻找最优良的工程师的无力工具。 同样应用一款高效的在线笔面试零碎,还能够实在还原面试场景,往往通过字节级回放性能逐帧去看候选人临场体现,也能够减速技术面试官判断是否值得再去下一面。

June 30, 2021 · 1 min · jiezi

关于面试技巧:面试问题频频答错是否还值得考虑

写在专栏开篇前 Bug君之前已经写过一篇文章”从CTO到CEO,10年面试1000人,我是怎么面试程序员的?“(感兴趣的小伙伴能够翻阅历史文章),文中Bug君有提到”如何做好面试官,是成为技术 leader 的第一站。“而后陆续有小伙伴来私信Bug君,外围困惑在:本人敲代码没有任何问题,而当上director后对于如何更高效的面试候选人束手无策。 咱们在ShowMeBug平台上向面试官随机做了调研后,发现大量技术leader都面临一样的困惑,于是咱们下定决心开一档专栏,咱们取名叫伯乐相“码”,将定期邀请面试官来展现他们的实在面试场景,心愿可能助力更多的技术面试官迈好通往技术leader的第一步。 话不多说,咱们开始干货分享! 专栏一:面试问题频频答错,是否还值得思考? 开篇第一课,由Bug君奉上亲身经历的面试案例,来分享实在场景下次要考查的问题和面试技巧,让咱们赶快来瞅一瞅吧 https://www.bilibili.com/vide... 不知大家看了是否有所播种,欢送大家继续咱们专栏节目,也欢送宽广技术面试官和候选人们踊跃加入 https://www.showmebug.com ————————————————版权申明:本文为CSDN博主「ShowMeBug」的原创文章,遵循CC 4.0 BY-SA版权协定,转载请附上原文出处链接及本申明。原文链接:https://blog.csdn.net/ShowMeB...

June 19, 2021 · 1 min · jiezi

关于面试技巧:初出茅庐的铁头娃竟然拿到阿里奇安信offer原来是看了这份面试核心知识点全程干货必须收藏

前言当初面试能够说是陈词滥调的一个问题了,的确也是这么回事。面试题、面试宝典、面试手册......各种面试题一搜一大把,基本看不完,也看不过去,而且每份面试材料也都感觉Nice,而后就开启了珍藏之路。 网络安全工程师应该是不会很容易满足的,当初拿着15K的工作,下一步就想着拿30K的offer,甚至年薪百万都是平安工程师很常见的,不满足于现状,身在其位就要有担当其位的能力,一直晋升技能、技术栈,都是必不可少的! 好不容易有个大厂面试机会,面试官才问了两三个问题,就曾经答复不上来的,只想找个地缝钻进去,连进入技术面的机会都没有,当初大厂都在大量招聘网络安全工程师,但面试题怎么都这么难?! 其实很多人,对自身没有一个分明的布局,甚至不晓得适宜什么路线,这样的话,你就会离心仪的offer越来越远!无论何时,都须要对本身有一个分明的认知,你会提前布局一下本人的学习路线吗? 面试筹备网络安全工程师要进入大厂到底须要哪些能力? 面试前须要做哪些筹备? 大厂面试题的重难点都别离是什么? ...... 想要进入大厂,你不仅须要有非常扎实的基本功,还须要有残缺的解答逻辑! 当你真的决定要跳槽面试的时候就得最本人的知做一个小总结了,找出本人的技术短板去补救,把本人的学习路线给整理出来会事倍功半,上面附上我本人的温习路线 浸透测试学习路线就浸透测试就能梳理出这么多知识点,从而能够看出总结本人的温习路线是一个如许重要的事件,这里只是展现我总结的一部分, 整个路线包含xss,mysql,分等等。我都总结出了每一小步的温习路线。 上面为局部的内容和面试题展现 为何一个MYSQL数据库的站,只有一个80端口凋谢?一个成熟并且绝对平安的CMS,浸透时扫目录的意义?在某后盾新闻编辑界面看到编辑器,应该先做什么?审查上传点的元素有什么意义?CSRF、XSS及XXE有什么区别,以及修复形式?3389无奈连贯的几种状况列举出owasp top10 2019说出至多三种业务逻辑破绽,以及修复形式?指标站无防护,上传图片能够失常拜访,上传脚本格局拜访则403,什么起因?指标站禁止注册用户,找回明码处轻易输出用户名提醒:“此用户不存在”,你感觉这里怎么利用? 护网面试题+DD平安工程师口试1、JNI 函数在 java 中函数名为 com.didi.security.main,C 中的函数名是什么样的?  2、Frida 和 Xposed 框架? 3、SSRF 利用形式? 4、宏病毒? 5、APP 加壳? 6、勒索软件 Wanacry 的特色? 蠕虫、僵尸病毒 7、ARM32 位指令中,返回值和返回地址保留在哪个寄存器中? 8、HTTPS 握手过程中用到哪些技术? 9、Linux 中 PHP 环境,已知 disable_functions=exec,passthrupopen,proc_open,shell_exec,system, 请写出两种有可能实现任意命令执行的形式? 10、Android APP 逆向剖析步骤个别是怎么样的? Web平安篇1、防备常见的 Web 攻打 2、重要协定散布层 arp 协定的工作原理 3、rip 协定是什么?rip 的工作原理 4、什么是 RARP? 5、工作原理 OSPF 协定?O 6、SPF 的工作原理 7、TCP 与 UDP 区别总结 8、什么是三次握手四次挥手? tcp 为什么要三次握手? ...

May 22, 2021 · 1 min · jiezi

关于面试技巧:2021-疫情期间美国公司技术岗的面试流程

绝对中资公司来说,美国或者东方公司的面试流程更加简单,考核的内容更多。 不论是那种面试,很多时候求职者会遇到:面着面着就没了。 当然咱们这说的只是你应聘中层以下的技术或者局部治理岗。 如果你是应聘公司高层,我置信基本上都是属于相互举荐的,比拟少有公司在市场中进行人才的抉择,通常都是通过公司外部的降职渠道或者是通过职业经理人的形式来进行操作了。 对大部分人来说,基本上都会面临到面试技术岗或者局部的治理岗。 中资公司在这部分的随意性比拟大,与美国公司比起来更随便。美国公司的操作比拟死板,大部分的状况都会依照既定的流程一步一步的推动。 通常从你开始投简历到找到一份工作的工夫在几周到数月不等。 因为疫情的关系,很多公司的面试流程都有了些更改,次要还是在 On-Site 面试这部分通常都改成虚构通过 Zoom 或者 Team 的面试了。 在疫情期间的大抵的流程通常如上面的几个分类,投简历阶段是第一步,一个残缺的找工作流程,通常有上面的几个过程。 投简历(Step1) 这个是你惟一能够被动管制的中央。 有没有什么能够改良的中央呢?貌似没有什么太多能够改良的中央,无非就是多投,对一些大点的公司,你甚至都能够屡次投。 起因很简略,不要想当然的认为公司只有一个简历库,其实大公司不同部门之间的很多数据是齐全不共享的,因而你的投的简历只针对这一个公布职位的部门无效,针对其余的一些部门,可能基本没有看到过。 因而针对下面的状况,你就多投就好了,针对同一个公司,只有不是同一个部门的同一个职位,你就投它。就算是同一个职位也没啥问题,多投的最坏后果就是屡次收到回绝的邮件罢了。 在经济不是十分好的时候,很多人面临的状况就是投出去的简历基本没有回应。这个真心没有太多能够解决的方法,惟一的方法就多投。 初筛 (Step2) 不同的公司在这里的抉择是不一样的。 有些公司是 HR 初筛,有些公司就间接项目经理上来做了。这一步通常是电话或者电子邮件的形式来进行沟通。 因为这一步是公司被动发动的,因而你可能会面临很多形形色色的要求。 比如说,你可能会间接遇到在线做算法题;你可能会遇到做职业技能行为问卷调查;你可能会遇到做测智商的题目;等等等等,这一步是形形色色的。 通常大公司会 HR 先和你沟通,这个沟通通常不是技术层面的,有一些小的技术层面的货色,然而不多。 如果你遇到的是项目经理的面试的话,这个时候技术层面的内容就会比拟多。但大部分集中在概念下面,如果你面试的就是技术岗,那么你须要对计算机相关的货色有所准备才行。 小组成员轮面 (Step 3) 如果你运气好,通过了下面的面试过程,那么你可能须要面对的就是我的项目小组成员的轮面了。 这个面试的工夫通常比拟长,在 3 到 4 个小时左右,也有段的个把小时。 不论怎么样这个在疫情期间基本上都采取在线虚构的形式进行了。通常会有 Zoom 或者其余视频工具的退出应用。 一般来说会有问题解答,理论的代码 Coding 技能,数据设计等等。 这部分在以前通常是做 On-Site 面试,公司会要求你自己过来公司进行面试。虚构形式的面试有时候也比拟奇葩的。 遇到过屡次,所以每个公司的小组成员对不同工具的应用熟练程度不一样,在这里你就能够有感觉了。 你齐全能够通过这个理解公司对各种开发工具,沟通工具的应用状况。 比如说,一些公司喜爱用 Zoom 分享屏幕的形式来让你看他们的屏幕来理解须要问的问题是什么,有些公司心愿你在线 Coding 实际,然而他们也可能让你用本人的 IDE,因而你只能分享你屏幕给他们了 等等奇葩的操作都能遇到。 有些公司可能会在这一轮反反复复好几次,应聘者就做好筹备被践踏的筹备吧。 论断(Step 4) 在实现第三轮面试后就是等后果了。 在公司是否可能给你 Offer,通常都会在这一步决定。 这个决定对应聘者来说齐全是争光的,你不晓得公司是怎么做的决定,你也不晓得你是不是有什么中央是能够进行改良的。 有些公司会给你一些回馈,包含的体现是什么样,没有发给你 Offer 的起因可能是公司须要应用的技术你并不是十分纯熟,因而你不是非常适合这个职位。 ...

May 13, 2021 · 1 min · jiezi

关于面试技巧:大厂面试的拦路石Linux内核面试题30道含答案

1. Linux 中次要有哪几种内核锁?Linux 的同步机制从 2.0 到 2.6 以来一直倒退欠缺。从最后的原子操作,到起初 的信号量,从大内核锁到明天的自旋锁。这些同步机制的倒退随同 Linux 从单处 理器到对称多处理器的过渡;随同着从非抢占内核到抢占内核的适度。Linux 的 锁机制越来越无效,也越来越简单。自旋锁最多只能被一个可执行线程持有,如果一个执行线程试图申请一个已被争 用曾经被持有)的自旋锁,那么这个线程就会始终进行忙循环——旋转——期待 锁从新可用。要是锁未被争用,申请它的执行线程便能立即失去它并且持续进行。 自旋锁能够在任何时刻避免多于一个的执行线程同时进入临界区。 信号量的睡眠个性,使得信号量实用于锁会被长时间持有的状况;只能在过程上 下文中应用,因为中断上下文中是不能被调度的;另外当代码持有信号量时,不 能够再持有自旋锁。 Linux 内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的 API,另 外一些同步机制,包含大内核锁、读写锁、大读者锁、RCU (Read-Copy Update, 顾名思义就是读-拷贝批改),和程序锁。 2. Linux 中的用户模式和内核模式是什么含意?MS-DOS 等操作系统在繁多的 CPU 模式下运行,然而一些类 Unix 的操作系统则使 用了双模式,能够无效地实现工夫共享。在 Linux 机器上,CPU 要么处于受信赖 的内核模式,要么处于受限制的用户模式。除了内核自身处于内核模式以外,所 有的用户过程都运行在用户模式之中。 内核模式的代码能够无限度地拜访所有处理器指令集以及全副内存和 I/O 空间。 如果用户模式的过程要享有此特权,它必须通过零碎调用向设施驱动程序或其余 内核模式的代码发出请求。另外,用户模式的代码容许产生缺页,而内核模式的 代码则不容许。 在 2.4 和更早的内核中,仅仅用户模式的过程能够被上下文切换出局,由其余进 程抢占。除非产生以下两种状况,否则内核模式代码能够始终独占 CPU: (1) 它被迫放弃 CPU; (2) 产生中断或异样。 2.6 内核引入了内核抢占,大多数内核模式的代码也能够被抢占。 3. 怎么申请大块内核内存?在 Linux 内核环境下,申请大块内存的成功率随着零碎运行工夫的减少而缩小, 尽管能够通过 vmalloc 系列调用申请物理不间断但虚拟地址间断的内存,但毕竟 其应用效率不高且在 32 位零碎上 vmalloc 的内存地址空间无限。所以,个别的 倡议是在系统启动阶段申请大块内存,然而其胜利的概率也只是比拟高而已,而不是100%。如果程序真的比拟在意这个申请的胜利与否,只能退用“启动内 存”Boot Memory)。 ...

November 12, 2020 · 3 min · jiezi

关于面试技巧:头条终面写个消息中间件

每个时代,都不会亏待会学习的人。大家好,我是 yes。 这种设计类问题想必大家都不生疏,面试时或多或少都能碰到。 比方如何写一个线程池?如何写一个 HashMap ?如何写一个 RPC 框架等等,当然这里的写不是真的叫你用代码写进去,只是说说设计理念,整体架构。 这个面试题来自于一个读者的字节面试经验,我会从面试技巧和消息中间件的设计两个方面论述。 我感觉重点在于面试技巧,因为它通用。 两种极其的状况大多数同学遇到这种问题会呈现两种极其的状况: 第一种:一脸懵逼,两眼无神,不知从何说起,万般思路,都化作一声叹气。第二种:沉默寡言,像是口中架起了一把加特林,哒哒哒哒哒哒哒哒,还冒着蓝火。 第一种不用说了,好一点的面试官可能会疏导你,会问一些提示性的问题,一步一步地带你渐入佳境,当然你要是胸中无点滴,那还是没救的,局面就异样地难堪。 第二种会把面试官整蒙了,或者你真的懂很多,很多细节也都清晰,然而你不能一股脑儿的都抛出来,这会显得你抓不住重点。 面试官也是人这点其实很要害,很多把面试官当成一个莫得感情的发问机器人,感觉他无所不能能够齐全 get 到你的点,殊不知你引以为傲的细节答复,他可能感觉你在说蛇皮。 是人就会有感情,就须要交换,好的面试官会把控整体进度,从拉家常开始,让场子热起来再一步一步的深挖。 当然也有一些面试官比拟弱,这时候就须要你来特意地流出一点空白,来让面试官涂鸦,让面试官感觉你这人就很难受,你这波就稳了。 当然即便面对着把控全场的面试官你也得主动出击,每个人都有本人的善于点,你须要疏导面试官来询问你的短处。 正确的答复姿态正确的答复姿态是 BFS(广度优先搜寻) 而不是 DFS (深度优先搜寻),什么意思呢? 就是咱们须要先从大局上讲出须要设计的货色的重点,而后再期待面试官的持续发问,深挖。 咱们须要琢磨面试官的心理,从他的发问能够看出他想要晓得的重点是哪个方向的。 比方就拿 HashMap 来说,你简略的把获取、写入、抵触解决、扩容啥的都说了,而后期待面试官接下来的发问,有可能会往线程平安方面深刻,也有可能会往扩容方向再挖,比方引出 Redis 的 hash 扩容等等。 所以说给面试官留发问的机会,抓住他的爱好或者说熟知的方向答复,这样如果你答得好,相互之间谈的来,面试官会对你高度认可。 而且在说各设计要点的时候也要留神进展,要留机会给面试官插话,让面试官充沛参加你的设计。 还是拿 HashMap 作为例子,比方你说了获取、写入、抵触之后稍作进展,这时候大概率面试官还会问还有吗?让面试官有参与感,让他感觉通过他的疏导这个设计才逐渐地欠缺。 当然如果不问也没事,你进展下持续说就行。 让面试成为一场技术交换,这是面试的最高境界,置信面试完了之后单方都会有意犹未尽的感觉,惺惺相惜就是这么来的。 然而这种场景也不是这么容易碰到的,首先你和面试官得有雷同方向的爱好,比方你对 JVM 有很深刻的钻研,而面试官对存储方面有很深刻的钻研,JVM 懂的不深,这样就碰不出火花了。 所以说会有很多人碰到这么个状况:我面这个公司一面挂,另一家公司面面超神,这都是很失常的。 当然你要是说你全能,那当我没说。 小结一下面试技巧首先要正确的对待面试官,你和面试官是等同的,不要一来就低声下气的。 其次答复问题须要抓住重点,不要一股脑儿的把你晓得的都说了,要留白待面试官发问。 要把控面试的节奏,往本人熟知的方向上引。 如何写个消息中间件接下来咱们再看看如何写个消息中间件。 首先咱们须要明确地提出消息中间件的几个重要角色,别离是生产者、消费者、Broker、注册核心。 简述下消息中间件数据流转过程,无非就是生产者生成音讯,发送至 Broker,Broker 能够暂缓音讯,而后消费者再从 Broker 获取音讯,用于生产。 而注册核心用于服务的发现包含:Broker 的发现、生产者的发现、消费者的发现,当然还包含下线,能够说服务的高可用离不开注册核心。 而后开始简述实现要点,能够同通信讲起:各模块的通信能够基于 Netty 而后自定义协定来实现,注册核心能够利用 zookeeper、consul、eureka、nacos 等等,也能够像 RocketMQ 本人实现简略的 namesrv (这一句话就都是关键词)。 ...

October 13, 2020 · 1 min · jiezi

关于面试技巧:基础篇深入解析JAVA注解机制

java实现注解的底层原理和概念java注解是JDK1.5引入的一种正文机制,java语言的类、办法、变量、参数和包都能够被注解标注。和Javadoc不同,java注解能够通过反射获取标注内容在编译器生成.class文件时,注解能够被嵌入字节码中,而jvm也能够保留注解的内容,在运行时获取注解标注的内容信息java提供的注解能够分成两类:<br/>作用在代码上的性能注解(局部): 注解名称性能形容@Override查看该办法是否是重写办法。如果发现其父类,或者是援用的接口中并没有该办法时,会报编译谬误@Deprecated标记过期办法。如果应用该办法,会报编译正告@SuppressWarnings批示编译器去疏忽正文解中申明的正告@FunctionalInterfacejava8反对,标识一个匿名函数或函数式接口<br/>让给程序员开发自定义注解的元注解(和关键字@interface配合应用的注解) 元注解名称性能形容@Retention标识这个正文解怎么保留,是只在代码中,还是编入类文件中,或者是在运行时能够通过反射拜访@Documented标识这些注解是否蕴含在用户文档中@Target标识这个注解的作用范畴@Inherited标识注解可被继承类获取@Repeatable标识某注解能够在同一个申明上应用屡次Annotation是所有注解类的独特接口,不必显示实现。注解类应用@interface定义(代表它实现Annotation接口),搭配元注解应用,如下package java.lang.annotation;public interface Annotation { boolean equals(Object obj); int hashCode(); String toString(); // 返回定义的注解类型,你在代码申明的@XXX,相当于该类型的一实例 Class<? extends Annotation> annotationType();}-----自定义示例-----@Retention( value = RetentionPolicy.RUNTIME)@Target(value = ElementType.TYPE)public @interface ATest { String hello() default "siting";}ATest的字节码文件,编译器让自定义注解实现了Annotation接口 public abstract @interface com/ATest implements java/lang/annotation/Annotation { // compiled from: ATest.java @Ljava/lang/annotation/Retention;(value=Ljava/lang/annotation/RetentionPolicy;.RUNTIME) @Ljava/lang/annotation/Target;(value={Ljava/lang/annotation/ElementType;.TYPE}) // access flags 0x401 public abstract hello()Ljava/lang/String; default="siting"}自定义注解类型时,个别须要用@Retention指定注解保留范畴RetentionPolicy,@Target指定应用范畴ElementType。RetentionPolicy保留范畴只能指定一个,ElementType应用范畴能够指定多个注解信息怎么和代码关联在一起,java所有事物都是类,注解也不例外,退出代码System.setProperty("sum.misc.ProxyGenerator.saveGeneratedFiles","true"); 可生成注解相应的代理类在代码里定义的注解,会被jvm利用反射技术生成一个代理类,而后和被正文的代码(类,办法,属性等)关联起来 五种元注解详解@Retention:指定注解信息保留阶段,有如下三种枚举抉择。只能选其一public enum RetentionPolicy { /** 注解将被编译器抛弃,生成的class不蕴含注解信息 */ SOURCE, /** 注解在class文件中可用,但会被JVM抛弃;当注解未定义Retention值时,默认值是CLASS */ CLASS, /** 注解信息在运行期(JVM)保留(.class也有),能够通过反射机制读取注解的信息, * 操作方法看AnnotatedElement(所有被正文类的父类) */ RUNTIME}@Documented:作用是通知JavaDoc工具,以后注解自身也要显示在Java Doc中(不罕用)@Target:指定注解作用范畴,可指定多个public enum ElementType { /** 适用范围:类、接口、注解类型,枚举类型enum */ TYPE, /** 作用于类属性 (includes enum constants) */ FIELD, /** 作用于办法 */ METHOD, /** 作用于参数申明 */ PARAMETER, /** 作用于构造函数申明 */ CONSTRUCTOR, /** 作用于局部变量申明 */ LOCAL_VARIABLE, /** 作用于注解申明 */ ;, /** 作用于包申明 */ PACKAGE, /** 作用于类型参数(泛型参数)申明 */ TYPE_PARAMETER, /** 作用于应用类型的任意语句(不包含class) */ TYPE_USE}TYPE_PARAMETER的用法示例 ...

October 4, 2020 · 4 min · jiezi

吊打面试官系列缓存雪崩击穿穿透

你知道的越多,你不知道的越多点赞再看,养成习惯 前言Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次offer的面霸(请允许我使用一下夸张的修辞手法),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写《吊打面试官》系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂offer! 一点感慨本来都把稿子放到公众号保存了,洗澡的时候想了一下晚上的比赛,觉得还是打开电脑写点东西,跟文章内容没关系,只是一点个人的感慨,不知道多少小伙伴看了昨天SKT VS G2的比赛,又不知道多少小伙伴还记得Faker手抖的那一幕。 不知道你们看了是什么感受,我看到他手抖的时候我内心也抖了,世界赛我支持的都是LPL的队伍,但是我喜欢李哥这个人,那种对胜利的执著,这么多年了那种坚持自己的坚持,这么多利益诱惑在面前却只想要胜利,这样的人我好喜欢啊,我想很多人也喜欢。 可能就像很多网友说的那样,英雄迟暮,但是我觉得他还是有点东西,就像很多人说我们程序员只能吃年轻饭一样,但是如果你坚持自己的坚持,做个腹有诗书气自华的仔,我想最后肯定会得到自己的得到。 好了我也不煽情了,我们开始讲技术吧。 正文上一期吊打系列我们提到了Redis的基础知识,还没看的小伙伴可以回顾一下 《吊打面试官》系列-Redis基础 那提到Redis我相信各位在面试,或者实际开发过程中对缓存雪崩,穿透,击穿也不陌生吧,就算没遇到过但是你肯定听过,那三者到底有什么区别,我们又应该怎么去防止这样的情况发生呢,我们有请下一位受害者。 面试开始一个大腹便便,穿着格子衬衣的中年男子,拿着一个满是划痕的mac向你走来,看着快秃顶的头发,心想着肯定是尼玛顶级架构师吧!但是我们腹有诗书气自华,虚都不虚。 小伙子我看你的简历上写到了Redis,那么我们直接开门见山,直接怼常见的几个大问题,Redis雪崩了解么?帅气迷人的面试官您好,我了解的,目前电商首页以及热点数据都会去做缓存 ,一般缓存都是定时任务去刷新,或者是查不到之后去更新的,定时任务刷新就有一个问题。 举个简单的例子:如果所有首页的Key失效时间都是12小时,中午12点刷新的,我零点有个秒杀活动大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住,它会报一下警,真实情况可能DBA都没反应过来就直接挂了。此时,如果没用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。这就是我理解的缓存雪崩。 我刻意看了下我做过的项目感觉再吊的都不允许这么大的QPS直接打DB去,不过没慢SQL加上分库,大表分表可能还还算能顶,但是跟用了Redis的差距还是很大 同一时间大面积失效,那一瞬间Redis跟没有一样,那这个数量级别的请求直接打到数据库几乎是灾难性的,你想想如果打挂的是一个用户服务的库,那其他依赖他的库所有的接口几乎都会报错,如果没做熔断等策略基本上就是瞬间挂一片的节奏,你怎么重启用户都会把你打挂,等你能重启的时候,用户早就睡觉去了,并且对你的产品失去了信心,什么垃圾产品。 面试官摸了摸自己的头发,嗯还不错,那这种情况咋整?你都是怎么去应对的?处理缓存雪崩简单,在批量往Redis存数据的时候,把每个Key的失效时间都加个随机值就好了,这样可以保证数据不会在同一时间大面积失效,我相信,Redis这点流量还是顶得住的。 setRedis(Key,value,time + Math.random() * 10000);如果Redis是集群部署,将热点数据均匀分布在不同的Redis库中也能避免全部失效的问题,不过本渣我在生产环境中操作集群的时候,单个服务都是对应的单个Redis分片,是为了方便数据的管理,但是也同样有了可能会失效这样的弊端,失效时间随机是个好策略。 或者设置热点数据永远不过期,有更新操作就更新缓存就好了(比如运维更新了首页商品,那你刷下缓存就完事了,不要设置过期时间),电商首页的数据也可以用这个操作,保险。 那你了解缓存穿透和击穿么,可以说说他们跟雪崩的区别么?嗯,了解,我先说一下缓存穿透吧,缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,我们数据库的 id 都是1开始自增上去的,如发起为id值为 -1 的数据或 id 为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大,严重会击垮数据库。 小点的单机系统,基本上用postman就能搞死,比如我自己买的阿里云服务 像这种你如果不对参数做校验,数据库id都是大于0的,我一直用小于0的参数去请求你,每次都能绕开Redis直接打到数据库,数据库也查不到,每次都这样,并发高点就容易崩掉了。 至于缓存击穿嘛,这个跟缓存雪崩有点像,但是又有一点不一样,缓存雪崩是因为大面积的缓存失效,打崩了DB,而缓存击穿不同的是缓存击穿是指一个Key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个Key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个完好无损的桶上凿开了一个洞。 面试官露出欣慰的眼光,那他们分别怎么解决缓存穿透我会在接口层增加校验,比如用户鉴权校验,参数做校验,不合法的参数直接代码Return,比如:id 做基础校验,id <=0的直接拦截等。 这里我想提的一点就是,我们在开发程序的时候都要有一颗“不信任”的心,就是不要相信任何调用方,比如你提供了API接口出去,你有这几个参数,那我觉得作为被调用方,任何可能的参数情况都应该被考虑到,做校验,因为你不相信调用你的人,你不知道他会传什么参数给你。 举个简单的例子,你这个接口是分页查询的,但是你没对分页参数的大小做限制,调用的人万一一口气查 Integer.MAX_VALUE 一次请求就要你几秒,多几个并发你不就挂了么?是公司同事调用还好大不了发现了改掉,但是如果是黑客或者竞争对手呢?在你双十一当天就调你这个接口会发生什么,就不用我说了吧。这是之前的Leader跟我说的,我觉得大家也都应该了解下。 从缓存取不到的数据,在数据库中也没有取到,这时也可以将对应Key的Value对写为null、位置错误、稍后重试这样的值具体取啥问产品,或者看具体的场景,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。 这样可以防止攻击用户反复用同一个id暴力攻击,但是我们要知道正常用户是不会在单秒内发起这么多次请求的,那网关层Nginx本渣我也记得有配置项,可以让运维大大对单个IP每秒访问次数超出阈值的IP都拉黑。 那你还有别的办法么?还有我记得Redis还有一个高级用法布隆过滤器(Bloom Filter)这个也能很好的防止缓存穿透的发生,他的原理也很简单就是利用高效的数据结构和算法快速判断出你这个Key是否在数据库中存在,不存在你return就好了,存在你就去查了DB刷新KV再return。 那又有小伙伴说了如果黑客有很多个IP同时发起攻击呢?这点我一直也不是很想得通,但是一般级别的黑客没这么多肉鸡,再者正常级别的Redis集群都能抗住这种级别的访问的,小公司我想他们不会感兴趣的。把系统的高可用做好了,集群还是很能顶的。 缓存击穿的话,设置热点数据永远不过期。或者加上互斥锁就能搞定了 作为暖男,代码我肯定帮你们准备好了 面试结束嗯嗯还不错,三个点都回答得很好,今天也不早了,面试就先到这里,明天你再过来二面我继续问一下你关于Redis集群高可用,主从同步,哨兵等知识点的问题。晕居然还有下一轮面试!(强行下一期的伏笔哈哈)但是为了offer还是得舔,嗯嗯,好的帅气面试官。 能回答得这么全面这么细节还是忍不住点赞 (暗示点赞,每次都看了不点赞,你们想白嫖我么?你们好坏喲,不过我喜欢) ...

November 5, 2019 · 1 min · jiezi

面试完然后为什么就没然后了提升成功率

前言:     大学毕业想找web前端实习岗位却一直没消息?刚刚培训出来信心满满(但是多少有点虚),也是面试很多找不到工作,面试很多公司,一直没结果?这是为什么? 痛点分析:hr来电话,通知去面试,结果连技术都没问就让回去等通知,然后就没然后了。去公司面试,问的技术很多不会,然后就没然后了。去公司面试,老是问到原理,根本不知道如何回答,然后就没然后了。去公司面试,问到是否有真实项目,然后就没然后了。 去公司面试,感觉回答的不错,说给通知,然后就没然后了。去公司面试,很多地方回答不到“点”上,然后就没然后了。  然后...到底问题出在哪里:其实作为技术来说,就算一个10年工作经验的人,问到很多技术方面的问题,他也是回答不上来的,但是为什么他都可以从容应对?其实公司面试web前端岗位,问技术是一方面,还有一部分看临时回复回答。 你的表现一下就被面试官看穿了,根本就是一个无工作经验的人,经验很不足,一个公司花着钱培养一个没有工作经验的人,如果你是老板,你愿意吗?到底...如何解决...怎么样才可以找到工作?我现在该做些什么?现在还是盲目的去找工作?还是停下来,看点东西,学习一下真正的技巧,再去找一下工作,成功大大提高?公司真实面试题:https://www.3mooc.com/front/c... vue面试题:https://www.3mooc.com/front/c...  送web前端面试题教材,包含:  1. 面试技巧   2. 将近200家企业真实面试题题   3. 老师一对一辅导,从简历到面试复盘 已解决:北京2000+人就业,西安72人就业,成都221人就业,湖南39人就业,广东1000+人就业捷径我告诉你了,别人已经找到工作了,你是否愿意在过年前找到工作?就看你了。

November 4, 2019 · 1 min · jiezi

一分钟面试题令人挠头的三目运算符

面试题 提问:当 a=1,b=2 时,test1 方法的执行结果是什么?思考一分钟。 答案: 解析在使用三目运算符时,尽量保证两个返回值的类型一致,不然会触发类型转换,转换规则如下: 如果返回值 X 和返回值 Y 是同种类型,那么返回类型毫无疑问就是这种类型。如果两个返回值 X 和 Y 的类型不同,那么返回值类型为他们两最接近的父类。举例: // String 和 Boolean 都实现了 Serializable 接口Serializable serializable = a == b ? "true" : Boolean.FALSE;// 所有类都继承了 Object 类Object o = a == b ? new ArrayList<>() : new TernaryOperatorDemo();对于基本数据类型,如果其中一个返回值 X 类型为byte、short或者char,另一个返回值 Y 类型为int,那么若在编译期就能判断出 Y 的取值范围在 X 的取值范围之内,则返回类型为 X 的类型,反之则为 Y 的类型。如果返回值 X 类型不为以上几种,则会触发隐藏类型转换。当基本数据类型和对象数据类型相遇时,三目运算符默认返回结果为基本数据类型。了解以上规则之后,我们再看来一下 test1 方法。 private static void test1(int a, int b) { // 触发隐藏类型转换,int 类型 9 转为 9.0D System.out.println(a == b ? 9.9 : 9); // 编译期判断,98 在 char 之内,转为 b System.out.println(a == b ? 'a' : 98); // 编译期判断,超出char范围,统一转 int System.out.println(a == b ? 'a' : Integer.MAX_VALUE); // 编译期时无法判断 b 的取值,触发隐藏类型转换,统一转 int System.out.println(a == b ? 'a' : b); System.out.println(a != b ? 'a' : b); Map<String, Long> map = new HashMap<>(); map.put("b", 1L); // 基本数据类型和对象数据类型相遇时,默认转为基本数据类, // map.get("a") 返回 null,转为基本数据类型时,报空指针异常 System.out.println(map == null ? -1L : map.get("a"));}作业如何修改 test1 方法,使得代码运行时不抛空指针异常,请至少提供一种解决方案哦。 ...

November 4, 2019 · 1 min · jiezi

前端面试每日31周汇总20191103

《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。 前端面试每日3+1题,以面试题来驱动学习,每天进步一点! 让努力成为一种习惯,让奋斗成为一种享受!相信 坚持 的力量!!!学习不打烊,充电加油只为遇到更好的自己,365天无节假日,每天早上5点纯手工发布面试题(死磕自己,愉悦大家)。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花20分钟来学习与思考。在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢迎大家到Issues交流,鼓励PR,感谢Star,大家有啥好的建议可以加我微信一起交流讨论!希望大家每日去学习与思考,这才达到来这里的目的!!!(不要为了谁而来,要为自己而来!)毕竟一个人的能力有限,集体的力量才是无限的!欢迎大家一起来贡献题目,为前端面试每日3+1开源社区贡献力量!点击 我也要出题 贡献你的题目吧,让大家一起来挑战你的题目! 【推荐】欢迎跟 jsliang 一起折腾前端,系统整理前端知识,目前正在折腾 LeetCode,打算打通算法与数据结构的任督二脉。GitHub 地址 html解释下为什么<p> </p>会换两行?你知道p标签和br标签两者的区别是什么吗?如何在页面中插入TAB符号(制表符)说下cookie都有哪些缺点?举例说明a标签的作用都有哪些?请举例说明关于html的引用标签有哪些?请举例说明html支持的数学符号有哪些?css举例说明伪类:focus-within的用法如何用css自定义滚动条?能做到所有浏览器兼容吗?想要做兼容怎么办呢?border-radius:50%和border-radius:100%有什么区别?如何使用CSS实现段落首字母或首字放大效果?如何给段落的首行缩进?你有去看过或者了解过css的标准文档吗?你知道CSS的标准发布流程吗?js你有用过哪些3D渲染的库?页面的编码和被请求的资源编码不一致时如何处理?ajax的请求状态有哪几种?请介绍下js的数据类型写一个方法找出一段话里面出现频率最多的词请使用js实现一个省市县级联的效果用js实现一个轮播图,并简述有哪些实现的方法软技能你知道什么是内网穿透吗?有没有玩过?你要是在家时,公司网站出问题了你是怎么解决的?假设有一个场景,需要前端自己计算十万级别或更多的数据,你有解决什么方案呢?你有做过H5的游戏开发吗?说说它的开发步骤你有做过Hybrid APP开发吗?说说你的经验你是计算机专业的吗?你们上学都学了哪些内容?你知道开发好的功能要自测吗?你一般是怎么自测的呢?全部所有 交流讨论欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎点个Star, 同时欢迎加入 “前端面试每日3+1” 微信群(扫个人微信号邀请入群)相互交流。

November 3, 2019 · 1 min · jiezi

剑指offerWEB前端面试直通车

现在程序员大军越来越庞大,行业竞争激烈,面试应聘的难度也提升了不少,一个前端招聘岗位就可能收到几百上千份简历,企业要在这么多人中快速、准确的找出自己需要的人,面试的环节就显得尤为重要。在经历了十几家面试之后,我整理了一些心得体会,也把我自己的一些成功经验跟大家交流分享,希望大家都能找到自己心仪的岗位,实现自己的职业目标和人生价值。 面试细节面试着装面试的时候一定要干净整洁,衣着得体,不能穿的特别随意,或者妆容、打扮特别夸张,即使在你看来这是新潮时尚,也需要分清场合,面试官会觉得这样的人很浮躁、不稳定,即使你技术再好,单就这一点可能也会扣掉一大半的印象分。细节决定成败,面试过程中的每一个环节都不能掉以轻心。 时间观念面试的过程中一定要有时间观念,提前查好出行路线,考虑好途中会不会出现堵车的特殊情况,可以改换成地铁这种比较稳妥的交通工具,最好是按照约定时间提前十五至二十分钟到达面试地点,如果你早到了也不要立马联系工作人员,因为可能上一个面试还没结束,或者打乱别人的工作计划。 面试迟到会给面试官留下非常不好的第一印象,那么之后你就很难翻盘了,除非你真的是遇到了特殊情况,这时你要提前告知面试官,更改时间或者取消面试,迟到或者失约对于面试者和面试官都不是一个好的体验。因为企业会根据时段,安排好人员面试,如果你这边耽搁了或者时间延后就会直接影响之后的面试进度,也有可能影响面试官的工作安排。这在工作中也是很重要的职业素养,同时也反映了一个人的做事原则和对工作的责任心,再严重一点可能还会上升到诚信问题,如果你连这些基本的职场规则还没学会,那么很难争取到一个好的工作机会。 保持通信畅通一定要确保你留在简历上的联系方式是可以随时联系到你本人的,因为企业一般会通过招聘平台或者你的联系电话与你沟通面试事宜,如果hr联系你的时候你的电话无法接通,除非你的条件真的非常优秀,否则很大概率他是不会再联系你第二次了,不要因为漏接电话或者电话欠费这种原因让你失去宝贵的面试机会,而这样的一次机会或许就是改变你命运的一次机会。 面试前的热身对于刚毕业出来找工作的同学来说,可能经验不足,对面试没有什么概念。建议在你投递心仪公司的时候可以先投几家公司做做热身,这个时候不需要有任何的心理包袱,就当是去练练手,所以面试的过程可能会发挥得更顺畅、更自然,说不定这个阶段就会获得offer,并且比你之前想去的那家公司待遇还好,这岂不是意外之喜。 面试总结复盘在面试中我们要打起十二分精神,面试结束后也不能松懈,应该趁着记忆还新鲜,马上把面试题复盘出来,或者在面试的过程中做好录音备份,晚上回家的时候详细的整理出来。多做总结,会对自己有更清晰的认识,即使面试失败也是很宝贵的经验,你需要从中总结出失败的原因,是技术方面的缺失,还是表达的失误。同时也要明确企业在面试的过程中看中的是什么,现在应用的比较多的技术是什么。每一次失败的面试都是为下一次成功的面试做铺垫,通过总结你会更有针对的性的提升自己。 简历简历内容一定要用心制作简历,虽然我只说一遍,但是简历真的非常重要!简历是你向面试官展示自己的第一张名片,简历的好坏也会直接影响你在面试官心中的第一印象,这个一点也不夸张。有工作经验的同学,一定要将自己的优势充分展现出来。如果是没有工作经验的应届毕业生,可以将自己在学校或者实习期间做的项目着重描写一下。不要照搬网上的简历模板,简历应该简洁流畅,每一个元素都是为应聘岗位而生,不要花太多的篇幅描写你在学校学生会的经历、你参加了什么社团、担任过什么班级干部,可以简略的概括,面试官不会因为你在学校当了什么会的干部就对你感兴趣,他只在乎你有参与过哪些开发项目、技术能力如何、能为公司创造什么价值。 简历制作不要从网络上下载装饰过度、花里胡哨的简历模板,尽量选择商务简洁的风格,技术人员的简历要以阅读性为主,重点信息要突出,装饰颜色控制在两种以内,尽量不要选择太有个性的字体,字体数量控制在两种以内。控制好简历的篇幅及排版,尽量占满整个页面,如果一页展示不开可以设计成两页,但是不要有一页只有一两行内容的情况出现,也最好不要超过两页。 简历投递互联网简历投递平台个人推荐Boss、拉勾,一般投递时间为早上9点-10点、下午1:30-3点,这个时段是hr处理简历的时间,最好不要选择周五投递,一般快到周末的时候工作人员都会开始本周工作的收尾。 文件格式一般要准备两份格式的简历:word格式和pdf格式,准备word格式主要是方便公司复制粘贴你的个人信息,pdf格式方便mac电脑打开,同时留给你你设计的空间也更大一些。 文件名称格式为:姓名-求职意向-联系方式,这样方便hr下载好你的简历及时的联系你。 简历编写简历编写中一定要注意的几个问题是: 避免信息缺失:基本的个人信息、联系方式、求职意向一定要写完整、写明确。避免信息错误:不能出现明显的信息错误,比如工作时间、毕业时间、项目起止时间,如果连这些基本的信息都写错,很可能让人对你简历的可信度产生怀疑。错别字问题:这是一个非常低级的错误,一定要对自己简历中的内容来回检查几遍,确保语句通顺,没有错别字,有的时候就是一个小小的错别字让你失去面试的机会,因为会让让别人对你产生做事不认真、不细致的感觉。求职意向一定要写在突出的位置!版头最好放置姓名、联系方式、求职意向这三个最重要的板块,让人一眼就可以注意到,hr每天要处理上百份简历,平均到每一份简历上的时间也就是几秒钟,如果他让他阅读一份花里胡哨、找不出关键信息的简历,那么他可能会直接PASS这份简历。个人基本信息 必填信息:姓名、联系方式、求职意向、年龄/出生年月、毕业院校、专业照片:一定要选择正规证件照,现在拍最美证件照的摄影工作室也很多,比如天真蓝、白海豚、海马体,花上点钱拍一张得体的证件照获得一个宝贵的面试机会,这波不亏,就当是为自己的投资了。就算不放也千万不要选择过度美颜的自拍、生活照、旅游照、非主流大头贴这种奇葩照片,记住你是要去面试找工作的,不是去选美的。现住址(可选):如果你住的离要应聘的公司比较近的话可以写上,因为公司喜欢招聘住在公司附近的人,方便上下班。院校背景 本人是双非二本,自从高考失利后一直没有放弃提升自己,一份漂亮的学历确实能在求职面试的过程中帮你敲开大厂的门。即使没有耀眼的学历,通过努力也可以获得证明自己的机会。 不要再讨论学历重不重要了,在互联网的圈子中,核心是你本身的技术,除非你牛逼到逆天,那啥都不说了,但是大部分都是普通人,学历是一辈子的事情,那些高考能够碾压你的人,进入社会,只要他们愿意,照样能碾压你,你努力,你拼命,别人也不会睡大觉等你,所以,学习是一辈子的事,只要有机会,就要不断提升,你会看到不一样的世界。 工作经历 工作经历按照时间的先后顺序排列,最近的工作写在前头,最好不要出现断档,如果有很明显的断档需要自圆其说,能解释的过去。如果出现长期的断档可能会让hr觉得你能力不行,找工作的周期很长,或者让hr觉得你不稳定,比较爱折腾,进入公司工作一阵子就会离职。 在招聘平台搜索一下你应聘的岗位,了解一下公司对该岗位的招聘需求,hr都是通过关键词去搜索简历,看看出现最多的关键词都有哪些,带入你的工作经历中,适当展开,切记不要只是单纯堆砌和摘抄。 关于跳槽:很多团队很看重人员稳定性,不建议大家频繁换工作,对职业生涯影响很大,如果工作经历很多,可以适当删减,周期短的工作就不必呈现在简历上了。 技能描述 在这个部分可以适当夸张,但是不要过分,吹的天花乱坠,比如你只是使用过一些nodejs的模块,了解一些php语法就在简历上写精通nodejs、php等后端语言,到时候面试官一问就知道你的简历水分有多大了。当你的技术不能达标时,只要你的人品达标,也能为自己加分不少。在面试过程中,用你的真诚和诚信打动面试官,让他觉得你是可塑之才,经过一段时间的锻炼和培养可以很快成长,说不定会给你一个工作机会。但是如果你有太多浮夸的成分,明明是自己不会的技术,还想尽办法在面试官面前展现你有多优秀,会产生适得其反的效果。 关于技能清单和技能关键字可以参考这份技术简历模板: https://github.com/geekcompan... 如果你的简历要投递给有机器(简历分选系统)和不如机器(不懂技术的HR)筛选简历环节的地方,请一定从里边高频关键词中选择5~10个适合你自己的。 项目经历 其实工作经验并不能严格意义上等同于技术水平,有四五年工作年限的人不如刚工作一两年的人这种现象比比皆是,有可能你初入社会,没有工作经验是正常的,但是没有项目经验就是你的问题了,学习技术必须要在项目中实践才可以巩固,网上有海量的资源,大批的开源项目,自己找几个练习项目,把技术点搞清楚,流程理清楚,这不是一件难事。如果连模拟的项目都没有,那怎么证明你的技术能力呢?难道只是在网上看视频么?这样能学得好才怪,更别提找工作了。很多应届的毕业生只是在学校里学了一些理论基础,并没有在项目中实际操作,想着到了公司里再去实践,那样你学到的只能是技巧,还远远达不到技术的水平,技术就是为了解决问题而存在的,多动手才能获得技术,坐等只能浪费时间。 作为前端开发人员,必须要掌握的就是Html5、CSS3、JavaScript这些基础的知识点,你的项目经历中起码要有一个用原生JS编写的PC端网站,证明你对于JS能充分的理解并且使用,有些人觉得原生JS在工作中用的不是特别多,概念又难理解,就算只会使用框架也能够胜任web前端的工作,索性就放弃不学了。在面试过程中JavaScript的部分占了很大的比重,即使工作中使用的频率不高,但是它是前端知识的基础,所有的框架都是基于它来封装的,如果基础不扎实,就没有办法快速学习新知识,在工作中灵活变通。其实面试时,考察这些技能,面试官并不仅仅是考验你的技术,更多的是为了检验你是否真的热爱前端领域,是否对javaScript这门语言有学习的兴趣,是不是对前端技术有求知欲和好奇心,是不是有基本的学习能力和理解能力,这些都是一个开发人员该有的基本素养。 现在市面上有很多的js框架可供选择,而且前端技术发展的很快,说不定马上就有新的框架诞生,我们不可能把所有的都学一遍再来找工作,企业也不是说想招一个全都会的员工,考虑到用人成本和学习成本,只能在招聘的时候通过对基础知识的考查,来看你的基础是否扎实,如果你的JavaScript知识很牢固,那么任何框架对你来说都不是难事,只要花个几天的功夫就可以轻松上手使用,因为他们背后的原理都是相通的,只要掌握了使用方法就可以得心应手。就像学习过C语言的人,再学习Java等语言都是手到擒来的事。在职场上,能力经验到了一定阶段,都不是为了面技术,更多的是为了了解求职者对开发工作的态度,学习理解的深度和沟通的感觉。面试 JavaScript 原生技能,就是这个目的。 目前大部分的前端岗位招聘需求都包括能熟练使用框架,目前比较热门的是vue和react框架,所以针对这两个框架的项目至少一样一个,剩下的可以从当下比较流行的前端技术中选择一个:混合开发、小程序、微信公众号原生JSSDK开发,一般项目的数量控制在4-5个为宜。 自我评价 这个板块主要是针对应届生,有两年以上工作经验的人可以忽略。一定要摒弃之前的套路,写成小作文,或者直接复制粘贴网上的模板,说一些很空的内容,过多的描述你的性格人品、生平履历、兴趣爱好。 在自我评价中,应该将更多的信息呈现留给跟应聘岗位相关的项目经历上,写之前先明确岗位的招聘需求,然后与之一一对应展开,用项目中使用到的技术点证明你的能力符合这个岗位的需求,这样才能引起面试官对你的兴趣,你这个板块也展现了它的价值。 一个比较好的应届生自我评价案例: 大学中系统地学习计算机相关理论基础,大四到公司实习,具有一年的前端开发经验,能快速对接产品需求、前后端工作。对web前端有很大的兴趣并有独立自主学习的能力,具备独立分析和解决问题的能力。业余时间会自主钻研前端技术丰富自己的前端技能栈。代码强迫症患者,注重团队合作,具有良好的沟通能力。 面试问答自我介绍一般面试开始之前面试官都会让你做一下自我介绍,这个过程中主要是考察你的表达能力和临场的应变能力,面试官也是借这个机会迅速的浏览一下你的简历内容,对你有一个大概的了解,拉近与你的距离,打开面试的气氛。 自我介绍是你对整场面试的布局,会直接影响你后面的面试走向,所以自我介绍最重要的功能就是将你的亮点展示给hr,说一些你曾经做过的、符合应聘岗位需求的成功案例,引起他对你的兴趣,让他有进一步了解你的冲动。所以在准备自我介绍前你需要挖掘自己的优势、分析公司的岗位招聘需求,提炼出关键词,了解企业文化,找出自己与之相契合的特质、筛选重组成一份有策略的自我介绍,并将它熟练记忆,控制在1分钟-2分钟,最多不要超过3分钟,不要说与应聘无关的内容。 千万不要只是把简历上的内容复述一遍,这样毫无意义,面试官更想通过自我介绍了解你简历之外的亮点,能让他对你感兴趣。如果在面试的过程中感到紧张,忘记准备好的内容,平时就要多加练习,跟身边的朋友或自己对着镜子,直到可以流利的将自我介绍说出来为止。这个环节的核心要回答你的优势,比如说你掌握的技术和熟练使用的框架,重点就是要让面试官记住你,一定要放松、自然、自信,不要让人感觉你只是在机械的背诵,适当的停顿,时不时的跟面试官有眼神的交流,人在紧张的时候就会有很多下意识的小动作,一定要克制自己不要看天花板,不要眼神飘到别的地方,更不要翻白眼。 自我介绍包含内容: 个人基本介绍:简单罗列你的个人信息即可,如姓名、毕业院校、所学专业、求职意向。工作经历:这个部分主要是针对有相关工作经验的人,可以简单介绍我曾在XXX公司担任XXX一职,主要负责的是XXX内容,最后取得了XXX成果。通过分析企业的招聘需求,用自己具体的工作经验向面试官证明你具备应聘该岗位的能力,主要就是讲我做了什么,并且获得了什么成果,这个环节不用讲的太具体,如果面试官感兴趣会在之后的环节跟你讨论相关细节。切记不要只是堆砌一些形容词如:乐于助人、活泼开朗、勤奋努力,没有具体事例证明就显得毫无根据。个人经历:如果是刚毕业的应届生,没有工作经验,可以说一些自己在学校中比较亮眼的经历,比如参加过哪些计算机相关的比赛,跟随导师参与过哪些开发项目,大四的时候在公司实习,编写过哪些案例,证明你有做好这份工作的潜力和态度。或者说一些自己与众不同的特长,让面试官觉得你是一个充满活力、积极向上的年轻人,公司喜欢这样的新鲜血液加入,来带动团队的工作氛围。从你的这些过往经历中也可以发掘可以匹配工作岗位的特质,有的时候会获得意想不到的效果。说一下你的优缺点这个问题也是一个双刃剑,一定要说自己真正擅长、并且能给公司带来切实利益的方面,不要说的太跑题,比如我很有运动天赋、我会演奏乐器,也不要说的太空,比如我很诚实很勤劳,你可以结合行业属性以及项目经验,比如项目管理、项目推动、专业优势去回答。展现你的综合素质,比如我js基础很扎实,平时喜欢关注前端领域的新技术,遇到新的框架或者没接触过的知识可以很快上手,有很强的学习能力和自我驱动力。 说缺点的时候切记你所叙述的经历不要对眼前的应聘造成不良影响,尽量说一些不会影响到工作的缺点,但是不要把行业的基本素养当成缺点来说,比如我有强迫症,我写代码必须格式要对齐,做技术的人都知道这是前端开发的基本规范,虽然我们知道聪明的面试者会把缺点当成优点来说,但是千万不要聪明反被聪明误,戏太过了就适得其反。人无完人,每个人都会有缺点,说一些别人可以接受的缺点不会给你的面试造成太大影响,尽可以放心、真诚的展示真实的自己。 这个问题没有标准答案,只能结合自己的实际情况进行回答,并且在每次面试后根据面试官当场的反馈及面试结果不断完善,从而找到一个“完美”的答案。 面试中的送命题你为什么离开上家公司?这是一个看似稀松平常的问题,其实特别致命,如果回答得不好很可能之前的所有努力统统白费。马云爸爸对于这个问题曾给过一个一针见血的回答:为什么要离职?要么钱给的不够,要么心受委屈了。道理虽然是这么个道理,但是对于我等屁民以下这些作死的回答一定要避免,即使它就是真实原因:薪资太低、福利待遇太差、经常加班、管理制度太严格;领导及同事太难相处;公司规模太小,没有成长空间; 面试官也是公司员工,你觉得有什么离职原因是他们不知道的?大部分的员工上班一半的时间都在考虑要不要离职。所以面试官主要是想通过这个问题了解下你之前的工作情况,是主动离职,还是被动离职,你的技术和能力能否胜任这份工作,你对工作有没有足够的热情和责任心,是不是遇到压力就会想离职,能不能在一个城市一个岗位稳定发展,还是三天两头就想跳槽。 回答这个问题的时候一定不要表达出自己对上家公司的负面情绪,避免说前东家不好,领导不好,任何负面评价,尽量表现出是自己的原因,而非公司,对上家公司要抱有感恩之心。可以从客观原因出发,比如上班地点离家太远,很多时间都浪费在了通勤的路上,我个人还是希望把更多的时间和精力放在工作上,所以想寻找一份新的工作机会。 大公司or小公司有些面试官会问你怎么看待大公司和小公司,你更青睐哪一种工作机会,其实这也是很多同学比较近纠结的一个点,我们选择工作时有三个关键因素:薪资、平台和成长,在我看来工作的前三年优先级排序是这样的:成长>平台>薪资,很多大公司为了平薪,人员流动不会特别大,薪资待遇不会实时根据市场更新,它需要保证新员工跟之前进入公司的老员工薪资持平,所以薪资方面不会特别有竞争力,但是在你进入到公司之后会给你一段适应期,有技术总监去带你学习,不会让你马上上手写项目,这样你会有更多时间思考和整理,尤其对于工作时间不长的同学来说,这样梳理知识体系的机会非常难得,可以让你学习的东西更深更系统,把学习经验转成实践能力。 并且在大公司遇到优秀同事的概率更大,和优秀的人一起工作会激励你不断向上,你可以在学习和模仿中慢慢进步,和优秀的人共事才会有危机感,学习别人工作、思考的方式,让自己更快的成长,有些改变会让自己受益终身。所以我的建议是,如果有加入大公司工作的机会,一定要好好把握,不要只着眼于当下,将自身的发展放在首位。 一开始的选择是非常重要的,工作的黄金时间稍纵即逝,但是选择的前提是你要有可供选择的机会,如果你都没有机会更何谈选择,当很多机会摆在我们面前时,一定要认真思考什么是我们真正想要的,不要追随别人的脚步,觉得大部人的选择就是对的,我们不能保证每一次选择都是正确的,但是我们能保证不后悔,遇事要冷静,多思考,最后跟着自己的心做决定。这里说的选择不仅仅是选择去哪个公司,从事什么方向,还有与什么样的同事工作,选择什么样的leader,甚至是生活中的事情。 描述项目经历项目经历是我们作为技术人员,简历中最为重要的一个模块,也是企业最为关心和重视的一个部分,通过项目经历可以知道你的工作经验和技术能力是否符合公司的招聘需求。面试过程中有一个绕不开的环节就是让你介绍一下你的项目经历,常见的问法就是请你说一下你最近做过的一个项目,都用到了哪些技术,团队规模多大,人员是怎么分工的,你在项目中担任的角色是什么,最后项目取得了什么样的成果。 面试官没有超能力,他在看你简历的时候是没办法核实你项目的真实性的,这是你做的项目,而且你接手的时间肯定会持续至少三四个月,所以根本无需紧张,你是对于这个项目最了解的人,而面试官只能根据你说的内容作出判断,如果在你的回答中找不出明显的漏洞那就只能算你真的做过。 想要回答好这个模块有几个关键点需要注意一下,首先就是在回答问题的过程中一定要流利,对于你写在简历上的内容一定要倒背如流,如果你在表述的过程中磕磕绊绊,嗯嗯啊啊,那么就会给面试官留下一个非常不好的印象,起码觉得这个人的表述能力有问题,面试是一个考察综合能力的过程,如果你的沟通能力有问题,那么很可能会影响你之后的团队合作。如果对于一些关键点比如项目名称,起止时间,项目中用到的技术点都说错了,那么项目经历的可信度就非常低了,面试官会抓住这些漏洞深究,如果你不能给出合理解释,很可能让面试官觉得你诚信有问题,简历造假,这是最坏的情况,一般这种就直接出局。 另外面试前需要熟悉面试公司的招聘需求,如果该公司明确说了需要react方向的前端人员,你却大谈vue,那么纵使你说的天花乱坠也引不起面试官的兴趣,然后最后面试官问你有没有使用过react,你却说不好意思,没用过,那面试直接结束,这等于浪费双方的时间。所以提前做功课,在叙述的过程中将公司的招聘需求穿插进去,不露痕迹的说一些面试官想听的点,给面试官后续的提问做铺垫,但是这个时候你是在介绍项目,不是在说明亮点,所以不需要详细展开说,一旦你详细说,面试官可能会觉得你啰嗦又拖沓。 比如针对这样一则招聘需求,你在进行项目描述的时候可以说: 我上一个项目是一款移动端的webApp,主要为用户提供影讯查询及在线购票等一站式电影服务,采用vue-cli脚手架搭建开发环境,使用flex弹性盒布局及rem技术自适应适配不同分辨率的移动端设备,数据请求采用axios发送ajax,配合后端人员完成页面数据的读取和加载,最后采用webpack打包上线。接下来面试官会针对你的回答展开问一些技术问题,如果你在描述项目的过程中埋下提前准备好的知识点,面试官很可能会被你带着走,引到你熟悉的技术领域,在有限的时间内回答准备好的问题点,被问到其他问题的几率就少了。如果你没有把握住这个环节就相当于把宝贵的提问权全权交给了面试官,那么你接下来的问答的风险就比较大了。所以在面试前一定要做好充足的准备,你有足够的时间去排兵布阵,而面试官只能在短短的时间内针对你的表现作出反应,所以他要提取出他比较关心的、实际工作中会用到的技术点来验证你的能力,看看你是否真的了解并且实际应用过这些技术,还是仅仅停留在了解概念,在网上查阅了一些资料这个阶段。 在接下来的回答中一定要自信、积极、流利,针对面试官的问题不能只是简单的一句话回应:了解、做过、不知道,这个时候千万不能惜字如金,如果你吝于回答问题,那么面试官也会吝于给你offer或者高薪。针对每一个问题要适当的展开,宁可只说自己熟悉的内容,也不要为了拖时间说一些自己不了解的知识点,因为如果你要是抛出了一个你并不熟悉的概念,面试官很可能会继续提问细节,比如之前面试官问我:请你说一下vue中路由模式,我回答有hash路由和history路由,hash路由会在url地址栏中显示一个"#",如果不想要显示这个"#"可以使用history模式,但是需要后端人员配合我们去做配置,然后面试官就顺口问了:为什么需要后端人员去做配置,后端人员怎么去做配置?而我当时功课没做足,对于这块概念没有准备,所以这部分的风险你要自己承担。 如果你有提前了解过diff算法,就可以在回答:react中一般在哪个生命周期中请求数据?的时候巧妙的引出diff算法和fiber算法,然后在面试官询问关于算法问题时,针对两个算法的原理和异同稍作展开,借机说一下自己平时会关注一些最新、最前沿的技术,会不断深入了解一些框架和技术的底层实现,而不仅仅是停留在使用层面,整个过程就很自然流畅了。时间控制在半分钟内,回答内容根据面试官的反应酌情控制,如果面试官给你了积极的反馈就可以继续展开,如果被面试官打断,就说明这不是面试官想了解的关键点,不是项目必备的技术。 面试官没有义务挖掘你的亮点,一定要自己主动去提出一些自己使用的比较熟练,并且目前比较热门的技术,跟公司的招聘需求对口,在一些开放性的问题中适当的引出,作为自己的加分项。面试官很忙,一定要在最短的时间内充分的展示自己,不要只等着面试官去提问。 你在项目中遇到哪些问题,如何解决?这一块比较抽象,根据你自己的项目来,着重讲你熟悉、有把握的模块,一般面试官都会从中抽取问题来向你提问,看看你对前端技术的掌握程度以及遇到难题时解决问题的能力。回答这类问题,基本原则是:通过失败说成功,不要只强调结果,更要多描述你解决问题的过程,说一下你的收获和成长,同样的"说一次成功的职业经历"也是类似的回答思路。 在面试过程中要保证关键的技术点对答如流,即使过程中被问到了几个不熟悉的知识点也不用慌张,只要如实回答不知道就好了,一定不要含糊其辞,更不能乱说一通,因为前端技术更新很快,不断的推陈出新,我们不能保证将所有的知识都囊括,如果遇到回答错误或者回答不上来的问题要虚心向面试官请教,好的面试官会抛出问题跟你探讨,他们很愿意去帮助新人,无私分享,得到帮助后要记得说:"谢谢,回去之后我会着重把这块知识加强一下,如果公司的项目中需要用到这样的技术点,我会在短时间内学习、运用好"。给面试官留下一个勤学好问的好印象,不要仅仅把它当成一次面试,这更是一次学习和提升自己的机会。整个过程应该是双向的、正面的,有的时候你使用到的一些新技术面试官可能没有了解过,面试官在问求职者的时候,他自己也不见得多精通,可是他就是要面试这类内容。其实,他面试你这类题,并不是希望你多了解,掌握的多好。主要是看你对前沿技术的关注度和对新技术的求知欲。 如果你能将面试当成是一次技术探讨,那就可以更加从容的去应对。很多时候面试官就是技术总监,要不就是你以后一起工作的同事,面试过程中给你传递出来的感觉非常重要,很可能就决定了以后工作的氛围和模式,对于你之后选择公司、工作环境和工作伙伴提供了一个很有价值的参考。 对于Web前端来说,是一个更新特别快的行业,几乎每年都有不少新的技术,作为一个Web前端开发人员,如果对新技术不敏感,对新技术没有学习的欲望,那么可能很快会被行业淘汰。那么,企业招这样的求职者有什么用?所以技术面试中一定要凸显出自己有很强的求知欲,对新技术是非常感兴趣且愿意去不断学习,公司一般都不会拒绝爱学习的人。这一点对于应届毕业生或者没有相关工作经验的人来说尤为重要,这个时候面试官看中的不是你的技术掌握的如何,而是你有没有发展的潜力,他会更想了解你的软实力,比如你的沟通能力、处事能力、学习能力、解决问题的能力,这些都是在面试过程中通过和你的聊天一点一点去发掘的,所以如果你的技术不占优势,你就要抓住机会向面试官展示你这方面的软实力。 但是如果你的回答中出现了明显的技术漏洞,比如你说熟练使用vue框架却连vuex的流程或者vue的生命周期函数这种基础性概念都回答错误,这时候就比较危险了,面试官会直接怀疑你这个项目的真实性,会通过更多问题确认你的技术能力,到底是技术能力差还是框架根本就没使用过,不会让你在面试中企图蒙混过关。 ...

September 10, 2019 · 1 min · jiezi

常见的面试问题CSS已知高度写出三栏布局

问题:已知高度,写出三栏布局,其中左右两栏宽度各位200px,中间自适应 回答:效果示例解决方案(1)浮动;(2)绝对定位;(3)弹性布局;(4)表格布局;(5)网格布局。 拓展问题:(1)每个解决方案的优缺点(2)他们之间的比较,假设高度去掉,那种方法还能适用或者不适用(3)解决方案的兼容性,哪个更适用在实际项目中 拓展回答:(1)A:缺点:浮动脱离文档流,所以使用的时候要清除浮动;优点:兼容性比较好B:缺点:绝对定位布局脱离文档,它的子元素也会脱离文档流;优点:使用快捷,不容易出现问题,兼容性也比较好C:弹性布局是为了解决上述问题出现的,比较完美的一个D:表格布局比较繁琐,不利于SEO优化;表格布局兼容性比较好,IE8不支持flex,但支持表格。当其中的一个单元格超出的,两侧单元格也会同时增高,根据场景决定。E:网格布局作为一个新技术,可以实现很多复杂的布局,代码量简化很多。(2)flex布局和表格布局。浮动布局因为左侧有遮挡,所以没有超出的文本会在中间出现,超出部分没有遮挡会再左侧出现。 变通:三栏布局两栏布局左右宽度固定,中间自适应左宽度固定,右自适应上下高度固定,中间自适应右宽度固定,左自适应/上高度固定,下自适应/下高度固定,上自适应公共样式:设置大小盒子的高度为 100px,左右(left 和 right)的 div 宽度固定为 200px, 并分别给三个盒子设置不同颜色用来区分。 * { padding: 0; margin: 0;}.layout { height: 100px; margin-top: 20px; margin-bottom: 20px; overflow: hidden;}.layout div { height: 100px;}.layout .left { width: 200px; background-color: blue;}.layout .center { background-color: yellow;}.layout .right { width: 200px; background-color: red;}(1)方案一:浮动center 的 div 需要放到后面(其余方案都不需要更改 Html 顺序),对左右 div 使用 float:left 和 float:right,float 使左右两个元素脱离文档流,中间的正常文档流中。 .float .left { float: left;} .float .right { float: right;} <section class="layout"> <article class="float"> <div class="left"></div> <div class="right"></div> <div class="center"></div> </article></section>(2)方案二:绝对定位将 left、right 和 center 的 div 都设置 absolute 脱离文档流,给 center 的 div 设置左右两边距离 200px (即左右两边盒子的实际宽度)。 ...

July 15, 2019 · 1 min · jiezi

Nodejs-入门你需要知道的-10-个问题

本文为您分享「Node.js 入门你需要知道的 10 个问题」这些问题可能也是面试中会被问到的,当然问题不仅仅是这 10 道,因此,最近开源了一个新项目 Nodejs-Interview-Questions 专注于 Node.js 面试题的分享,提供了中英文版本,您也可以在线预览: https://interview.nodejs.red/ Q1: 什么是 Node.js?Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它是一个开源和跨平台的服务端应用程序。任何人都可以编写 JavaScript 代码来开发 Node.js 应用程序。它可以运行于 Microsoft Windows、Linux、 或 OS 系统。 Node.js 不是一个新的语言,也不仅仅是一个基于 JavaScript 的框架,它基于 Chrome 的 JavaScript 运行时,因此代码的编写和执行与浏览器非常相似。 Node.js 功能 以下是 Node.js 的一些重要功能 高度可扩展Node.js 使用的单线程模型且采用了事件循环架构,使得编写可扩展性高的服务器变得既容易又安全。一些传统的服务端语言会创建多线程来处理请求,通常创建线程都是有系统资源开销的,因此也会有一些限制,而 Node.js 只创建一个线程来处理更多的请求。 事件驱动和异步Node.js 的所有 API 都是异步的。这意味着下一个请求来临时可以直接处理而不用等待上一次的请求结果先返回。 No BufferingNode.js 从不缓冲任何任何数据,参见What is No-Buffering feature of Node.js 我们许多人可能会对 Node.js 感到困惑。它不是像 Apache 这样的 Web 服务器。Node.js 提供了一种新方法来执行我们的代码。它是 JavaScript 的运行时。Node.js 提供了创建 HTTP 服务器的方法,我们可以在这之上托管我们的应用程序。 ...

July 11, 2019 · 3 min · jiezi

面试官教你写简历有点干慎入

一、前言“为什么简历投出去总是石沉大海,没有回应?!”,无论你技术水平如何,如果你遇到了这类问题,那么这篇文章就是为你准备的。(3000余字,有点干慎入) 本文转自:https://juejin.im/post/5d1dc5...

July 8, 2019 · 1 min · jiezi

职场经验之15个你必须知道的Python面试题

介绍随着人工智能、机器学习、深度学习的发展,这个领域也正在不断的进入人们的眼帘,并且带来了很多、很大的工作机会,随着这些机会的诞生,Python在这个机会中也在不断的发展壮大,因为Python不像其他语言一样复杂,Python简单易学容易被人们接受。并且这并不是我一个人在这里瞎说就可以证明的,在2019年6月PYPL流行程序设计语言中,Python排在第一位占到了28.08%,是第二名Java和第三名Javascript的和,并且还在不断的上涨中。 而且在另外一个编程语言TIOBE指数排行榜中,Python排在了第三位,排在第一位和第二位的是Java和C语言。并且排行榜还预测认为Python会在3-4年取代C和Java,而原因是软件工程行业正在不断的蓬勃发展,吸引了很多新人进入该领域,Java和C对于初学者来说一些困难,而Python相对于这两种语言来说,太过于简单了。 站在这里,我认为现在正在看这篇文章的你想要找一份有关于Python的工作,不然你也不会点进来不是,你可能是一个Python的初学者,或者说已经在Python工作岗位上已经工作过了,但是如果你还需要找一份Python的工作的话,你可能需要证明你知道如何使用Python。以下是一些涉及与Python相关的基础技能的问题。重点放在语言本身,而不是任何特定的包或框架。 某种程度上来说,我还没有遇到过这么难的面试,如果你能轻松的答对这些问题,找到正确的答案,那么就快去找份工作吧。 本教程不是固定指南本教程不打算涵盖所有的工作场所因为不同的雇主会以不同的方式向你提出不同的问题; 他们会有各自的习惯; 他们重视的内容也是不同的。他们会以不同的方式测试你。有些老板会让你坐在电脑前,要求你解决简单的问题; 有些会让你在白板前站起来做类似的事; 有些人会给你一个需要让你回家解决的问题,方便节省他们的时间;而还有些人会和你谈谈。 而对程序员的最佳测试实际上就是编程。使用简单的教程测试是一件困难的事情。因此,为了面试过程中的加分,请确保你真的掌握了解决问题的方法。如果你真的很明白这些方法,那么你就可以利用解决问题的方法,使你获得胜利。 同样的,对于软件工程师的最有效的测试实际上是工程学。本教程是关于Python作为一种语言。能够设计高效,有效,可维护的类层次结构来解决小众问题是非常了不起的,并且是一项值得追求的技能,但是这就超出了本文的范围。 本教程不符合PEP8标准。这是有意的,因为如前所述,不同的老板将遵循不同的习惯。你需要适应公司的文化。因为实用性胜过一切。 本教程另一个不足之处是不够简洁。我不想只是向你提出问题和答案,而是希望有些事情可以解决。我希望你能够理解,或者至少理解的足够好,这样你们对任何有问题的话题能够进一步的去解释 问题1Python到底是什么,你可以在回答中与其他技术进行比较(加分项)。 回答以下是几个要点: Python是一种解释型语言。这意味着,与C语言及其变体等语言不同,Python不需要在运行之前进行编译。其他解释语言包括PHP和Ruby。Python是动态类型的,这意味着当你声明变量或类似的变量时,你不需要声明变量的类型。你可以做先一些事情如:x=111,然后再将x="I'm a string"这样并没有错误Python非常适合面向对象的编程,因为它允许类的定义以及组合和继承。Python没有访问修饰符(如C ++的public,private),对于这一点的理由是因为‘我们都是成年人’在Python中,函数也是一个类对象。这意味着可以将它们分配给变量,从其他函数返回并传递给函数。类也是一个类对象编写Python代码可以很快,但运行它通常比编译语言慢。但幸运的是,Python允许包含基于C的扩展,因此瓶颈可以被优化掉并且可以经常被优化。这个numpy包就是一个很好的例子,它真的非常快,因为它处理的很多数字运算实际上并不是由Python完成的Python可用于许多领域 - Web应用程序,自动化,科学建模,大数据应用程序等等。它也经常被用作“粘合”代码,以使其他语言和组件发挥得很好。Python使得困难的事情变得容易,因此程序员可以专注于重写算法和结构,而不是关注底层的低级细节。 为什么这很重要:如果你正在申请的是Python职位,你应该知道它是什么以及为什么它如此酷。 问题2填写遗漏的代码: def print_directory_contents(sPath):"""这个函数接受一个目录的名称 并且打印该目录中的路径文件包含目录以及目录中的任何文件 这个函数类似于os.walk。但是请不要使用这个模块系统。输入你的答案我们对你使用嵌套结构的能力很感兴趣"""fill_this_in 回答def print_directory_contents(sPath):import os for sChild in os.listdir(sPath): sChildPath = os.path.join(sPath,sChild)if os.path.isdir(sChildPath):print_directory_contents(sChildPath)else:print(sChildPath) 特别注意与你的命名约定保持一致。如果在任何示例代码中都有明显的命名约定,请坚持下去。即使它不是你通常使用的命名约定递归函数需要递归和终止。确认你真的了解这是如何发生的,这样你就可以避免无底的调用堆栈我们使用该os模块以跨平台的方式与操作系统进行交互。你可以说,sChildPath = sPath + '/' + sChild但这不适用于Windows熟悉基本的软件包是非常值得的,但是不要为了记住所有的东西而头痛,百度or谷歌是你在工作中遇到需要包的问题的时候的朋友!如果你不理解代码应该做什么,请提出问题保持简单,笨蛋!为什么这很重要:显示你的基本操作系统交互内容方面的知识递归是非常有用的问题3查看下面的代码,写下A0,A1,...An的最终值。 A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))A1 = range(10)A2 = sorted([i for i in A1 if i in A0])A3 = sorted([A0[s] for s in A0])A4 = [i for i in A1 if i in A3]A5 = {i:i*i for i in A1}A6 = [[i,i*i] for i in A1] ...

June 28, 2019 · 6 min · jiezi

2019年Android开发者常见面试题二

上一篇主要介绍的是Java相关的面试题,其实已经重复的说过,在Android面试中,Java相关的面试大概要占到20%,甚至是大于20%,所以不得不显得尤为重要,毕竟目前的开发中,Java语言开发毕竟还是占到绝大部分的。 这篇继续Java相关的面试题分享: 问题 8:抽象类的意义答案【答案不唯一,可自己衡量】:抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。具体分析如下: 1.因为抽象类不能实例化对象,所以必须要有子类来实现它之后才能使用。这样就可以把一些具有相同属性和方法的组件进行抽象,这样更有利于代码和程序的维护。 比如本科和研究生可以抽象成学生,他们有相同的属性和方法。这样当你对其中某个类进行修改时会受到父类的限制,这样就会提醒开发人员有些东西不能进行随意修改,这样可以对比较重要的东西进行统一的限制,也算是一种保护,对维护会有很大的帮助。 2.当又有一个具有相似的组件产生时,只需要实现该抽象类就可以获得该抽象类的那些属性和方法。 比如学校又新产生了专科生这类学生,那么专科生直接继承学生,然后对自己特有的属性和方法进行补充即可。这样对于代码的重用也是很好的体现。 所以,Java中抽象类对于代码的维护和重用有很好的帮助,也是Java面向对象的一个重要体现。   问题 9:抽象类与接口的应用场景答案【答案不唯一,可自己衡量】:应用都是基于规则的应用,也就是基于语法的应用,我们可以根据语法上的异同点来总结抽象类和接口的应用场景 相同点没有什么可说的,我们从不同点下手。 1、第一个重要的不同点抽象类中不一定都是抽象的方法,也可以有具体实现的方法,这样就可以把大家公用的方法提升到抽象类中,然后具体的方法可以留给子类自己实现(此处经典的应用,模板方法设计模式)。所以抽象类可以更好的实现代码的复用 2、另一个重要的不同就是类可以实现多个接口。接口和抽象类的概念不一样。这个可以理解为接口是对动作的抽象,抽象类是对根源的抽象(即对本质的抽象与其他类的本质不同)。 抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它。 所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。 当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。 另一个重要的概念就是多态,多态通过分离做什么和怎么做,从另一个角度将接口和实现分离出来。多态不但能够改善代码的组织结果和可读性,还能创建可扩展的程序----即无论在项目最初创建时还是在需要添加新功能时都可以“生长”的程序。由于接口更关注于动作的实现,多态主要是分离“做什么”和“怎么做”,所以接口的另一个重要的应用就是多态的实现(当然抽象类也可以实现多态,但是接口更加合适)。 抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。   10:抽象类是否可以没有方法和属性答案【答案不唯一,可自己衡量】:答案是肯定的,可以。 抽象类中可以没有抽象方法,但有抽象方法的一定是抽象类。所以,java中 抽象类里面可以没有抽象方法。注意即使是没有抽象方法和属性的抽象类,也不能被实例化。   问题 11:接口的意义答案【答案不唯一,可自己衡量】:1、定义接口的重要性:在Java编程,abstract class 和interface是支持抽象类定义的两种机制。正是由于这两种机制的存在,才使得Java成为面向对象的编程语言。 2、定义接口有利于代码的规范:对于一个大型项目而言,架构师往往会对一些主要的接口来进行定义,或者清理一些没有必要的接口。这样做的目的一方面是为了给开发人员一个清晰的指示,告诉他们哪些业务需要实现;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发效率。 3、有利于对代码进行维护:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。可是在不久将来,你突然发现现有的类已经不能够满足需要,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。 4、保证代码的安全和严密:一个好的程序一定符合高内聚低耦合的特征,那么实现低耦合,定义接口是一个很好的方法,能够让系统的功能较好地实现,而不涉及任何具体的实现细节。这样就比较安全、严密一些,这一思想一般在软件开发中较为常见。   问题 12:泛型中extends和super的区别答案【答案不唯一,可自己衡量】:<? extends T>限定参数类型的上界:参数类型必须是T或T的子类型 <? super T> 限定参数类型的下界:参数类型必须是T或T的超类型 总结为: <? extends T> 只能用于方法返回,告诉编译器此返参的类型的最小继承边界为T,T和T的父类都能接收,但是入参类型无法确定,只能接受null的传入 <? super T>只能用于限定方法入参,告诉编译器入参只能是T或其子类型,而返参只能用Object类接收 ? 既不能用于入参也不能用于返参   问题 13:父类的静态方法能否被子类重写答案【答案不唯一,可自己衡量】:首先答案是不能! 这个问题有两个关键字,一个是静态方法,一个是重写。 我们来先说说重写,可能很多初学的朋友分不清重写和重载的区别。 重写:子类继承父类后,定义了一个和父类中的一模一样方法,这个一模一样是值方法名和参数的定义一模一样。这时候子类要实现这个方法,就称为对父类方法的重写。 重载:子类继承父类后,定义了一个和父类中相同名字的方法,但是参数不一样(必须),实现也不同(可选),这就是重载。 静态方法:java中,static修饰符修饰的方法就是静态方法。所谓静态就是指:在编译之后所分配的内存会一直存在(不会被回收),直到程序退出内存才会释放这个空间。 在java中,所有的东西都是对象,对象的抽象就是类,对于一个类而言,如果要使用他的成员(类中的属性,方法等),一般情况下,必须先实例化对象后,通过对象的引用才能访问这些成员。 但是,如果要使用的成员使用了static修饰,就可以不通过实例化获得该成员。 就比如,现在有个桌子,我想吃苹果,一般情况下,我需要先拿个盘子(对象的实例化)去装苹果才能吃到苹果,现在有个苹果直接放在桌子上(用static修饰过的静态方法),这样我就可以直接从桌子上拿到苹果。可能大家会有疑问,既然静态方法(能不通过实例化就使用成员)这么方便,为什么不都使用静态方法。 大家回到static这个修饰符的功能定义:所谓静态就是指:在编译之后所分配的内存会一直存在(不会被回收),直到程序退出内存才会释放这个空间。 java的回收机制会定时的回收已经使用过的对象的内存来释放内存给应用程序。如果全部都是静态变量和静态方法,内存都被占用了,java程序哪里还有运行的空间呢?就好比,你回家就看到桌子上摆满了苹果,那你买的梨子就没地方放了。 现在回到题目中来,父类的静态方法能不能被重写。答案是不能。 因为静态方法从程序开始运行后就已经分配了内存,也就是说已经写死了。所有引用到该方法的对象(父类的对象也好子类的对象也好)所指向的都是同一块内存中的数据,也就是该静态方法。子类中如果定义了相同名称的静态方法,并不会重写,而应该是在内存中又分配了一块给子类的静态方法,没有重写这一说。   问题 14:进程和线程的区别答案【答案不唯一,可自己衡量】:1. 定义进程是一个术语,用来描述一组资源和程序运行所需的内存分配。对于每一个被加载到内存的exe,在它的生命周期中操作系统会为之创建一个单独隔离的进程。一个进程的失败不会影响其他的进程。每个进程是由私有的虚拟地址空间、代码、数据和其他各种系统资源组成的。 ...

June 27, 2019 · 1 min · jiezi

2019年Android开发者常见面试题一

大部分开发者进入公司,一个必备的环节就是面试,只有通过面试,才能知道求职者是否符合公司的要求,也只有通过面试,求职者才能有幸进入到企业里工作,那么怎么才能提高面试的成功率呢?对于开发者而言,显然是技术的掌握水平,由于技术的面非常广,我们并不可能全部的都掌握,但是,多多少少我们都有所了解,准备的越充足,意味着成功率也能大大的提高。 对于Android的面试,我们可以发现,要求的是越来越多,越来越严苛,面试如同造航母,已经远不如14年15年那么好找了,对于一些点,不仅仅要会用,一些原理源码性的东西,也必须得去研究掌握。 接下来的几篇文章,主要罗列一下Android面试中常见的点,希望可以帮助到大家,这一篇主要针对java中常见的点。 问题 1:java中==和equals和hashCode的区别答案【答案不唯一,可自己衡量】:equalsequals的作用是判断两个对象是否相等。 通过判断两个对象的地址是否相同来判断。 ====一般用于基本类型数据的比较,判断两个值是否相同 也可以用于类的比较,同样也是比较两个对象的内存地址。(就是两个对象都是同一个对象) 所以在equals没覆盖的情况下,==和equals是等价的。 ( 我们可以通过覆盖equals来让相同内容的对象来返回true。) hashcode能够高效率的产生一个离散的int值。 通过hashCode()来计算出两个对象的hash值然后进行比较。 但是会出现不同的类也会有相同hash值,所以这不是安全、不可靠的。  ####总结总的来说就是一般情况equals和==是等价的。 如果两个对象相等,则他们一定是equals返回true。 如果两个对象的hashCode相同,也不能 100%保证它们是相同的。   问题 2:int、char、long各占多少字节数答案【答案不唯一,可自己衡量】: 问题 3:int与integer的区别答案【答案不唯一,可自己衡量】:1 Integer是int的包装类,int则是Java的一种基本数据类型 2 Integer变量必须实例化之后才可以使用,而int变量不需要 3 Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 4 Integer的默认值是null,int的默认值是0   问题 4:谈谈对java多态的理解答案【答案不唯一,可自己衡量】:打个比方 父亲person有行为这个方法,里面包括几个动作:吃饭,睡觉,走路 父亲有三个儿子,三个儿子都继承了父亲的行为方法,所以三个儿子都有吃饭,睡觉,走路这些动作,但是三个儿子又分别有自己的动作--大儿子A会弹吉他,二儿子B会唱歌,三儿子C会打鼓 ... 1.Person person = new A(); 不是父类对象指向子类引用而是父类引用指向子类对象 2.这个对象不能调用子类A特有的弹吉他方法--person.guitar(); X 3.如果仅是这么写程序,还不是多态,记住实现多态的三要素:继承 重写 父类引用指向子类对象 4.之后,如果你调用persion.guitar(),此时在代码的编译阶段,persion调用的仍然是自己的guitar(),不是儿子的。而当程序运行时,就是java XXX, persion调用的却是儿子的guitar()。这个动态的过程才是多态 。 Person person;           //父类的引用指向子类的方法;           person = new Student(); ...

June 26, 2019 · 2 min · jiezi

一位大佬的亲身经历总结简历和面试的技巧

分享一篇很不错的文章!本文作者曾经写过《Java Web轻量级开发面试教程》和 《Java核心技术及面试指南》这两本书。我觉得了解简历和面试的技巧可以帮助你更好的去学习重要的知识点以及更好地去准备面试以及面试,说实话,我个人觉得这些东西还挺重要的。原文地址:https://dwz.cn/P6G0F6jH 作者:hsm_computer 文末有公众号二维码,欢迎关注获取笔主最新更新文章,并可免费获取笔主总结的《Java面试突击》以及Java工程师必备学习资源。 在18年底到19年3月,陆续面试了几家公司,有成有不成的,最终进了一家比较满意的知名外企。在本文里,我将介绍我这段时间里更新简历和面试的相关经历。可能面试相关的一些方法,大家能从我之前的博文里看到,但在本文里,大家更能从相关实战性的例子中进一步体会到面试技巧的使用方法。 1 刚开始一定得通过一些小公司练手 我打算要换工作,就更新了简历,这时就有不少猎头来找我,刚开始,我不敢面大公司,只是去些规模小的互联网公司。因为一方面,当时我很久不面试了,面试实战技能难免有些荒废,另一方面,离我之前的面试毕竟过了一阵,我不知道当前市面上哪些技术比较值钱。 而且,我在面试前会准备一些针对项目和值钱技术的说辞,这些说辞总要经过实战来演练下。事实上,在和小公司沟通的过程中,进一步提升了我的相关表述能力和相关话术,相当于用小公司来踩坑。相反,如果用大公司的面试失败来换得这些进步,就未免有些可惜了。 所以,我和猎头明说,我想去大公司,但之前,你得让我到一些小公司去练练手,同时,我面试好以后,会告诉你这些小公司的面试题和相关技巧。这样一些猎头就肯先推荐我去小公司了。 2 投简历前,微调简历描述的技巧 1 公司A在职位介绍里,提到对分布式组件有要求,尤其是负载均衡集群。这块技术我在通用版简历中只是笼统写了下,有nginx+lvs实际经验,既然这个公司有类似要求,我就在简历中细化了这块:用到了lvs+keepalive集群和nginx,它们分别工作在4层和7层,(后省略相关技术使用点描述),最后介绍下效果:用了这个负载均衡组件外,我们系统承受住了xx的并发量。 2 在公司B的职位介绍里,提到了高并发的需求,那么我就着重写了我压测的相关经验,包括压测环境怎么部署,用到哪些组件,再同时列了些压测后改善系统性能的若干方法。 3 公司C比较小,需要一位比较资深的能带团队的架构师,那么我在简历中除了介绍技术外,还着重写了带团队的若干经验。 对大家来说,其实面试任何一家公司,它们的职位要求绝对不可能一样。这时大家最好是微调下简历。这种微调,绝对不是胡乱编写,比如上个项目干的是测试,简历中改成开发。而是挖掘下侧重点。 就像我之前给出的案例,对于分布式技术,我上个项目确实用过,但简历中篇幅有限,我不可能面面俱到地写,但既然你们公司有要求,那么我就针对性地详细介绍。 其实这块谈不上是面试技巧,而是语文技巧。首先是审题,理解职位介绍的主要内容,然后再像写作文那样,详细扩展下上个项目里相关技术点。甚至这只是中考语文的考点而不是高考的,但我自己的体会是,在这段时间里针对每份职位介绍我都做了微调,所以基本上是投一份简历就能得到一次面试机会。 3 在换工作前,需要定下预期目标,同时要观察公司的情况 我见过不少人,面试成了就进去了,结果虽然钱达到预期,但工作环境和行业背景都不是自己想要的,对自己未来发展很不利。 目前不少公司的情况,比如行业背景(比如金融保险电商等)还有工作强度(加班情况)在网上都能查到,用什么技术(比如分布式技术还是云还是AI)通过打听也能问到。互联网是万能的,甚至如果仔细些,一些离职率,每年工资的增长幅度,甚至这个公司是第几轮融资,一般也能看到。 而且,大家在面试的时候,可以通过现场观察以及和面试官交流,旁敲侧击地打探到上述情况。在这个基础上,大家需要结合自己当前的需求和未来3到5年的发展方向,找若干类适合自己的公司,下面就给些我个人的和我所见到的例子。 1 (这是我个人的观点)比如我不大愿意进创业型公司,也比较排斥长时间的996,所以这类公司我只是拿来练手。 2 有段时间,不少P2P金融公司踩雷,所以哪怕面试时,这类公司的面试官会说得天花乱坠(很少有说自己不好的),但这类公司得慎重。 3 有次我到一个现场去面试,发现公司规模不大,是在一个园区里占1个楼层,且大多是业务人员,开发的不多,而且人事总会说自己公司正在融资,那么这个公司就有可能不稳定,在有其它选项时,我就没去。 4 我认识一个人,他想在Java分布式这块有所发展,他5年后的目标是架构师,在面试过程中,他就详细问了未来新进组的技术栈,等确定可以了再入职。 换工作是个折腾人的事情,虽然没有十全十美的事情,进新公司后一定会发现和当初的预期有所不同,但如果事先不调查,那么入职后后悔这还是小事,耽搁自己的发展才是大事。 4 面试前,我总要查看职位介绍,以此准备项目介绍 在上文里,我一直介绍的是准备简历和定目标,从这部分开始,将介绍准备面试。在之前的博文里,我一直强调项目介绍的重要性,所以当我自己出去面试的时候,这块绝对重视。在准备项目介绍前,我还是会通读应聘职位的技术介绍,然后按如下的步骤来准备。 1 介绍项目的基本情况,比如这个项目是干嘛的,有哪些模块流程是什么,自己做了哪些,持续了多久,有多少个人参与。这块切记,可以谈下业务,但别深入,因为面试官不熟悉,也不想熟悉候选人的业务,这块时间控制在1分钟之内。 2 通过介绍项目用到的软件,以及项目的管理方式,来进一步验证项目的真实性,否则很难和培训班给出的项目有差别。 我介绍的时候,就说,项目管理用Maven,部署用jenkins,静态扫描用Sonar,任务管理和bug管理用jira,平时采用敏捷的项目迭代方式,每天有站会,大约1月一个迭代版本。这块大家可以根据自己的情况来介绍,时间也别太长,估计用1分钟也就够了。 3 这块最重要,是结合业务,抛出项目用到的技术,但别展开。 比如我见过一个职位介绍,里面写到需要有数据库优化的经验,那么我就说,项目里我用过MyCat作为分库分表,(不展开技术),结果上线后,我们数据库能承受住每秒2000个并发请求(说下用好的结果)。 ...

June 23, 2019 · 1 min · jiezi

松哥整理了-15-道-Spring-Boot-高频面试题看完当面霸

什么是面霸?就是在面试中,神挡杀神佛挡杀佛,见招拆招,面到面试官自惭形秽自叹不如!松哥希望本文能成为你面霸路上的垫脚石! <!--more--> 做 Java 开发,没有人敢小觑 Spring Boot 的重要性,现在出去面试,无论多小的公司 or 项目,都要跟你扯一扯 Spring Boot,扯一扯微服务,不会?没用过? Sorry ,我们不合适! 今天松哥就给大家整理了 15 道高频 Spring Boot 面试题,希望能够帮助到刚刚走出校门的小伙伴以及准备寻找新的工作机会的小伙伴。 1.什么是 Spring Boot ?传统的 SSM/SSH 框架组合配置繁琐臃肿,不同项目有很多重复、模板化的配置,严重降低了 Java 工程师的开发效率,而 Spring Boot 可以轻松创建基于 Spring 的、可以独立运行的、生产级的应用程序。通过对 Spring 家族和一些第三方库提供一系列自动化配置的 Starter,来使得开发快速搭建一个基于 Spring 的应用程序。 Spring Boot 让日益臃肿的 Java 代码又重回简洁。在配合 Spring Cloud 使用时,还可以发挥更大的威力。 2.Spring Boot 有哪些特点 ?Spring Boot 主要有如下特点: 为 Spring 开发提供一个更快、更广泛的入门体验。开箱即用,远离繁琐的配置。提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。绝对没有代码生成,也不需要XML配置。3.Spring Boot 中的 starter 到底是什么 ?首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们只需要引入依赖就可以直接使用了。 ...

June 19, 2019 · 3 min · jiezi

java面试总结

好久没有更新文章了,不是因为偷懒,是因为忙着准备面试了,现在总结下最近的面试心得,希望对大家有帮助时刻准备着每次入职一个公司,我们都是想着一直干下去的,但是这只不过是我们的一厢情愿罢了,工作中有太多的不可控,导致我们决定离开。 等你想要离开的时候,再去看一些招聘需求,再去准备面试是非常费时间的,而且效果也不是很理想,你只能了解到皮毛,在面试过程中,一旦问到实际使用场景中的问题,你就答不上来了。 软件开发也是分行业的,你在这家公司从事的软件开发经验,也许在另一家是用不上的。除非你一直在一个行业内从事软件开发,但是这就会导致你的就业机会变少,也许在本地这个行业的公司比较少,你换工作的机会就会变少,每次想要跳槽时的风险也就比较高。 在平时工作中,一定不要满足于本公司的技术栈,要多看看其他大的公司的招聘需求,看看其他公司都在用什么技术。抽闲时间多去了解,多去写些demo,掌握这门技术的使用,以后你跳槽面试的时候就会用的到。 所以说做开发还是挺累的,不仅上班干活,下班还要充电。累啊,但是没有办法,生活就是这样,如果你想躺着,那你可能就真的躺着了。 高薪的工作很多,但是要求都比较高,不仅需要掌握基础,而且还要技术面广和深,希望你能主导公司的技术选型以及解决线上生产环境中的问题,提高生产力。只有你提前准备好,面试才能轻松应对。 准备简历想要获得面试机会,就得投简历,但是很多人可能会遇到你投了很多简历没人约你面试,这时候自己就很很沮丧。 首先一定要保证自己的简历没问题,对于没有工作经验的人来说,面试机会真的是挺少的,站在求职者的角度来说,我提倡简历的包装。站在企业角度来说,肯定痛恨这种不诚信的行为。 简历包装讲究方法,不要把别人的直接copy过来,否则面试的时候你就挂了。现在好多在线教育平台,慕课网,51cto都有实战视频,找一个跟着全程敲一遍,理解透,写到你的简历上。准备两个就好了,然后就是把面试宝典上的题看一下。 对于有工作经验的人来说,简历在描述项目的时候,不要像写作文一样去描述,描述你上一家公司的业务没什么用的,下一家公司很少会关注你的业务能力,那你要让人家看到你会什么。hr搜索简历的时候是根据技术点来搜的,比如:Jquery,Vue,React,Spring,Redis,MQ. 所以对于项目描述,简单描述一下就好,剩下就用1.2.3来列出你用到的技术,让hr一眼就看到你会的东西,这样才能提高简历的筛选率,得到更多的面试机会。 投简历简历平台有很多,我就挑我使用过的说: 智联招聘这个上面培训机构比较多,但是也不用担心,这些机构一般只会搜寻一年工作经验的人。只要把他们公司在网上一百度,就会知道是不是培训机构。 这上面的公司比较杂,大的小的都有,处理简历速度还是可以的。名气比较大,最早期的招聘平台,你如果着急找工作的话,可以一键海投,每天去面试提高面试经验,总有一家要你的。 猎聘这上面的公司比较大,基本上都委托猎头帮他们招聘,这上面的猎头都挺专业的,比一般hr素养要高。他们筛选简历的标准也高,一般得3年工作经验起步,前后端得得会,对主流的开发技术都有了解,对分布式,集群,微服务使用过。 这个只要你简历写得好,不用投,就会有猎头来联系你,推荐你去一些公司面试。不过面试要求都比较高,就看你自己的能力了。 还有就是上面的海外工作机会超多,每天都有好多人问你愿不愿意去海外工作,可靠性与安全性就不得而知了,自己小心点。 boss这上面主要推boss面对面聊,就是可以直接像微信一样聊天。回复速度最快,上面的hr也多,可以直接了解到对方的招聘需求,但是小公司居多,可能薪资给不到你。 但是骗子公司也多,之前这个就出过问题,说是公司资质审查不严格,好像现在正规了。自己注意点,如果面试地点比较偏,就不要去了。 拉钩这个可能是薪资给的最高的了,上面的都是全行业招聘,而拉钩主打互联网招聘,上面的都是上市公司,以及正在融资的公司。给的福利待遇都非常好,就是要求普遍高,一般人基本都打不到要求,自己可以平时多去看看那上面的招聘需求,然后提前学习那些技术,提前准备。 这上面只有一线大城市的招聘,其他地方的招聘几乎没有,除非你是上海,北京,深圳等这些大城市的。 总之多个招聘平台都投,增加自己的面试机会,多多益善。 java面试总结因为我是java开发,所以面试的都是后端开发,只能总结一些这方面的题。 4年开发经验java基础这个基本没问,但是每个人都必须掌握,我基础也不怎么好。主要是基础内的一些原理 会问多线程编程模式以及你怎么用的集合的底层原理及实现 hashmap hashsetJVM构成GC原理各种IO的区别及运用各种线程锁的区别设计模式,自己实现生产者消费者模式单例模式实现,且需线程安全各种常见算法。冒泡算是简单入门级,需要知道各种算法复杂度以及使用条件框架部分Spring Ioc 原理Spring aop原理,动态代理SpringBoot 自动配置实现SpringCloud 服务发现注册实现微服务理解分布式系统事务MQ使用,如何保障消息一致性和可靠性数据库方面数据库调优sql调优数据库横向纵向拆分实现数据库主从复制,读写分离实现存储过程复杂sql书写redis雪崩,击穿,穿透如何避免redis可靠性实现mongodb可靠性实现数据一致性实现前端部分这个一般都会问,但是我不是很擅长,我只停留在前端框架的使用,之前三星数据找全栈,我去试了下。。。。。。。 闭包的理解es6中有哪些新特性,你怎么用的vue的双向数据绑定实现原理react和vue的区别node相关内容typescript的相关内容jquery的相关内容前端工程构建过程总结当你的工作年限不断上涨的时候,你换一份工作,公司对你的要求也越来越高,如果你还停留在写业务代码的水平,是很难找到一份好的工作的。 要对各个框架的底层原理了解,要花时间阅读源码,提高自己的程序设计思想。在微服务分布式方面要多下工夫,前端也必须会主流的开发框架,即使你前端基础不够深入。 面试很大一部分靠运气,可能面试你的那些东西都用不到,但是你必须要会。有时你准备了好多,但是人家没问你,问的都是你没准备的。同一家公司,不同的面试者,可能没有你准备充分的人面试通过了,你没有。但是不管什么时候你的基础一定要扎实,很多工作年限高的人可能都挂在基础上,因为只玩框架,早就把基础忘了。但是一些大公司对基础这方面的考察时非常重要的。 因为我也没有面试太多的公司,在小城市,没有太多的大公司,所以总结的只有这些,希望想要换工作的人,提前准备。等到面试的时候再准备,打击还是挺大的,尤其当你面试的时候发现你好多东西都不知道。 最后祝大家都能找到好工作。

June 9, 2019 · 1 min · jiezi

不要这样写简历

作者:饥人谷创始人:方应杭文本来源:(已经方老师同意转载)https://zhuanlan.zhihu.com/p/...https://zhuanlan.zhihu.com/p/...想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 简历问题 从严重到不严重排序 实习经验介绍太少。我根本就无法看出你在其中做了什么工作,我甚至都不知道你的抓取工作用了什么技术。至少介绍三句话也好。编程经验只有名词列举,没有佐证。你如果有这些编程经验,至少提供代码链接或者项目链接给我看看,我才知道到底写得好不好。没有给我看你做的项目。那我只能默认你没有做过什么拿得出手的项目了……我司的技术栈跟你的不太匹配,而你并没有针对这一点改写你的简历,比如表达对前端和 Rails 也是有兴趣的。 也许你自学能力很强,也许不强,但是至少这份简历不足以说服继续面试你,所以抱歉,简历关不通过。 简历关不过的原因有这些JD 中表明了工作地点为杭州,应聘者的简历却赫然写着期望工作地点北京。要么是你懒得改,要么是你没看清 JD。我的回复是:『请先更新简历』没有用过 Vue。现在做前端还『没有用过』三年前发布的 Vue,要么你消息闭塞,要么你对前端新技术没有好奇心。我的回复是:『你如果一周内学会用 Vue 写个 TodoMVC 我会考虑继续面试,谢谢。』项目介绍太简略,既没说技术栈,也没说功能怎么实现的。这种我就没有给回复了。还有一个比较尴尬的原因就是我一周内收到了这么多份简历,但是只招一个人;所以如果不是特别优秀,基本都不会有下一轮电话面试了,精力有限,抱歉啦。并不是你不够好,而是有比你更好的。 其他一些不重要但是需要注意的地方不要给面试官发 Word 文件,你怎么知道面试官安装了 Word 呢?请使用 PDF,人人都能打开 PDF,而且 PDF 的排版没有损失。你把 Word 或者在线简历打印成 PDF 的时候,麻烦点开打印设置看看,不要留那么大的页边距,贼难看。不要给面试官发 Markdown 格式的简历,你想发也行,一定没人看就是了。毕业院校和专业必须写清楚。文件名不要叫做『简历』,应该叫做『某某某-应聘前端开发-2019年.pdf』简历里不要留太多空白,能占满就尽量占满不要强求一页纸简历,其实两页更好。没必要写自我评价,除非很特别,否则基本没人看。不如把项目介绍写好点。类似的项目不要重复出现在简历里,择优展示其中之一即可。如果你在简历里写了『精通』两个字,你就是在说:本人接受最高难度的面试题,请随便问。投了简历三天没回应别在那自怨自艾,可能面试官比较忙没看而已。交流干货系列文章汇总如下,觉得不错点个Star,欢迎 加群 互相学习。 https://github.com/qq44924588...我是小智,公众号「大迁世界」作者,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉! 关注公众号,后台回复福利,即可看到福利,你懂的。

May 31, 2019 · 1 min · jiezi

JAVA面试题22

    本文首发于cartoon的博客    转载请注明出处:https://cartoonyu.github.io/c... Get和 Post 请求有哪些区别? Get方法不改变数据库状态,POST会改变数据库状态回退页面/刷新时,Get不会再提交数据,Post会再次提交数据Get能被客户端缓存或保存,Post不能Get的数据长度受url限制,Post数据放在requestBody上,不受url限制如何实现跨域? 参考博客:https://blog.csdn.net/ligang2...图片ping或script标签跨域JSONP跨域CORSwindow.name+iframewindow.postMessage()修改document.domain跨子域WebSocket代理说一下 JSONP 实现原理? 尚未接触说一下你熟悉的设计模式? 代理模式。程序调用子模块通过代理实现观察者模式(观察者角度) 主动式 观察者持有主题的引用主题发布更新,并通知观察者观察者调用主题成员方法获取更新被动式 主题持有观察者列表主题发布更新,并循环列表向观察者发布更新内容单件模式 当前类在系统中只有一个对象利用volatile以及synchronized保证多线程下的安全策略模式 将实体属性与行为分开行为通过接口注入的形式注入到实体中

May 12, 2019 · 1 min · jiezi

把模板方法应用到实际项目中

阅读原文:把「模板方法」应用到实际项目中 如果不在工作中思考,模板方法模式的概念和定义即使背再多遍估计也是徒劳,今天我思考如何解决实际项目中的问题时发现,模板方法正是解决问题的良策。 <!--more--> 需求我们项目中要实现一个创建会议的需求,但我们系统可设置将会议同步到其他第三方系统中。而在创建会议前要经过几个必须的步骤,比如验证冲突,计算循环规则,对比时间段是否符合等。 思路不同点创建会议的方式不同: 本地系统创建第三方系统创建相同点验证会议是否冲突根据循环规则计算出预定时间段是否符合预定规则特殊点即使会议又冲突,但有需求是依然要能创建成功!所以验证冲突步骤是可选的。 业务梳理后如下: 开始抽象只有抽象类能实现我们的要求,既能要一部分方法有实现又能实现抽象方法不用实现。 @Slf4jpublic abstract class AbstarctRecurringHandler { /** * 处理创建会议 */ public final void handle() { if (isConfirm()) { calculateConflict(); } calcBookingPeriod(); checkRule(); createEvent(); } /** * 验证规则 */ public void checkRule() {} /** * 获取预定的所有会议时间段 * * @return */ public List<Period> calcBookingPeriod() {} /** * 计算冲突会议 */ public void calculateConflict() {} /** * 钩子方法 * * @return */ public abstract boolean isConfirm(); public abstract void createEvent();} 模板方法我们这里的handle方法已经固定了整个创建会议的流程,并且我们使用final修饰,表示不允许别人修改这个过程。不同的创建可能有不同的人来完成,这个能够避免部分人员的粗心大意也就是规范了创建流程,而且其他开发人员也不必再关心除创建会议之外的其他过程。 ...

April 30, 2019 · 1 min · jiezi

记录一次成都阿里一面的经历

上周在拉勾上收到一个蚂蚁金服的大哥要我的简历,当时很惊讶,居然有蚂蚁金服的找到我,然后想都没想就给了。 受宠若惊呀,我知道自己的水平跟阿里的差距有多远,以前一直没用勇气去投,连试试都不敢。这次居然主动找过来了,当时就再想,难道阿里这么缺人么?还是只是为了完成某些KPI,当然了,我这种想法比较幼稚。 没想到的是第二天居然收到了阿里巴巴的面试邀请邮件,里面说到会在10个工作日内进行第一次面试。 不管怎么样吧,既然面试来了,就试试吧。能面一次这种级别的技术公司,看看自己真实的差距,也是三生有幸了。从离职的这段时间也补了补JVM,基础的数据结构算法什么的,还有一些高频的Java 基础问题。 周一晚上 8:25 接到了蚂蚁大哥来的电话,果然,跟传说中的一样,还在上班。当时很意外,没想到是电话面试,因为邮件中没提到,后面回想,貌似一面基本上都是电话面试,有些朋友二面也是电面。 进入正题,下面是整个内容。顺序有些不一致,我按照模块来整理的。 自我介绍 自我介绍就先介绍 多大了、毕业多久了、做了什么些东西、最近做的什么内容,擅长的部分呀 等等。 这里说一下,自我介绍的内容如实说就好,不要太过于夸大,自我介绍的内容建议大家提前准备好,不要说的时候想到哪儿说到哪儿。 线程部分 1、多线程的实现方式有哪些? 这个题目在一面的时候基本上都会碰到吧,继承 Thread 类、实现Runnable 接口,最后调用 的是 start() 方法来启动线程。这里还有个知识点是 start() 跟 run() 方法的区别和联系。 直接调用 start() 方法,此时线程处于一个就绪(可运行)的状态,但是并没有真正的运行。而是得到CPU 的时间片后,开始执行 run() 方法,run() 方法里面的是我们的线程体。 我们直接 运行 run() 方法,它其实就是一个普通的方法调用,在主线程中执行,是不会开启多线程的。 2、描述一些线程死锁的情况? 这个问题在平常项目基本上没怎么接触到,但是我有过部分了解。回答的是:两个线程在持有自己的锁的时候,还要去持有对方持有的锁时,由于别人的锁已经被对方持有,造成彼此等待对方释放锁的情况。回答得比较片面,还有一些类型的死锁问题没有答出来,后面直接交底了,面试官说没关系的。 建议大家在准备这个问题的时候能说出来产生死锁的条件、现象、解决办法等。然后配上一些实例说明,在面试过程中,面试官就提到说根据我们平常遇到死锁问题的场景实例来说。 大家可以搜一下下面这两个死锁场景问题: 1、三个人 三根筷子:每个人需要拿到身边的两根筷子才能开始吃饭 2、银行转账问题:线程 A 从 X 账户向 Y 账户转账,线程 B 从账户 Y 向账户 X 转账,那么就会发生死锁。 3、项目中有没有用过线程池 ?怎么用的 ? 回答了我们项目里面有些接口需要组装多个服务的数据进行封装,然后返回。这里面我们会使用多线程去并行拉取数据,减少接口响应时间。 面试官说:“ok,那么你有没有看过线程池里面的源码呢 ?有哪几种线程池 ?” 源码这里我迟疑了一下,我说不太熟,然后我说了几种类型的线程池 newSingleThreadExecutor、newFixedThreadPool、newCachedThreadPool 但是还漏了一种 newScheduledThreadPool 没想起来。 ...

April 26, 2019 · 2 min · jiezi

前端实习面试的一些建议

作者今年大三,在春招过程中参加了多家大公司的面试后,拿到了腾讯的前端实习 offer,在这里做一些总结,希望给还未参加过实习面试的同学一些帮助。一、简历的准备简历制作是很重要的一个环节,一份好的简历会给面试官留下很不错的印象,也有助于你顺利通过简历筛选环节。简历制作过程中重点要突出你在校园内参加过的项目和竞赛以及获得的成就,这是简历筛选中最看重的。学历的高低并不是最重要的,只要你有着不错的项目经历,都是有机会参加面试的。在我们实习群里学历从专科到 985、211 的硕士都有,所以请勇敢的尝试。推荐一个简历制作的网站-超级简历二、先投递中小型的公司先去中小型公司练练手,感受一下面试的过程和氛围。这样可以让你快速的熟悉面试过程的氛围,让你在之后的面试过程中不至于紧张过度。我在参加春招之前,压根没有任何面试的经验,当时投的第一家公司是CVTE一家做音视频硬件的公司。第一次面试是通过牛客网进行远程视频面试的,因为没有经验,本身也没有刷过面试题,所以第一次面试理所应当的被问倒了。第一次面试也是紧张的不行,以至于有紧张到发抖和出冷汗。不过这次面试让我清晰的认识到自己的不足,并记录下面试过程中被问到的问题,并在之后的几天内网上找大量的资料进行恶补。在之后的面试时就更加从容一些了。三、广撒网多捞鱼在你的承受范围之内尽可能的多投几家公司,正所谓广撒网多捞鱼嘛,尝试的越多机会自然也就越多。当然如果你是大佬只想去一家公司,那就不适用这一条了。我的整个春招过程大概在 20 天左右,总共投了 4-5 家大公司,从一开始完全没有面试经验,到后面甚至一周内参加四家大公司的面试都从容淡定。所以只要有机会就多去尝试。四、记录与总结请务必在每一次面试结束后记录下面试过程中,你不会或者没回答好的问题。因为这些问题很可能你在下次面试过程中会被问到。其次多总结自己的不足,只有意识到自己的不足之处,才能更好的去补足。拿我自己来说,在第一次面试时面试官问我http缓存,我是一脸懵逼答不上来,然后我在面试结束后就恶补这个问题,在后面几次面试过程中,几乎每次面试都被问到这个问题,我也能够从容的回答了。五、我收集的面试题集以下是我在整个春招过程中收集的前端面试题,每一篇文章写的都很好,也学到了很多东西。建议重点看截图中框出来的文章点这里查看我收集的面试题集六、前端实习面试的套路1. 回顾项目往往在面试时,面试官根据你简历中的项目由点及面地展开问答,所以请对你做过的最好的项目进行回顾和反思。回顾你做过的工作和项目中最复杂的部分,反思你是如何完成这个最复杂的部分的。面试官会重点问你最复杂的部分的实现方法和如何优化。重点要思考如何优化,即使你项目中没有对那部分进行优化,你也应该预先思考有什么优化的方案。如果这部分答好了,会给面试官留下很不错的印象。2. 重点在于基础知识这里指的基础知识包括:前端基础知识和学科基础知识。前端基础知识:html/css/js 的核心知识,其中 js 的核心知识尤为重要。比如执行上下文、变量对象/活动对象(VO/AO)、作用域链、this 指向、原型链等。如果你对刚刚提到的知识没有掌握的话,那建议你去看看这个系列文章。学科基础知识:数据结构、计算机网络、算法等知识。你可能会想前端不需要算法,那你可能就错了,在大公司面试,面试官同样会看重学生这些学科基础知识。你可能发现了我没有提到React/Vue这些框架的知识,这里得说一说,大公司不会过度的关注这方面框架的知识,他们往往更加考察学生的基础。这里我的建议是,如果你至少使用或掌握其中一门框架,那是最好的,可以去刷刷相关框架的面试题,这样在面试过程中即使被问到了,也可以回答个 7788。如果你没有使用过框架,那也不需要太担心,把重点放在基础知识和学科基础知识之上,有其余精力的话可以去看看主流框架的核心思想。分享一个小程序这是我近期使用Taro开发框架开发的一款小程序,主要功能是提供可靠的书架管理功能,只需要扫一扫书籍背后的条形码即可添加书籍入库,你可以方便的在线上管理你的书架,查看书籍的基本信息,亦可以添加书评。该项目获得了微信小程序 U 计划的资助。目前项目正在开发中,欢迎大家体验反馈。

April 17, 2019 · 1 min · jiezi

活动:送两本《PHP 程序员面试笔试真题库》

你好,是我琉忆。由于近期工作忙碌,没有时间去更新PHP面试专栏。现在特此搞个抽奖活动送2本书给大家。给各位面试助力,尽快找到一份满意的PHP工作。《 PHP 程序员面试笔试真题库》历时一年,由机械工业出版社出版,在 2019 年 4 月问世。本书的适用群体:刚接触 PHP,自学一段时间 PHP 后打算去找 PHP 相关的 PHP 面试工作的群体。本书主要抽取了各大互联网公司往年 PHP 的面试笔试真题,然后抽出整理成书,为你的面试笔试助力。现免费送出 2 本《 PHP 程序员面试笔试真题库 》,具体参与规则如下:1、在本文下留言即可参与,并且一个用户的多次留言只算作一次。2、活动截止日期为北京时间 2019 年 4 月 19 日 19:59:59(本周五),以评论时间为准。(2019年4月 19 日晚上 21 点开奖)3、在活动结束后随机抽取 2 名幸运网友。4、获赠名单在本帖后会公布,并 私信该网友。5、幸运网友把收件地址、姓名和手机号发送给我安排邮寄。6、全国包邮(不含新疆、西藏、港澳台)7、保留最终解释权。PS:该书已在天猫、京东、当当等电商平台销售。获取更多PHP程序员面试笔试资料可以关注:琉忆编程库

April 15, 2019 · 1 min · jiezi

如何有计划,高效率,优简历应对面试

前言前一篇文章讲述了我在三月份毫无准备就去面试的后果,一开始心态真的爆炸,但是又不服气,一想到每次回来后家人朋友问我面试结果的期待脸,越觉得必须付出的行动来证明自己了。面经传送门:一个1年工作经验的PHP程序员是如何被面试官虐的?下面是我花费两个星期做的准备,主要分三部分:有计划——计划好每天要复习的知识模块(内容较多)高效率——从整体到细节,着重把知识点“手写”到自己的电脑记录本优简历——展示你的项目亮点,难点下面的文章和网站链接我都会注明出处,如果有问题请联系我,我会及时修改或撤销有计划反思:为什么好多知识看过后不能记住,面试一紧张更加想不起?一方面自己没有深入学习,另一方面复习过程杂乱,和写代码一个道理,如果你的业务逻辑和其他乱七八糟的都放在控制器上,代码一多你要调用某个方法可能就会让你抓狂,所以一般采取controller和server分层,同理,我们最好提前做好计划,分种类,分层次来学习。复习前如果很迷茫,可以网上Google一下面试知识点,看到的无非都是操作系统,计算机网络,数据结构,mysql,设计模式,Linux,Redis,再者根据你所学语言方面的知识和简历,例如我求职PHP,简历上有写Larvel框架,那就再加PHP基础,框架Laravel,服务器nginx。第一天:操作系统如果你是科班出身,那应该对操作系统不陌生,至少在高校里面是学过这门课程的。但估计很多人像我一样,后悔没去好好学这门课,或者工作上用不上就抛弃它了(PHP更是如此),我要说的是操作系统很重要,就以我面试了几家公司来说,基本如果你答出操作系统相关知识点基本都是加分的。进程和线程的概念,以及两者的区别什么是上下文切换多进程和多线程各自的优势(可以Google一下有关php-fpm和nginx进程)进程通信方式进程基本状态抢占式调度和非抢占式调度进程线程同步,死锁理解协程附加帮助我整理这些知识的网站和博客文章:小土刀的面试刷题笔记——操作系统并发技术·笔试面试知识整理这里推荐有精力的朋友可以看下《Linux高性能服务器编程》,粗略看下8,9,10,13,14章,以及《深入理解计算机系统》的第1章和第12章,我就是结合这两本书,记住并理解简单的知识点,后续我还要花时间去深入阅读。第二天:计算机网络计算机网络可以说是大多数程序员需要学习的大课程,特别是PHPer这些web打交道的程序员。当然,计算机网络太底层的东西很枯燥很难懂,我只针对一些比较常见,比较基础的知识面来学习。计算机网络体系包括TCP/IP体系结构,五层协议体系结构TCP,UDP三次握手,四次握手(过程要熟悉,能清晰描述)TCP协议如何保证可靠传输(包括重传,流量控制,拥塞控制,定时器等知识点要了解)附加帮助我整理这些知识的网站和博客文章:小土刀的面试刷题笔记——网络TCP协议·笔试面试知识整理复习完这些基础的知识后,试着要去了解稍微底层一点的东西,因为很多面试官喜欢由浅入深地问,如果能答出一两点基本都是加分的推荐一篇很好的文章,仔细读完会有很大的收获:TCP 的那些事儿(上)第三天:数据结构很多人在大学里面都学过这门课程,也是很多程序员的启蒙课程,自然很重要,(大学唯一一次挂科就是它了。。。)从事PHP工作的朋友应该都用不上它,所以这也是一个很容易被忽视的基础知识点,自然有很多大公司面试的时候很注重这方面的基础,特别是应届毕业生。我复习这方面的知识是重新翻开我大学的课本,把其中比较重要的东西手写几遍。我不久前面试过一家要我手写链表,结果早就忘了,没写出来队列,循环队列,栈,单链表等,要理解,最好多手写几遍树和图,着重复习二叉树方面的知识,例如前中后遍历;B树,B+树,红黑树最好要了解一下排序算法,冒泡排序必须很熟悉,其他几种常见的算法:简单选择排序,直接插入排序,快速排序也要知道冒泡排序可以了解下如何优化改进,有些面试官会问,如果答不出他会提示你怎么做,考察你的思考能力关于数据结构的参考资料基本Google一下就有很多(顺便说下,21世纪程序员还是少用某度),大学的课程书是最好的,一般大学的数据结构都是面向学生的,还是很基础,很好理解的。第四天:数据库mysql说实话,我觉得绝大多数程序员都是在CURD,学那么多东西很大方面也是为了辅助最后的curd。所以数据库知识的重要性毋庸置疑,后面我打算买本《高性能MySQL》来提升自己这方面的能力。基础的增删改查操作存储引擎MyISAM和InnoDB理解索引数据结构,即B+树方面的知识 参考:InnoDB索引实现·MySQL索引背后的数据结构及算法原理·看云mysql语句优化,着重索引优化,explain查看索引情况 参考:Mysql索引优化事务四大特性隔离级别脏读,不可重复读,幻读了解共享锁,排他锁,死锁了解主从复制原理,分库分表第五天:nginx和PHP-fpmnginx和php-fpm应该算是PHP程序员接触比较多,但是可能没有去深入了解过,有些面试官喜欢结合nginx,php-fpm和操作系统进程方面的知识来考察。日常用到的nginx配置语法,常用的变量nginx常见的参数优化 参考:Nginx高并发下的优化nginx负载均衡,访问控制,防盗链,设置静态文件过期时间等php-fpm工作流程php-fpm进程管理(静态和动态)可以Google了解下php-fpm和nginx各自的进程管理模式,参考文章:Nginx内部有使用多线程吗?面试过程可能会问到网站负载低,访问慢怎么排查,参考:论坛偶尔出现负载低但是访问很慢排查思路第六天:redis工作项目不大,用到redis的地方并不多,所以一直也没去学习redis,但是从面试情况看来,被问到redis的概率还是很大的,毕竟这款基于内存的数据库功能强大,市场占用率很高。与memcached的区别5种基本的数据结构以及各自的使用场景,最好能结合自己项目来描述持久化,RDB和AOF 参考: 面试中经常被问到的 Redis 持久化与恢复如何与mysql保持数据一致 参考:Redis和mysql数据怎么保持数据一致的?第七天:Laravel由于我自己是一直用Laravel框架开发的,简历里面的项目也多处标明Larvel,所以这里就介绍Larvel相关的知识,你对哪个框架熟悉就去做相应的复习,基本Google和手册都有。Laravel生命周期什么是服务容器,服务提供器,Facade门面依赖注入中间件,异常处理,ORM等手册上的知识第八天:设计模式看一个人的代码水平,可以从是否灵活使用设计模式看出来的。写代码也是一门艺术,好的代码低耦合,易扩展,设计模式的理解和使用也决定了你的代码水平。这里推荐一本《大话设计模式》,目前我只看了一点点,对于我这样的菜鸟觉得还不错,后面需抽点时间好好看看。六大原则,着重理解,最好能清晰口述结合你的项目经验描述几个设计模式。常见的有单例,三大工厂,观察者,策略等有一次面试官问我简单工厂模式是不是符合六大原则之一开闭原则?我答不出来,随便选了个符合。。。实际简单工厂是不符合开闭原则的,这就涉及到你开闭原则的理解。第九天:PHP内核基础知识真正要读懂PHP内核的人应该很少,大多数人都没时间和精力去研究底层,毕竟PHP一直以开发效率高著称,只要底层有人写好给广大程序员用就好了。确实是这样,但是我记得有个面试过我的大佬跟我说,很多东西不要只会用,要多想想为什么可以这样用,PHP语言我觉得也是一样,虽然现在能力有限,但我可以提前把一些比较基础,容易理解的底层知识学习一下,这不也是一种自我提升?面试的时候你也可以拿出来炫一下,说错也没关系,至少你展示出你的好学,你的认知层面。PHP的生命周期和zend引擎变量存储结构写时复制和引用参考文章:深入理解PHP内核PHP内核剖析第十天:根据你的简历内容做复习面试都是拿着你的简历来问问题的,你的简历内容会直接影响面试内容的走向,所以简历写完还要做响应的复习。我的简历有涉及rabbitMQ,elasticsearch等知识,我就对其进行简单的复习。另外很重要的一点:提前想好怎么描述你做过的项目,其中遇到什么问题,怎么解决,尽量把你好的一面展示出来,这些都可以提前写下了的,好记性不如烂笔头,下面第二部分会说到。高效率复习的内容实在是太多了,单单写上一部分内容都快把我的键盘打烂,手写断了。虽然有了十全的计划,但如何高效率去记住上面那么多东西是一个大问题,看看我是怎么做的。例如第一天复习操作系统的知识,我是早上Google了一下有关操作系统的面试知识点,然后打开几个标签页,选取内容比较齐全的。所谓“好记性不如烂笔头”,没有烂笔头,只有烂键盘,所以我选择把这些知识点一一整理到自己的电脑上,自己平时有写博客,用markdown比较多(推荐Typora),所以每天就用一个md文件把知识整理下来,基本都是手打的,很少复制黏贴。这样做,一方面让自己印象深刻,另一方面锻炼自己摘取核心内容,描述能力,这也是我能写下这么多内容的原因。每天晚上计划好明天的复习内容,可以选择睡前回顾今天学习的知识,也可以在第二天早上回顾一遍最好选择一个安静的地方,能让你认真学习的环境,我由于提交了离职申请需要一个月才能走,交接项目也很快,所以每天都在公司有计划的复习(远离手机)总之,真想要离职,找一份好工作,必须对自己狠一点,找到心仪的工作再好好去放松几天。其实有不少人一直在埋怨大环境不好,确实是,但有何用,想为自己菜,自己不努力找一个借口?王小波说的好:人的一切痛苦,本质上都是对自己无能的愤怒。当然运气也很重要,保持乐观,别轻易放弃。优简历简历不用多说,就是很重要,怎么写?其实我也是参考一篇文章的:我本以为你们会写简历概括一下:基本的,用PDF格式,个人信息写完整,别写精通技能亮点,围绕 熟悉 , 有所 , 掌握 , 了解 , 有一定心得 等不要这样:熟悉PHP , 熟悉YiiLavarel框架 ( 复制粘贴 , CURD , 就是干! )熟悉Linux使用 , 可以搭建XXXX环境 ( 会敲cd , ls命令 , 会apt install nginx )熟悉git或svn版本管理的使用 ( 会git push , 会git pull )熟悉MySQL以及对数据库的优化 ( 会select update 和 delete , 会添加索引 )熟悉Redis或Memcache的使用 ( 会set key , 会get key )最好这样:PHP : 熟悉PHP语法 , 熟悉PHP面向对象 , 可以根据业务逻辑结合合适的设计模式 . 熟悉PHP SPL标准库 , 对PHP的一些高级用法有所心得体验 , 诸如pcntl多进程模块 , socket模块 . 对SWOOLE所有涉猎 , 有一些自己的积累和经验 . 对于底层 , ZendVM如何如何 。Redis : 熟悉Redis常用数据结构的使用 , 可结合业务场景选择合适的数据结构 . 熟悉Redis集群 , 对集群实现方案原理有一定掌握 , 对于市面常用的集中集群方案的优缺点比较了解 . 对于底层 , 对Redis SET等底层数据结构的实现有所掌握。一定要写项目亮点和难点大多数人都是这么写的 : 负责用户登录注册模块 , 后台管理 , 多角色权限控制 , 负责广告业务模块的管理和筛查(太普通,太泛了)亮点 . 你觉得这个项目中哪一部分值得自豪或学到新东西了 . 比如项目中用到ECDH , 使用了MySQL中间件等等。难点 . 你觉得这个项目哪一部分当时难了你几天 , 然后你通过自己努力解决了以及解决方案是什么。总结面试并不简单,不要太轻敌,做好准备,打好基础是关键。毫无准备就去投简历面试大多是浪费时间,甚至浪费进入好公司的机会。还是那句话程序员应该脚踏实地,不要眼高手低,用实际行动证明自己。我是即将入职广州一家游戏公司PHP开发岗位的程序员,2018年毕业,毕业到现在确实收获了不少,也让我看清自己,需要恶补的知识还有很多很多。欢迎大家关注我的个人博客https://zgxxx.github.io/,比较简陋,还是希望能和万千大神交流技术问题,一起成长。 ...

April 12, 2019 · 1 min · jiezi

技术面试中的软技能

阅读原文:技术面试中的软技能作为求职者时,只听别人说如何面试,按部就班的做,没有特别的体会。如今作为面试官,面试别人时,才发现什么才是重要的事情。形象形象包括衣着发型和五官。衣着不必太正式(西装),但也不能够太随意,比如肥胖的T恤和外套。头发最好在面试当天洗洗吹吹,简简单单就好。千万不要把发型弄的太个性,发胶发蜡把头发打理的笔直笔直,锃亮锃亮的,会认为你个性比较张扬,这种人不太容易管理。五官几乎是不可改变的,但也要搭理干净,胡子如果没有特殊爱好,一定要刮干净,鼻子千万不要露出你的鼻毛。最重要的就是有烟瘾的,千万不要在面试前吸烟,面试时可能和面试官坐的近,你一张口,面试官就能闻到你的烟味,这种烟味不吸烟的人是受不了的,他当然也不会录用,以后工作会经常沟通,他可不想一直闻烟味。沟通这是我司录用的最大标准!无论技术再牛,只要沟通不顺畅,不要!录用后是要一起工作的,沟通是少不了的!那么怎么才算沟通顺畅呢?这个可能靠点运气了,不同的面试官知识面的不同,个性的不同都会导致不同的结果。但有一点可以判断你俩是否沟通顺畅,那就是面试官问的问题你是否能理解!如果你不理解,面试官又愿意引导的话,这还有点戏;如果你不理解,面试官再而三的引导或不愿意继续这个话题,那我估计你几乎已经凉了。精神状态就是你说话的语气,眼神和表情。说话要大声点,咬字要清晰点,不要说话吞吞吐吐。说话时眼睛不要东张西望或者眼皮耷拉下来,会让人感觉你心不在焉或精神萎靡。眼睛可以平视面试官,炯炯有神这个词就是通过眼睛表达的。表情不要一直保持一个,要根据说话的语境进行转化,不然面试官会感觉和你聊天很枯燥。态度有些人感觉面试官问的问题太简单太low,完全配不上自己的水平,简单两句略过了。如果你也有这个想法,那么你只能去找高大上的公司了。这态度是所有公司都不会接受的!总会有比你水平低的同事来请教你,来和你合作,这种态度完全不能共赢!简单的问题你也要谦虚的仔细说,如果面试官听到满意的答案自然会让你停下来,继续下个话题。如果遇到不会的问题,可以停下来思考几秒钟,然后说出你的想法或推论,这点能表现你是否有主动思考能力;如果没有思路,可以直接说不知道或者让面试官引导一下,不要自己思考太久,这会拖慢面试进程,面试官不希望如此。如果面试官引导你,那么你可以一步步走下去,一旦走不下去了,立马和面试官反馈,并请面试官给出方向或关键词以便之后去学习了解。提问问你入职要做的事情。这个行业这个项目是否你能接受的,很多人入职后发现不喜欢当前的行业,项目和业务,只能辞职,这不仅耽误自己也耽误公司。问公司开发规模,规范及流程。看看是否标准,有什么优点,这对你以后的发展很重要,野生的和正规的就在于规范和标准。问公司对员工的提升有哪些帮助。帮助是双向的,没有提升的地方,谁愿意待呢。看看公司的办公环境是否能接受。不要问公司福利,薪资,加班情况,这你要等到HR面时再问。就说到这吧,你们从求职者或面试官的角度有什么想法呢?交流才能擦出火花,期待大家的留言!更多精彩技术文章尽在微信公众号:码上实战

April 11, 2019 · 1 min · jiezi

面试王者的出装方案推荐——软技能篇(文末含岗位内推)

前言金三银四的求职季已经过半,但求职者的简历依然络绎不绝地涌过来。今年的大形势比较丧,不少大公司需要通过裁员降薪,或着停止招新,来 “过冬”。 所以,哪怕是有招聘需求的岗位,也会相应提高对应聘者的要求。在一些微信群中,也有同学感叹说面试机会变少,工作不好找。近期面试了很多候选人,也陆续收到的一些公众号上读者的反馈,让我产生了一些思考。今天,我们不聊具体的技术问题,而是想探讨一些,在面试的过程中需要注意的 “非技术项的软技能”,以及一些个人的感悟。就好比在 “王者荣耀” 中,技能的操作是你的“硬技能”,而局内的出装方案则是“软技能”。优秀的出装方案,往往会是你登顶之路上的一大助力,希望这些“软技能”对还在求职路上的同学有所帮助,也祝愿所有同学都能迈入自己心仪的公司,成就“最强王者”!一些软技能这里所说的 “软技能”,是指一些个人的综合素质。假设有一个与你的技术能力不相上下的人,共同摆在面试官的面前,这些 “软技能” 或许能让你脱颖而出。1、礼仪 和 仪容千万不要迟到。面试官也是很忙的,除了日常的开发任务,还有各种的会议安排,如果因为你的迟到而打乱了面试官的日程安排,那第一印象就不好了,还会影响整个面试的过程。但如果真的遇到突发事件时,可以提前联系说明情况,并表达歉意,这往往能给面试官留个好印象。保持谦虚的态度。任何时候,把自己放在一个相对低的姿态,你是来面试的,需要抱着一种接受检阅和学习的态度,来对待面试。让我记忆犹新的是,曾遇到过一位同学,在面试刚开始时,就拿出了纸和笔,说是为了在面试过程中,当遇到答不上来的技术问题时,以便于记录下来,在回去之后再复习巩固。这一听,就让人觉得这小伙子不错,谦虚又好学,或许以后相处起来也应该比较融洽。保持礼貌待人。多说“请”,“您”,“谢谢”,记得进门后关门,给你倒的水,在走的时候也要记得扔掉。面试时,坐有坐相,不要跟在家里一样太随便。说话口齿清楚,可以有条不紊地说得慢一些,但要注意把握细节的尺度。如果遇到某个问题和面试官有分歧的时候,不要争论,更不要试图说服面试官,点到即止。这是礼貌,与你的技术有多牛逼无关。穿着得体,仪容整洁。穿着上,如无特别需要,不要着正装,休闲装就行。仪容上,女士可以化淡妆,也可以素颜;男士需要梳理一下头发,胡子刮干净。干净整洁无异味即可,以表示对本次面试的重视和对面试官的尊重。2、沟通能力面试的过程,本质上就是一次沟通的过程。候选人在短时间内,要尽量地向面试官展现自己的长处,隐藏自己的短处,尽量让对方问题得到圆满答复并且留下较好印象。在面试时,候选人一定要精神饱满,口齿清晰,自信对答。当遇到答不上来的问题时,一定要老老实实的说 “这个我不清楚”,或者 “这个我不会”。千万不要不懂装懂,罗里吧嗦说了一堆,还说不到点子上的话,会让面试官觉得你是在捣糨糊。而且我告诉大家,混是混不过去的,面试官问的问题,他自己肯定非常清楚答案,想糊弄过去或者胡乱回答,那只会给自己 “挖坑”。一道题答不上来,赶紧翻篇,不要想太多,那是会影响面试状态的。在最后谈薪酬的时候,也不要因为自己有些题没答好,而降低了期望薪资,如果对方真的按你当时说的期望薪资给了 offer,而你却有点不甘心,再次改口的话,会让对方觉得你是在坐地起价,一个好机会可能就此错失了。所以,只要不是漫天要价,就放心大胆地说出来,如果对方觉得略高,会再跟你商量的。但务必一开口就给人真诚,干练,专业的印象。3、简历上的一些建议一份优秀的简历,往往能让你获得更多的面试机会。面试官在阅读一份简历的时候,往往会先找关键词,比如 React / Vue / Node 等的技术栈,然后是项目经验,再是 学历 / 工作背景 等,以及是否有 github 或技术博客等的加分项。技术栈和项目经验很好理解,企业招人会先从成本考虑,熟练工自然是优先考虑。所以,一定要在第一屏就把你最擅长的技术栈,以及运用该技术的项目经验写清楚。我发现很多候选人,不太重视自己过往的项目经验。就我个人而言,我做过的每一个项目,虽然我在其中可能只负责编写某一个模块,或者功能,但我也会想办法搞清楚整个项目的业务流程,产品设计的意图,我们做的内部功能是如何与外部实现集成的,以及整个系统的架构设计等等。我在面试候选人时,往往会先问最近一个项目的相关内容,有的候选人会说是他自己一个人完成了整个项目的搭建与开发工作,但连其中有哪些模块,为何这样设计,最终如何落地,都答不出来,场面就很尴尬了。所以,在面试前,应该好好把自己以前的项目经验都捋一捋,特别是最近的一个项目,从业务流程到产品设计再到系统开发。然后,在简历中写项目经验的时候,可以多加设计一番,想一想,当面试官按照你简历中写的 “剧本” 提问的时候,你会有多么的从容呢4、不要作弊。这里说的不要作弊,分为两方面。一个体现在简历上,另一个是指做笔试题。在简历上,不要把你不熟悉的领域写上去,更不要在其之前还写上熟悉或者精通的字样。如果你写了,那在面试前一定要花时间做足了功课,不然到时候岂不是搬起石头砸自己的脚么。另外,如果你真的没有 github,也不要拿别人的来冒充,被发现就太尴尬了。曾经遇到过一个小伙子的简历,在最上方就贴了 github 地址,我就满怀欣喜地点进去一看,发现 repo 还不少,随机点开一个看源码,感觉还挺有想法的。但是看到后面,却在其代码注释中看到一个博客地址,再进去一看,却明显感觉画风偏女性啊。一番追溯,最后发现,原来这小伙直接拿了别人的代码拷贝过来,在自己的 github 中新开了个 repo,却连那位小姐姐的博客地址都忘了删掉,太尴尬了。但其实,就算删了也没用,因为如果在面试中被问起源码中的细节,仍旧答不上来,是会被怀疑个人诚信有问题的。一旦诚信出问题,哪怕技术再牛,也会被 pass 掉的。另外的一点,就是有些企业在面试程序员的时候,得先做一份笔试题。请记住,在做试卷的时候,千万不要用手机上网查答案。本身作弊的行为就不好,再加上如果面试官在暗处进行观察,发现你作弊,那就太尴尬了。所以会就是会,不会就是不会,就算你把卷子都填满了,但当面试官再次摊开卷子逐个问你解题思路的时候,你回答不上来,岂不是更尴尬。5、最后的提问环节面试的最后,都会有提问环节。我发现一个很奇怪的现象,很多同学往往在这个环节提不出什么问题。面试,是双选选择的一个过程。在自身的技术能力达到对方要求的前提下,当然还得考察这家公司是否适合自己的发展。有一些思路,可以提供给你。比如,互联网行业都是需要加班的,那么就可以问与加班相对应的补偿机制,是否有调休,或者加班费?还可以问加班的频率等等。我在想,其实我们并不是不愿意加班,而是期望能通过加班给自己带来多少收益,换言之,加班的价值对于个人来说体现在哪里。当然不仅是金钱方面的回报,还有从项目中获得的成长与收获。又比如,可以问问团队内部是否有技术分享,技术沙龙之类的活动。我们除了认真干活之外,还得考虑自身发展,分享或沙龙活动,能看出该团队的技术氛围如何,浓郁的技术氛围能帮助我们快速成长。我觉得,如果长期得不到技术能力上的增长,或许可以尝试着跳出舒适区,去寻找新的方向了。此外,更进一步地,可以问问公司对于员工的晋升有什么制度,职级又是如何划分的,这些都与个人的发展息息相关。如果你觉得希望不大,也可以让面试官给一些建议啊,比如自己有哪些方面比较欠缺,接下来可以如何更进一步地深造。我一直认为,面试除了是检验自身能力的一场试炼之外,还是一次向前辈讨教学习的极佳机会。而且,只有问清楚了上面的这些,你才能在与 HR 聊薪酬与福利待遇的时候,进退有度啊6、厕所与办公环境在上门面试时,建议抽空去卫生间看一下。主要是因为通过卫生间的情况,可以侧面了解企业管理者对治理企业的态度。如果一家公司的卫生间装修得不错,卫生条件也 ok,甚至连厕纸的质量都挺好,那么在其他方面,对待员工应该也差不到哪里去。因为根据我从业这些年的经历来看,我所见过的企业中,几乎都满足这一条。不好的企业,卫生间一定比较破,设施坏了也不会及时修理,可能连厕纸都没有。而好的企业,卫生间设施干净,厕纸也比较厚与柔软。如果大家平时留意一下的话,就会发现,一些好的商场,高档的酒店,对于卫生间的装修和干净程度的要求,相对都会比较高。另外,顺道还可以一路观察办公环境,不求工作环境高大上,起码要整洁干净,如果办公环境明亮宽敞,干净整洁,大家要么安静地在做自己的事情,要么三两个聚在一起小声讨论问题的话,那么从工作环境上说还是个挺不错的企业的。关于 996.ICU说起近期 github 上最火的 repo 非 996.ICU 莫属了。什么是 996.ICU ?工作 996,生病 ICU。随之又诞生了另一个与之对立的 repo,955.WLB,工作 955,work–life balance (工作与生活的平衡)。它们都呼声都很高。此外,还看到过一些与之相关的插件,比如通过 eslint 控制每天 18:00 之后静止提交代码,周六周日 禁止代码变更。又比如,通过 precommit 钩子来禁止 git 提交等等。其实我觉得,是否迎合 996 工作制,完全看自己。如果你觉得太辛苦,完全可以换一个相对轻松一些的工作,996 的工作强度并非有利于每个人的成长速度。而另一方面,正像某位大佬说的,现在的 996 工作制度,在未来的某一天回首时,会发现它是正确的选择,能扛下来的人,都会得到相应的成长。从某方面来说,我是认可这一点的,因为我早在两年前,就开始给自己实行 996 了。利用更多的业余时间,夯实基础,不断学习,并开始陆陆续续地写一些东西。太过舒适的环境,就像温水煮青蛙,当有一天生存环境崩塌时,再想跳却力不从心了。技术人,应当保持一定的技术敏感度,学习是终生的事情。前端的发展非常迅猛,体系也很庞杂,如果你觉得遇到了瓶颈,那就试着跳出舒适区。不要将自己限制在浏览器端,因为 Node 是一条通往服务端的路,RN / Flutter 则是另一条通往客户端的路,还要好多的路,就不一一列举了。所以,要有信念,JavaScript 是可以一统天下的(凑不要脸地给自己打气 ^_^)。我的原创干货值得庆幸的是,我警醒得还不晚。所以,在 2018 年底,我开了个人公众号 《超哥前端小栈》,并坚持每周更新一篇,计划先坚持一年。会同步更新到 掘金、 segmentfault 以及 github 上。主要聊聊技术 和 面试,聊聊前端人的成长,不定期还会有内推岗位,希望成为你的陪伴者。每一篇公众号,都会耗费我大量的时间,有时甚至是连续几个晚上赶进度。因为我想把我理解的东西,用最通俗易懂的方式,朴实无华地表述出来。一般写完后,我还会再校验至少 2 遍,精简内容,提炼精华,检查表述是否到位,语句是否通顺,有无错别字等等。每周发布完一篇之后,是我最焦虑的时候,因为下一篇该写什么,还没有着落。看过我公众号的同学,或许会觉得有些奇怪,我的文章似乎没有太多成体系的关联。那是因为我每次写的文章,都比较偏实战,灵感主要来源于一些朋友以及小伙伴们,在实际工作中遇到的问题。我看出了问题背后的本质,是因为没有理解某个知识点。而且我觉得这些问题,也许也有同学会遇到,所以就整理成文了。目前出了大概这样几个系列:面试、干货、源码、感悟。面试系列:今日头条 面试题和思路解析如何实现一个圣杯布局?伪类与伪元素的区别及实战this的原理以及用法ES6 中箭头函数的用法理解函数的柯里化JavaScript 中的事件机制(从原生到框架)数组去重(10 种浓缩版)干货系列:细说 async/await 相较于 Promise 的优势Javascript中的异步编程细说 call、apply 以及 bind 的区别和用法细说 Array 的常用操作(ES5 和 ES6)一些有趣的 CSS 魔法和布局(上)一些有趣的 CSS 魔法和布局(下)源码解读:还在恐惧读源码?看完这篇就不怕了我从 lodash 源码中学到的几个知识点个人感悟:2018再见!「写在寒冬」分享给前端er的求职和成长建议以及今天的这篇,面试王者的出装方案推荐——软技能篇岗位内推我所在的公司,福利待遇绝对是具有竞争力的,也有明确的晋升通道,每周还有两次内部分享。厕所的装修很高档,厕纸很厚也很软。办公环境舒适,工作氛围更是浓郁,不时地总能看见几人一圈围在一起讨论技术问题。寒冬期,在这儿一点都不冷,因为。。。莉莉丝游戏招 中高级前端工程师 啦!!!你玩过《小冰冰传奇([刀塔传奇])》么?你玩过《剑与家园》么?你想和 薛兆丰老师 成为同事么?有兴趣的同学,可以 关注下面的公众号 加我微信 详聊哈~ ...

April 8, 2019 · 1 min · jiezi

如何准备阿里技术面试?终面官现身说法!

春暖花开的季节,阿里巴巴的春招面试正如火如荼地进行着。相信同学们也在面试这块做了许多准备,那么,参加阿里的面试需要注意些什么?今天,我们特别邀请到资深终面官永叔给同学们送上最实用的面试秘籍。嘉宾简介:永叔,资深算法专家,5届校招终面官,历任职于淘宝、阿里妈妈、搜索、优酷等多个部门,主要研究方向为大规模分布式机器学习算法,多模态交互搜索推荐系统,算法博弈论。Q:面试官看简历,最关注哪些部分?A:导师和实验室、研究方向都会关注,还有他的论文,我们都会提前去下载来看,并提前准备问题。其他信息我们会也看看有没有加分项。细节上,邮箱的名字能看出来有些同学很重视细节。TIPS:简历第一页一定要把最关键的信息写上,简历篇幅不要太长。Q:面试过这么多同学,您对同学们有什么面试忠告?A:面试的基本要点很多,很多同学容易犯的一些小问题,我总结几个点分享给大家:1、一定不要迟到,这是起码的尊重。对面试官也是这样的要求。2、对简历内容要有准备。对自己的突出点,包括技术/个性上的亮点,要练习表达,避免临时组织语言。3、尊重事实,如实回答。每个同学擅长点不同,面试官风格也不同,问到自己不清楚的地方,请不要试图去强掰,实事求是回答就好。4、心态放平。碰到压力面试的时候,不要试图去挑起PK的氛围。在面试过程中,面试官的最终目标是希望帮助面试同学,找到问题最优解。做好自己,平时多加练习。Q:面试到底面哪些维度?同学们需要怎么准备?A:阿里的用人理念是非凡人、平常心、做非凡事。我们期待的人员特质是聪明、乐观、皮实、自省。下面用技术类的同学举个例子:计算机类的同学,我们更关注基础。公司有一套完整的流程体系去培养一个工程师,面试更多是基础素质的考察,比如概率、矩阵等。不用特意准备,但基础的知识还是需要去复习的。此外,我们更多看的是你思考的路径,思考的工具和方法,你应对问题的反应如何,过程中融入一些软技能的考察。当然,我们还会考察学生的潜力。自己的项目经历,论文等,这一块的考察我们首先会确认真实性,更多的会关注细节。千万不要把别人的项目写到自己的项目里面,一旦发现后果很严重。另外,Coding能力是必须的,建议一定要练习,并且我们有速度要求。面试官面试过程中会要求在线写代码,实时同步过程。主要考察编码风格、准确性、熟练程度。毕竟没有哪个面试官会用一个在工作技能上无法和团队合作开展工作的人。Q:学历是不是招聘门槛?A: 我们只以能力论英雄,不会看学历。这几年的面试过程中,我们发现一个现象:很多优秀的同学,在日常学习中会主动去了解、重视企业需要的能力项,并不断通过自学习去拉近自己与目标值的距离。这个是非常好的趋势。Q:哪些因素会导致同学面试不通过?A: 我们不会因为学生某个能力不足就PASS掉。面试是一个逐步肯定的过程,不是一个否定的过程。一般面试官最后都会问,你有什么问题要问我的吗?其实面试官希望知道的是同学对职位/部门/公司是否有了解,基于你了解的信息你有什么样的问题,如何在这个环节提出高质量的问题,也反应出来你对这个面试是否重视。但很遗憾,这个环节能回答好的同学并不多。最后这个提问机会是给到他展示自己综合能力的机会,但很多人却把这当做面试结果“comfirm”的环节。还有同学拿问题去考面试官,或者纠结于某个问题应该怎么去回答,完全忘记了面试是展示自己,不是学习交流,也不是PK。Q:如果碰到特殊情况,同学该怎么做?A:整个面试的节奏是面试官和同学共同营造的,所以需要有明显的节奏感。有些问题同学确实任何想法都没有的,或者觉得题意不清晰,一定要确认清楚,请求面试官的确认。现场状态不OK的情况下,一定要说NO,不用去迎合面试官,比如电话质量很差。我们要的是展示自己,面试官做的是协助同学展示最好的自己。Q:说说您面试过哪个同学,让您印象最深刻?A:2018年,我面试过一个同学,目前他已经入职我的团队,面试的时候他提到自己的生活习惯,对管理自己的时间还是很有想法的,自律程度让人吃惊。入职之后,这个同学他也是这么做的,每天早上6-9点是他的学习时间。每天早上6点钟-8点在家看书,8点到公司后,继续再看1个小时的书,风雨无阻。他学习结束,其他人才刚到公司。工作之余,他还投入在工作论文的发表上,刚投出去2篇。业务上,他现在是我们团队的骨干力量。从对他的观察里面,不难发现,优秀的同学基本都来自于高度的自律。Q:您经历过的最糟糕的面试是什么?A:我曾经面试过一类候选人,2分钟的自我介绍候选人滔滔不绝,没有重点,所有问题都会发散,整个面试的过程一直在show off自己,但没有get到问题的关键点。整个面试体验是非常糟糕的。Q:很多学生困惑于该怎么选择岗位,您有什么建议呢?A:尽可能了解这个岗位未来的职业发展是什么样的,是否具备岗位的敲门砖。阿里不同部门内推信息网上有很多,可以找相关的师兄去问。同时,可以去做一些测评,看看自己是否对自我有足够的认知。本文作者:春招火热进行中的阅读原文本文来自云栖社区合作伙伴“ 阿里技术”,如需转载请联系原作者。

April 8, 2019 · 1 min · jiezi

PHP面试常考之设计模式——策略模式

你好,是我琉忆,PHP程序员面试笔试系列图书的作者。本周(2019.3.11至3.15)的一三五更新的文章如下:周一:PHP面试常考之设计模式——工厂模式周三:PHP面试常考之设计模式——建造者模式周五:PHP面试常考之设计模式——策略模式自己上传了一本电子书“5种原则和23种设计模式”到百度云,关注公众号:“琉忆编程库”,回复:“23”,我发给你。以下内容如需转载,请注明作者和出处。策略模式介绍策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。UML图说明抽象策略角色: 策略类,通常由一个接口或者抽象类实现。具体策略角色:包装了相关的算法和行为。环境角色:持有一个策略类的引用,最终给客户端调用。应用场景1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。使用策略模式的好处1、 策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码。2、 策略模式提供了可以替换继承关系的办法。继承可以处理多种算法或行为。如果不是用策略模式,那么使用算法或行为的环境类就可能会有一些子类,每一个子类提供一个不同的算法或行为。但是,这样一来算法或行为的使用者就和算法或行为本身混在一起。决定使用哪一种算法或采取哪一种行为的逻辑就和算法或行为的逻辑混合在一起,从而不可能再独立演化。继承使得动态改变算法或行为变得不可能。3、 使用策略模式可以避免使用多重条件转移语句。多重转移语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重转移语句里面,比使用继承的办法还要原始和落后。实现代码<?phpheader(“Content-type:text/html;Charset=utf-8”);//抽象策略接口abstract class Strategy{ abstract function wayToSchool();}//具体策略角色class BikeStrategy extends Strategy{ function wayToSchool(){ echo “骑自行车去上学”; }}class BusStrategy extends Strategy{ function wayToSchool(){ echo “乘公共汽车去上学”; }}class TaxiStrategy extends Strategy{ function wayToSchool(){ echo “骑出租车去上学”; }}//环境角色class Context{ private $strategy; //获取具体策略 function getStrategy($strategyName){ try{ $strategyReflection = new ReflectionClass($strategyName); $this->strategy = $strategyReflection->newInstance(); }catch(ReflectionException $e){ $this->strategy = “”; } } function goToSchool(){ $this->strategy->wayToSchool(); // var_dump($this->strategy); }}//测试$context = new Context();$context->getStrategy(“BusStrategy”);$context->goToSchool(); ?>自己上传了一本电子书“5种原则和23种设计模式”到百度云,关注公众号:“琉忆编程库”,回复:“23”,我发给你。自己编写的《PHP程序员面试笔试宝典》和《PHP程序员面试笔试真题解析》书籍,已在各大电商平台销售。书籍在手,Offer我有。更多PHP相关的面试知识、考题可以关注公众号获取:琉忆编程库对本文有什么问题或建议都可以进行留言,我将不断完善追求极致,感谢你们的支持。

March 15, 2019 · 1 min · jiezi

前端常见面试题总结

个人总结的一些常见面试题,欢迎各位star,issues,同时非常欢迎贡献问题!一起来完善.不定期更新常见前端面试题总结

March 13, 2019 · 1 min · jiezi

PHP面试常考之设计模式——建造者模式

你好,是我琉忆,PHP程序员面试笔试系列图书的作者。本周(2019.3.11至3.15)的一三五更新的文章如下:周一:PHP面试常考之设计模式——工厂模式周三:PHP面试常考之设计模式——建造者模式周五:PHP面试常考之设计模式——策略模式自己整理了一篇“什么是观察者模式?”的文章,关注公众号:“琉忆编程库”,回复:“观察”,我发给你。以下内容如需转载,请注明作者和出处。建造者模式介绍建造者模式又名生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。例如,一辆汽车由轮子,发动机以及其他零件组成,对于普通人而言,我们使用的只是一辆完整的车,这时,我们需要加入一个构造者,让他帮我们把这些组件按序组装成为一辆完整的车。UML图UML图说明Builder:抽象构造者类,为创建一个Product对象的各个部件指定抽象接口。ConcreteBuilder:具体构造者类,实现Builder的接口以构造和装配该产品的各个部件。定义并明确它所创建的表示。提供一个检索产品的接口Director:指挥者,构造一个使用Builder接口的对象。Product:表示被构造的复杂对象。ConcreateBuilder创建该产品的内部表示并定义它的装配过程。包含定义组成部件的类,包括将这些部件装配成最终产品的接口。实现示例<?php /*** chouxiang builer*/abstract class Builder{ protected $car; abstract public function buildPartA(); abstract public function buildPartB(); abstract public function buildPartC(); abstract public function getResult();}class CarBuilder extends Builder{ function __construct() { $this->car = new Car(); } public function buildPartA(){ $this->car->setPartA(‘发动机’); } public function buildPartB(){ $this->car->setPartB(‘轮子’); } public function buildPartC(){ $this->car->setPartC(‘其他零件’); } public function getResult(){ return $this->car; }}class Car{ protected $partA; protected $partB; protected $partC; public function setPartA($str){ $this->partA = $str; } public function setPartB($str){ $this->partB = $str; } public function setPartC($str){ $this->partC = $str; } public function show() { echo “这辆车由:”.$this->partA.’,’.$this->partB.’,和’.$this->partC.‘组成’; }}class Director{ public $myBuilder; public function startBuild() { $this->myBuilder->buildPartA(); $this->myBuilder->buildPartB(); $this->myBuilder->buildPartC(); return $this->myBuilder->getResult(); } public function setBuilder(Builder $builder) { $this->myBuilder = $builder; }}$carBuilder = new CarBuilder();$director = new Director();$director->setBuilder($carBuilder);$newCar = $director->startBuild();$newCar->show();?>自己整理了一篇“什么是观察者模式?”的文章,关注公众号:“琉忆编程库”,回复:“观察”,我发给你。自己编写的《PHP程序员面试笔试宝典》和《PHP程序员面试笔试真题解析》书籍,已在各大电商平台销售。书籍在手,offer我有。更多PHP相关的面试知识、考题可以关注公众号获取:琉忆编程库对本文有什么问题或建议都可以进行留言,我将不断完善追求极致,感谢你们的支持。 ...

March 13, 2019 · 1 min · jiezi

7 个Web开发工程师面试题和回答策略

翻译:疯狂的技术宅原文:https://www.indeed.com/hire/i…本文首发微信公众号:jingchengyideng欢迎关注,每天都给你推送新鲜的前端技术文章不管你是面试官还是求职者,里面的思路都能让你获益匪浅。Web开发人员的职责是什么?解析:Web工程师应该充分了解自己的角色,以及怎样为Web设计和开发做出贡献。这个问题能帮助面试官了解求职者打算怎样配合团队,以及他们是否知道自己要做些什么。面试官想知道什么:清楚地了解Web开发过程他们强调那些职责他们打算怎样发挥自己的能力参考答案:Web工程师负责设计、开发、增强、测试和部署Web应用,其最终目标是创建引人入胜而且用户友好的站点布局和功能。开发人员负责收集并定义需求、维护网站、排除故障并修复错误,遵循最佳开发实践并与其他团队协作。是什么引发了你对Web开发的兴趣?解析:求职者是否很早就成为了Web开发人员?他们是自学成才吗?了解候求职者选择这个方向的原因有助于确定他们对该职业的热情和信心。面试官想知道什么:热情动机经验参考答案:我以前的工作是营销协调员,我经常使用在线工具来制作电子邮件广告。后来我找到了拖放功能的bug,并发现如果我直接编辑HTML,可以很灵活的实现我想要的外观。这时我开始着迷于Web开发人员具有想象力、艺术性和技术性的能力,同时想开发出一种对他人有帮助的产品。什么是W3C,它为什么很重要?解析:Web开发人员应对其生成的内容负责,要确保所有用户都可以访问,并遵循W3C标准。这个问题将告诉你求职者是否具 W3C 的知识并在工作中遵循它们。面试官想知道什么:基本知识关心标准关于他们如何遵守标准的细节参考答案:W3C 的意思是 World Wide Consortium,它是一个专注于开发和标准化 Web 的国际社区。作为Web开发人员,强制执行这些标准可确保所有浏览器都能访问Web内容,并优化用户体验。例如:使用符合 W3C 标准的 CSS 和 XML 可以使每个网站的功能相似,也可以改善搜索引擎优化。解释如何优化和减少Web应用的加载时间。解析:几乎一半的用户希望在两秒钟内加载网页。提出此问题以了解求职者是否了解页面加载时间对用户体验的影响,以及Web开发人员应如何优化加载时间。面试官想知道什么:他们对优化Web应用的重视程度了解可用于分析网站速度的工具他们具有优化能力的证据参考答案:尽管有很多技术手段能减少加载时间,但我始终依赖优化图像、启用浏览器缓存和最小化HTTP 请求。我评估网站速度的首选工具是 Google PageSpeed Insights。我曾经通过 soley 启用浏览器缓存,成功地将页面加载时间从 2.1 秒减少到 0.7 秒。HTTP/2 和 HTTP 1.1 有什么区别?解析:是否了解并使用过 HTTP/2 ,能够体现求职者的知识水平,让你了解他们是否能够跟上技术的发展。面试官想知道什么:整体 HTTP 知识能够回忆起具体细节洞察他们的技术水平参考答案:HTTP/2 旨在提高 Web 应用的性能,可以减少加载时间并改善浏览器与服务器之间的通信,并且能够使应用更简单、快速。我非常支持使用 HTTP/2,因为我曾经分析过相关数据,并知道了 HTTP/2 是如何将页面加载时间减少20%的。你熟悉哪种编程语言?解析:HTML,CSS,SQL,PHP,Ruby,Python 和 JavaScript 是 Web 工程师应该能够轻松驾驭的常见编程语言。这个问题能帮助面试官评估求职者的经验、偏好、优势和劣势。面试官想知道什么:熟悉的编码语言对特定语言的偏好程度是否适合岗位和公司参考答案:我精通 HTML、CSS 和 PHP,并且 SQL 和 JavaScript的水平也不错。我打算学习 Python,最近正在研究适合自己的Python课程,以便在空闲时间学习。你怎样平衡客户的苛刻要求?解析:Web 开发工程师可能面临意想不到的挑战,包括缩短开发周期和面对过于雄心勃勃的客户。清楚地了解求职者如何处理这种情况,将有助于面试官了解他们做事的优先级和思考过程。面试官想知道什么:在压力下的表现沟通技巧致力于发布高品质的产品参考答案:在我面对苛刻的需求时,会想办法充分了解对方的真正要求,优先处理自己的任务并与客户保持开放的沟通渠道。我很难容忍Bug的产生,也不赞成用一些取巧的手段破坏最终的产品形态,不过让客户满意是一个高度优先的选项。我会随时向客户通报我的进展并高效地完成任务。欢迎继续阅读本专栏其它高赞文章:12个令人惊叹的CSS实验项目世界顶级公司的前端面试都问些什么CSS Flexbox 可视化手册过节很无聊?还是用 JavaScript 写一个脑力小游戏吧!从设计者的角度看 ReactCSS粘性定位是怎样工作的一步步教你用HTML5 SVG实现动画效果程序员30岁前月薪达不到30K,该何去何从7个开放式的前端面试题React 教程:快速上手指南本文首发微信公众号:jingchengyideng欢迎扫描二维码关注公众号,每天都给你推送新鲜的前端技术文章

March 9, 2019 · 1 min · jiezi

7个 HTML 面试题及回答策略

翻译:疯狂的技术宅原文:https://www.indeed.com/hire/i…本文首发微信公众号:jingchengyideng欢迎关注,每天都给你推送新鲜的前端技术文章不管你是面试官还是求职者,里面的思路都能让你获益匪浅。你能不能用纯 HTML 写出页面?解析:有许多无需深入掌握 HTML 就能做出页面的工具。这个问题询问求职者,当他们可以借助一些工具生成页面时,对 HTML 还有多大的兴趣。面试官想知道什么:求职者对HTML的兴趣求职者从头开始构建网站的能力对网页构建工具的看法参考答案:网站构建工具非常适合外行和专业开发人员,但我认为了解底层技术非常重要,因此我可以更好地控制网站的外观和行为。例如,当我使用 WordPress 构建网站时,发现通过插入自己的 HTML 而不是依赖提供的工具,可以得到更好的结果。你还知道哪些其他语言?解析:今天的网站通常依赖于HTML,层叠样式表(CSS)和JavaScript。一个优秀的网站开发人员应该能够熟练使用这些语言。面试官想知道什么:面试者的知识面面试者是否可以用多种语言来构建网站面试者是否需要接受额外的培训参考答案:在我开发更大的网站时,习了CSS,因此我不必手动更新每个页面的外观。我也有一些 JavaScript 经验。我只知道基本功能,但我可以使用它们来使网站更有用和互动。我一直在观看教程,以使我的 JavaScript 功能更强大。你将如何帮助我们的内容团队获得更好的搜索引擎结果?解析:理想情况下,你需要一位了解搜索引擎友好重要性的 HTML 专家。这个问题能够解释求职者是否理解良好的 HTML 对搜索引擎的重要性,以及在搜索引擎结果页面(SERP)上获得更好的排名方面可以发挥的作用。面试官想知道什么:了解搜索引擎排名的重要性批判性思维技巧能够与他人合作参考答案:我想做几件事来确保你的网站获得最高排名。我首先要创建一个帮助搜索引擎蜘蛛浏览网站的站点地图。接下来,我会检查每个页面以确保它使用有用的标签,包括标题标签。最后,我会使用链接检查器找到网站上失效的链接。对你来说,创建一个新网站最困难的部分是什么?解析:了解申请人的优缺点非常重要。这个问题让面试官有机会了解潜在员工对工作难以胜任的部分。面试官可能需要考虑这种弱点对团队的影响。面试官想知道什么:找出求职者的优点和缺点确定求职者的正确职位团队能不能接受求职者参考答案:我对规划阶段感到非常沮丧。准确了解网站的外观会告诉我如何构建网站。我对这部分有点迷恋,因为我希望网站看起来尽可能完美。你最喜欢HTML5的哪些功能?解析:HTML5 是 HTML 的最新版本。通过提出这个问题,面试官可以发现求职者是否了解构建网站时使用的最新元素和属性。此问题还可以用来确定求职者对技术的热情。面试官想知道什么:求职者对 HTML5 的熟悉程度求职者是否跟上技术的发展求职者是否适合当前项目参考答案:今天的互联网用户希望找到包含视频、音乐和动画的多媒体内容。 HTML5 为最新的多媒体文件提供了更稳定的环境。我最喜欢的是可以向网站添加多媒体内容,而不必担心网站会崩溃或拒绝播放内容。你如何改进我们公司当前的网站?解析:这是一个重要的问题,测试求职者的技术知识和批判性思维技能。它还能揭示求职者在面试前是否花时间研究你的业务。寻找解决用户体验、布局和其他功能的深思熟虑的答案。你不必同意求职者的意见,但你应该找到提议背后的逻辑。面试官想知道什么:批判性思维技巧求职者愿意质疑了解求职者的审美观点参考答案:我认为该网站的布局很好,使访问者可以轻松找到他们需要的内容和产品。另一方面,我不喜欢当访问主页时视频自动开始播放。我会禁用自动播放功能,让访问者点击播放按钮。“你想在未来几年内开发哪些类型的项目?解析:这个问题的答案让你对求职者的职业规划有所了解。它还展示了人们感兴趣的挑战类型。面试官可能会发现自己公司的计划与未来员工的职业目标是否保持一致。面试官想知道什么:求职者的职业规划这个人能呆多久求职者需要什么类型的培训参考答案:我对开发交互式网站和应用感兴趣,因此我一直在学习更多有关 JavaScript、Ruby on Rails、Swift、React 和变得越来越重要的知识。理想情况下,我想开发一个将 VR 整合到网站或应用中的项目。欢迎继续阅读本专栏其它高赞文章:12个令人惊叹的CSS实验项目世界顶级公司的前端面试都问些什么CSS Flexbox 可视化手册过节很无聊?还是用 JavaScript 写一个脑力小游戏吧!从设计者的角度看 ReactCSS粘性定位是怎样工作的一步步教你用HTML5 SVG实现动画效果程序员30岁前月薪达不到30K,该何去何从7个开放式的前端面试题React 教程:快速上手指南本文首发微信公众号:jingchengyideng欢迎扫描二维码关注公众号,每天都给你推送新鲜的前端技术文章

March 8, 2019 · 1 min · jiezi

7个 Javascript 面试题及回答策略

翻译:疯狂的技术宅原文:https://www.indeed.com/hire/i…本文首发微信公众号:jingchengyideng欢迎关注,每天都给你推送新鲜的前端技术文章不管你是面试官还是求职者,里面的思路都能让你获益匪浅。单体应用和微服务架构之间有哪些主要区别,从灵活性和可扩展性的角度来看,哪个是更好选择?解析:这个问题用来评估基础编码知识。答案可以有多种,所以应该注意倾听具体的问题,并尽量全面回答,来展示自己对单体应用与微服务架构的理解。面试官想知道些什么:求职者对编码的熟悉程度求职者对不同构建方法利弊的理解是否具有从单体应用服务过渡到微服务的能力参考答案:设计单体架构在短期内成本较低,但代码在内存是单一的内聚单元。微服务架构提供了灵活性和可扩展性,因为每个组件都是一个独立的程序。同步和异步编程有什么区别,异步编程与你的 JavaScript 工作有什么关系?解析:异步编程允许多个并发操作,并且它非常适合 JavaScript 程序。这个问题评用来估求职者的编码知识,以及对 JavaScript 的具体理解。面试官想知道些什么:能够清晰地表达同步和异步编程之间的差异异步编程对用户界面的影响了解阻塞以及对性能的影响参考答案:简单来说,同步编程意味着代码以线性方式执行。这些程序通常不能同时处理多个操作。使用异步编程,有一个事件循环。一个程序线程可以处理多个操作。由于 JavaScript 通常用于用户界面,因此同时运行多个操作的能力可以带来更好的用户体验。你是否在 JavaScript 中使用过类继承和原型继承?为什么?解析:这个问题有助于了解求职者是否具有 JavaScript 经验和专业知识。原型继承比类继承更容易、更灵活,这是判断一个有经验的 JavaScript 程序员的首选方法。面试官想知道些什么:是否偏爱原型继承和组合具有阐明这种偏好的原因的能力函数继承,原型链继承,原型委托和对象组合参考答案:当使用类继承时,实例继承自类,这会产生分层。而通过原型继承,实例继承自其他对象,并且可以从多个对象创建。我更喜欢原型继承,因为它更简单、更灵活。在你看来,类继承是否是正确的选择?如果是的话,是在什么情况下?如果不是,为什么?解析:求职者的答案能让面试官深入了解他们使用 JavaScript 的经历。类继承有意义的情况很少,求职者可能会说根本没有。 否定的答案优于对适当情况冗长的描述,因为这些通常是基于错误信息的。面试官想知道些什么:类继承永远或几乎从来都不是正确的选择求职者能否阐明其回复的原因求职者有能力用逻辑来捍卫他们的结论参考答案:类继承几乎从来都不是正确的解决方案。只有在极少数情况下,它可能被用到。你如何定义函数式编程?函数式编程在 JavaScript 中的作用是什么?解析:函数式编程是目前 JavaScript 使用的基本原则。求职者是否能够完整的回答这个问题,可以证明他们的基础知识是否扎实。面试官想知道些什么:提及纯函数和避免副作用能够提供函数式编程语言的示例能够认同 JavaScript 的函数式编程,并具有使用它们的能力参考答案:函数式编程允许通过使用纯函数来设计软件。此方法避免了很多编程问题,如共享状态,副作用和可变数据。它作为面向对象编程的替代方案,其中应用状态通常与对象中的方法搭配并共享。使用函数式编程方法而不是面向对象编程有什么好处?你能提供一个例子吗?解析:任何具有 JavaScript 经验的求职者都会使用其中一种风格,因此应该能够对每种风格的优缺点提出一些看法。这个问题可以帮助面试官衡量求职者使用 JavaScript 的深度。面试官想知道些什么:能够阐明任何一种方法的优缺点提及共享资源导致的问题了解函数式编程如何简化应用程序参考答案:虽然我主要使用面向对象编程方式,但是我更希望用函数式编程开发。在用面向对象编程时遇到不同的组件竞争相同的资源的时候,更是如此。你如何定义单向数据流和双向数据绑定?两者有什么区别?解析:这个问题能够说明求职者对 JavaScript 重要基本原则的深刻理解。不熟悉这些条款的求职者可能没有该职位所需的经验。面试官想知道些什么:能够清晰、简洁的定义这两个概念能够阐明两个概念之间的差异提及相关的框架参考答案:当模型是单一事实来源时,会发生单向数据流,React 就是一个例子。双向数据绑定是用户界面与模型数据动态链接的状态。如果用户界面中的字段发生了变化,模型也会发生变化,比如 Angular。欢迎继续阅读本专栏其它高赞文章:12个令人惊叹的CSS实验项目世界顶级公司的前端面试都问些什么CSS Flexbox 可视化手册过节很无聊?还是用 JavaScript 写一个脑力小游戏吧!从设计者的角度看 ReactCSS粘性定位是怎样工作的一步步教你用HTML5 SVG实现动画效果程序员30岁前月薪达不到30K,该何去何从第三方CSS安全吗?谈谈super(props) 的重要性本文首发微信公众号:jingchengyideng欢迎扫描二维码关注公众号,每天都给你推送新鲜的前端技术文章

March 6, 2019 · 1 min · jiezi

7 个开放式的 CSS 面试题及回答策略

翻译:疯狂的技术宅原文:https://www.indeed.com/hire/i…不管你是面试官还是求职者,里面的思路都能让你获益匪浅。你用 CSS 多久了?解析:这个问题可以让面试官了解求职者使用 CSS 的经验。它还可以告诉面试官该人是否将该技能作为业余爱好或在学术或专业环境中学习。面试官想知道些什么:求职者使用 CSS 的经验对创建网站的兴趣是否持续关注新技术参考答案:我在高中时就开始用 CSS 了。当时我和一些朋友为我们喜欢的电视节目搭了一个网站。不过这些页面很差劲,因为它们没有统一的风格。每个页面的字体和颜色都不一样。后来我学会了 CSS,这样就可以很轻松的使页面风格统一。你最喜欢的 CSS 功能是什么?解析:求职者最喜欢 CSS 的哪些功能并不重要。通过这个人是否能够熟练的地谈论 CSS,能够看出他 CSS 了解多少。面试官想知道些什么:求职者对 CSS 的经验对 CSS 的了解如何用 CSS 节省时间参考答案:我非常喜欢用 CSS 改变页面布局这个功能,因为这样可以适配不同的屏幕尺寸。现在有各种尺寸和形状的设备。如果你能正确的使用 CSS,在任何设备上访问你网站的体验都会很好,不管是用 iPhone 还是用 PC 浏览你的网站都没关系。你有没有把 CSS 与其他语言结合使用?解析:Web开发人员通常依赖好几种语言来构建动态网站。通过面试者的答案可以得知他都知道哪些开发语言。如果面试官单独提出某种语言,还可知道面试者对该语言的理解有多深。面试官想知道些什么:对前端设计的兴趣其他语言技能是否具有创造性解决问题的能力参考答案:通常我用 CSS 来创建网站页面的总体布局并进行美化。另外我还将用 HTML 为页面提供一些结构。当我需要向网站添加交互式元素、动画、音乐或其他功能时,更喜欢使用 JavaScript,因为它能够很方便的实现一些逻辑。“你能告诉我一个让你学到新 CSS 技术的项目吗?解析:这个问题鼓励面试者反思他们使用CSS的经历。答案可能会揭示一些事情,例如面试者对 CSS 有多少经验,以及他们如何使用批判性思维来解决困难问题。面试官想知道些什么:对 CSS 的了解使用 CSS 的经验是否具有批判性思维参考答案:我在大学里做过一个项目,这个项目能帮助图书管理员和工程师团队对内容进行数字化。我的小团队打算把图书馆里收藏的大量手写诗集数字化。花费精力最多的一个功能是:写了一个能够容纳各种大小和形状的诗词稿件的样式。你最喜欢的一个项目是什么?This question gives you some insight into what the interviewee enjoys. The answer says more about the applicant’s personality than programming skills. 通过这个问题可以深入了解求职者的经验。答案更多地揭示了求职者的个性而不是编程技巧。面试官想知道些什么:了解 CSS 的好处能够创造性的解决问题面试者如何应对挑战参考答案:我帮一位朋友写了一个发布文章、照片、音乐和各种媒体的在线杂志,这个项目并不难,几个小时后,他的网站从 OK 变为优秀。它让我想起为什么了解 CSS,JavaScript 和其他常用语言非常重要。如果没有一个好的网站来展示它,你所做的都没有什么意义。当你忘记某个 CSS 的功能时,是怎么解决的?解析:程序员不能把所有东西都放在脑子里,所以当他们能想起特定的功能和术语时,会依赖一些资源。这个问题的答案能够知道求职者有没有可靠的资源,这些资源在未来开展项目时可能会派上用场。面试官想知道些什么深入了解 CSS 资源在哪里去查找 CSS 功能的资料Insider knowledge of CSS是否懂得 CSS 更深层次的知识参考答案:Mozilla开发者网络,简称 MDN,为我节省了大量的时间。这是一个在线资源,其中包含有 CSS、HTML和JavaScript 的资料。我也喜欢 w3schools.com 上的 CSS 教程。你最不喜欢 CSS 的哪些东西?解析:所有人都有不喜欢的工作。对这个问题的诚实回答可以帮助面试官为求职者提供合适的团队。例如,如果一个人喜欢在 CSS 文件中发现错误,那么你可能希望聘请这个人与一个喜欢专注于大局的创意人一起工作。面试官想知道些什么:了解 CSS 的优缺点了解求职者可以扮演什么角色了解求职者的其他兴趣参考答案:CSS 使网页设计变得更加容易,但它仍然感觉有点单调乏味。理想情况下,我想用动态语言让用户与网站进行互动。但就目前而言,我很乐意磨练自己的 CSS 技能并向更有经验的人学习。欢迎继续阅读本专栏其它高赞文章:12个令人惊叹的CSS实验项目世界顶级公司的前端面试都问些什么CSS Flexbox 可视化手册过节很无聊?还是用 JavaScript 写一个脑力小游戏吧!从设计者的角度看 ReactCSS粘性定位是怎样工作的一步步教你用HTML5 SVG实现动画效果程序员30岁前月薪达不到30K,该何去何从第三方CSS安全吗?谈谈super(props) 的重要性本文首发微信公众号:jingchengyideng欢迎扫描二维码关注公众号,每天都给你推送新鲜的前端技术文章 ...

March 4, 2019 · 1 min · jiezi

7个开放式的前端面试题

翻译:疯狂的技术宅原文:https://www.indeed.com/hire/i…不管你是面试官还是求职者,里面的思路都能让你获益匪浅。如何保证你的网站或 Web 应用的可访问性?解析:前端开发人员在为最终用户设计体验时需要充分掌控其可用性和可访问性。这个问题让面试官知道求职者对这些标准和最佳实践的了解。面试官想要知道些什么:实施可用性和可访问性标准的第一手经验保证可访问性的手段求职者是否曾经在项目中对可用性和可访问性做过实施参考答案:我在各种浏览器和设备上测试我的 Web 应用,检查在所有设备上的体验是否可用。我还使用流行的屏幕阅读软件和其他辅助解决方案来查看是否所有潜在用户都可以访问它。”你最喜欢 HTML5 的哪些功能,以及如何在前端项目中实现?解析:前端开发会在 HTML5 上花费大量时间,他们整合 Web 设计并实现各种功能,从而节省开发时间并改进最终产品。面试官想要知道些什么:深入了解 HTML5 功能能够清楚的解释求职者在过去的项目中是如何使用HTML5的对 HTML5 的创造性应用参考答案:与以前的版本相比,我喜欢 HTML5 对多媒体的支持。我使用此功能开发时,会把视频和音频作为用户体验的重要组成部分,而不必担心它无法正确加载或破坏页面。如何对 CSS 和 JavaScript 代码进行组织,以使其他开发人员更容易使用?解析:前端开发人员经常会处理由以前的员工创建的代码,或作为团队的一员工作。这个问题让面试官了解求职者能不能创建其他员工可以理解的网站或 Web 应用。面试官想要知道些什么:具有组织代码和注释代码的经验如果没有对代码进行恰当的注释会发生什么后果愿意让开发团队其他成员更轻松参考答案:我把站点的每个组件都分拆出了独立的代码。每个代码片段都有注释,以便其他开发人员可以更改它。你能解释一下 CSS float 的概念并举例吗?解析:该技术问题考察面试者对常见 CSS 元素的理解。这个问题用来筛选求职者,并确保他们不只是能够熟练使用 CSS 的好办法。面试官想要知道些什么:CSS float 的具体定义是什么求职者是怎样在他们的代码中使用此元素的是否能够向任何人解释这一技术概念参考答案:CSS float 告诉浏览器将特定元素放在容器的右侧或左侧。当我开发基于用户分辨率动态调整大小的页面时,使用float。”你是怎样处理特定浏览器的渲染问题的?你是否发现某个浏览器比其他浏览器更具挑战性?解析:基于每个浏览器的渲染的方式,前端开发人员必须将特定于浏览器的 hack 引入Web 应用和页面。对于求职者来说,这个常见的过程应该是比较熟悉的。面试官想要知道些什么:针对特定浏览器的解决方法示例了解浏览器如何呈现应用和页面了解特定浏览器的特点参考答案:我经常需要修改 Microsoft Edge 网页上的 DIV 位置。对于我来说,这个浏览器是最有问题的,因为我几乎不会在 Chrome 或 Firefox 上遇到这类问题。你通过哪些途径来了解最新的前端技术?解析:前端开发中的技术和标准在不断变化。拥有“持续学习”能力的求职者可以通过不断的学习,来获取改进开发过程和改善最终用户体验的方法。面试官想要知道些什么:求职者都读过什么技术书籍是否参与开源项目或个人有什么开源项目是否参加继续教育或在线课程参考答案:我有订阅了几个前端开发方面的杂志,并经常访问 Stack Overflow 论坛。这些资源帮助我了解前端开发的最新技术。你最喜欢的前端项目是什么?为什么?解析:这个问题可让面试官深入了解前端开发人员的个人偏好。一些求职者可能更倾向网站项目,而其他人更喜欢参与Web 应用团队。面试官想要知道些什么:对他们最喜欢的发展方向的见解他们描述该项目时表现出的热情他们最喜欢的前端项目的案例参考答案:我最近为当地医院开发了一个网络应用。它简化了患者的求医过程,当我知道自己的工作能帮助患者更快地获得所需的帮助时非常开心。欢迎继续阅读本专栏其它高赞文章:12个令人惊叹的CSS实验项目世界顶级公司的前端面试都问些什么CSS Flexbox 可视化手册过节很无聊?还是用 JavaScript 写一个脑力小游戏吧!从设计者的角度看 ReactCSS粘性定位是怎样工作的一步步教你用HTML5 SVG实现动画效果程序员30岁前月薪达不到30K,该何去何从第三方CSS安全吗?谈谈super(props) 的重要性本文首发微信公众号:jingchengyideng欢迎扫描二维码关注公众号,每天都给你推送新鲜的前端技术文章

February 28, 2019 · 1 min · jiezi

“寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面

如果第二次看到我的文章,欢迎下方扫码订阅我的个人公众号(跨界架构师)哟本文长度为5723字,建议阅读15分钟。坚持原创,每一篇都是用心之作~这是一篇以程序员视角写的文章,但是内容是互联网行业通用的。文章虽然有点长,但是这里的读者大部分还是互联网行业的,所以我认为值得你看完,应该会对你有所帮助。嗅觉比较灵敏的人在17年就感受到了互联网蓬勃发展的气息在明显减弱。直到17年下半年开始,越来越多的声音在喊互联网寒冬潮来了。到目前来看,势头好像越演越烈,还没有见顶的迹象。在这样的一个大环境下我想还是肯定有不少人,想找找机会。毕竟想着,危机危机,危中带机嘛。真实的大环境首先我们不得不承认一个事实,过去的互联网20多年,是一个开疆辟土的野蛮生长期,各方诸侯为了在一大片蓝海中抢占更多的地盘,竞争可谓激烈。所谓,竞争会带来局部溢价。竞争本事是个非理性的事情,因为此时有很大原因是为了竞争而竞争,战胜竞争对手的重要性远大于投入产出比的合理性。所以这会导致,越靠近核心链路的资源投入超配。其实我们生活中的很多事情就是如此,比如在学生时代拼读书成绩,那么一个家庭在教育上的投入肯定是超配的。为了成绩比其他人更好,可以投入很多成本进去,时间、金钱等等。程序员这个群体就是随着互联网时代的蓬勃发展开始快速增长。根据国家统计局的数据来看,完整体现了这个趋势。▲截图来源于国家统计局,点击图片查看大图可以看到这几年间,从业人员的涨幅,那可是所有行业的No1。而且,在2003年以前,这个群体还只是被划分在了“其他”里面。为什么涨那么快呢?正如前面所说,因为这行相对其他行业是有溢价的,而人又是逐利的,自然就越来越多的人向这个方向而来。所以从这个角度来说,程序员目前的薪资相对其他行业来说被“外部因素”干预是属于比较大的,包括运营,产品经理等这些互联网新起的岗位都是如此。当然了,归根到底这是一个市场的供需关系导致的,一个愿意来到这个行业一个愿意要你。但是我们要想一下,在寒冬之下,这个供需关系会有什么样的变化呢?我想告诉大家的一个信息是,如果放眼到整个中国社会来看,其实互联网行业并没进入什么寒冬。至少说对我们互联网从业人员的影响并算不上寒冬。可能你会问,那为什么会有那么多人在喊寒冬呢?瞎喊也不可能这么多人啊。没错,但是感官只是我们对身边所见的局部信息的一种结果认定,并且不代表全局。假如我们的视野仅限于传统的虚拟经济产业的话,目前的确进入到了一个转折点。出现了明显的瓶颈,甚至是负增长。从51job公布的招聘需求情况来看,也是如此。▲截图来源于51job但是,放眼于整个中国社会来看,国家正在推动供给侧改革,在供给侧的很多传统实体企业都需要进行数字化转型。这对我们老互联网人来说其实是开辟了一个新的大陆。所以,从整体来看,我们每一位互联网人不但没进入寒冬,反而获得了很多如20年前一样的新机会。最大的不同在于,过去的20年相当于重新建立了一个平行世界,而接下去的一段时间则是让旧世界变的更好。艾瑞咨询恰巧在这周一(2019.2.18)发布了一份最新的互联网就业相关报告(文末附下载连接),可以看到传统行业对互联网人才的需求度情况。▲截图来源于艾瑞咨询《中国互联网就业洞察白皮书》另外,从总量上来说,18年几个过去长期基于互联网发展的头部行业对人才的需求还是有明显增长的。▲截图来源于艾瑞咨询《中国互联网就业洞察白皮书》当然,毕竟这是年度数据,不排除有些纯线上的企业反应比较迟钝,在下半年才对招聘踩了刹车。所以,今年纯线上的行业对人才需求数涨幅可能相比18年会缩小一些。从18年的季度变化中也能预见这点。WED指标进入到一个平台区,变化开始变小。这份数据同样新鲜,来源于上周六BOSS直聘发布的报告(同样文末附下载连接)。▲截图来源于BOSS直聘《2019人才资本趋势报告》但是从JMPI指标来看,整个行业的蛋糕还是在快速扩大的,并无瓶颈迹象。值得注意的是,不同岗位在不同地区的供需情况差异还是比较大。如果对于选择去哪个城市工作还存在纠结的可以参考一下(数值越小,代表市场竞争越小)。▲截图来源于艾瑞咨询《中国互联网就业洞察白皮书》好了,其他的大家在文末下载这2份报告自己看吧,包括薪资什么的。该如何准备跳槽了解清楚大环境之后,如果你选择跳槽的话可以继续看下去。暂时没这打算的也可以先收藏一下,后续再来翻~准备跳槽,主要要做3件事:找公司、写简历,备面试。找公司大公司、小公司的选择是我们经常讨论的。一般来说公司越大知名度越大,意味着他的“品牌效应”越明显,可以给你的履历加分,相当于给自己带个buff。不过,一个公司当下的规模大小仅代表他过去的成果,并不等于未来也是这样。大公司轰然倒下的案例也不在少数。一个公司的主营业务必然也是依赖着背后的一个大环境。所以,业务所面向的市场是一个增量市场还是存量市场,也是格外重要的。通过这2个维度,一个公司可以划分到4个区间之一。右上和左下两个部分,大家的认知都一样,就不多说了。关于另外2块怎么选呢?针对大部分人,Z哥给你的普适性建议需要你先扪心自问搞清楚2个问题。对自己当下所具备的能力是否拥有自信?从长远来看,自己有没有强烈的意愿追求一些个人成就。选择安逸还是激情?ok,第一个问题答案如果是「那必须的」,同时自己没有大公司的工作履历,那么建议你先选择「低风险低潜力」的大公司。不管第二个问题的答案是什么。为什么呢?为了先获得一个buff,这个好比你打游戏里获得的buff一样,越早获得,给你带来的「加成时长」越长,总的收益越大。个人英雄主义毕竟还是小概率事件,我们要面对现实。那么哪些公司属于这个范畴呢?传统行业中的大企业、部分细分行业(行业规模中小型)里的头部企业。这些企业相比bat、tmd之类企业入职难度自然会低一些,只要大家全力以赴去准备,希望还是很大的。如果第一个问题的答案是「没自信」,那么直接进入第二个问题的选择。如果第二个问题选择的是「激情」,那么当你在大公司见过2、3年的世面之后就可以跳出来了,去选择那些「高风险高潜力」的公司拼一把。这个时候,你不但眼界比大多数人广,还有实际的“大企业品牌背书”,会让你在小公司中颇受青睐。相当于钻石段位的人去黄金段位找人组队,抢着要的人肯定多的是。当然了,薪资一般就要不到大公司那么高了,但是你的职业生涯发展空间更大。如果第二个问题选择的是「安逸」,那么就好好呆在大企业吧。但要在做好本职工作之余开始培养自己的副业,任何可以增加你被动收入的副业,而不是靠一份时间换一份钱的那种。好了,接下来专门聊聊第一题答案是「没自信」的。说句实话,一般来说,没自信的话,第二题基本上也是选择安逸的多。如果真的突然自己顿悟了,下定决心准备“重新做人”,充满激情的,参照上面的「自信+激情」发展路线。区别是,需要花一些时间将你“逝去的能力”追回来。如此一来,就只剩下没自信 + 安逸了。这部分小伙伴的出路在哪里呢?首先,出路不在这个四象限里直接体现。有句话说,“钱多事少离家近“最多只能满足其二,选择了「安逸」意味着选择了“事少”,那就剩下“钱多”和“离家近”二选一了。只要选择公司的时候,确保他的主营业务不是「夕阳行业」就行。说真的,现在闷声发财的公司真的不少,只是社会上的关注点都在那些明星公司上,但是小团体发点小财,也是很滋润的日子。这里Z哥不太建议你选择热点行业的公司,为什么呢?还是如前面所说,在风口上,资源是会溢出的。但溢出不是一个可持续的事情,迟早是要需要还的。万一还不上,公司就没了。如此反而变得更动荡了,不安逸了。当然了,你认为自己运气特别好或者眼光特别好,那可以忽略这点。不过Z哥觉得,人活着,找点激情的事情做,生活才有意义啊!哪怕就其中几年都行,所以尽量不要让你自己走到「没自信 + 安逸」的地步吧。至此,可以选好一些符合目标的公司,接下来就是准备简历了。写简历面试这个事我自己做过4年多时间,看过上千封简历。大多数人写简历的风格是尽可能多的陈列自己大大小小的“伟绩”上去。但是我很负责任的告诉你,在简历方面,多 ≠ 好。写简历要秉持「少即是多」的原则,这个和做PPT一样,如何更快更深入的给人留下印象,才是本质目的。想象一下,摆在你面前的有20篇作文,10分钟内找3篇认为最好的出来。这个就是做简历筛选的hr或者面试官的视角。「少即是多」的第一层意思就是:不要把自己描述的太完美。因为只要是个外人都知道这是在吹牛,只是很多时候自己容易陷入自我感觉良好的错觉里去写简历。那么该怎么把握呢?建议按照你的工作年限来把握内容的侧重点。比如3年以下的话多突出自己的「可塑性」强。3年~6年多突出自己的深度能力或者广度能力。不要再写什么学习能力强、积极主动什么的了,反而显得很初级。6年以上多以塑造自己是某方面小V的人设来写。这个只是Z哥给你的建议和思路,具体内容因人而异,自己把握。「少即是多」另外一层意思是,「独特性」。别人没有,你有的。或者很少人有的。比如程序员的话,可以把自己的github地址写上去,也可以特别强调一下star数比较高的项目。如果平时有自己写东西的习惯的话,可以将自己的博客、公众号等信息写上去,并且将效果好的几篇内容做一下概述。尽可能突出这些「独特性」的价值。最差最差,这些独特的东西能够帮你“抢占”简历筛选者的时间,让你获得简历筛选者更多的「印象空间」。那么具体的文字性内容我应该怎么写呢?比如项目经历、个人github上的项目、以及自己写的文章。Z哥给你一个技巧是用「两点一线」去写具体内容。因为,「线性思维」对我们人类来说是最好理解的。给一件事定义一个起点,就是它开始的时候是怎么样的。再给他定义一个终点,最终通过你的努力它变成怎么样了。最后,在中间补充你做的具体事情。尽量将起点和终点描述的「可衡量」、「易懂」。因为「终点」 - 「起点」 = 「价值」,你要让更多的人能看明白才行。不要写一堆专业术语,可能恰巧这位hr对这块并不是很专业,无法快速理解就跳过去了。补充中间做的具体事情也很有讲究,不要什么都写。仔细看对方的招聘需求,做到投其所好。除此之外的就不要写了,可以用一个词“等等”或者“其他”带过。潜在意思是,一份简历尽量不要海投。你随意的对待他人,他人自然也会随意的对待你。对了,包括自己的一些荣誉也是,不要列一堆。列几个重点,最好是与对方招聘需求相关的就行。写简历有2个硬伤一定要避免。一是不能出现错别字,因为这会给你建立一个“粗心”的人设。这个问题可以借助一些错别字检测工具(避免打广告,大家自己网上搜吧,借助word之类的也行)来避免。第二个是如果你是通过邮箱投递简历的话,切记,尽量要通用的文件格式,比如pdf之类的。这样可以避免在不同的电脑端打开出现变形(想象一下你好不容易投给心仪企业的简历,对方hr打开是乱码。。)。简历搞定了就等面试通知了。备面试不管是电话面试还是现场面试,本质都是在一段时间内将你对自己的认知输出给面试官的过程。就像将水从一个杯子倒往另一个杯子里。这里的“水”包括技术能力、沟通能力、情绪管理能力、应变能力等等。最终,面试官会根据他的水杯里接收到的水位判断你是否符合要求。那么怎么做就很好理解了,要么在固定时间内让信息的传输量更大。要么想办法拉长交谈时间,争取更多的信息输出机会。但是我们要搞清楚,掌握信息、拥有“水”的人是你自己。所以,自己一定要尽量掌握主动权,而不是被动的等着面试官提问。另外,你对面试官来说是陌生的,他对你是否有初步的了解,取决于他有没有看你的简历,还有你的简历写的如何。所以,很多时候面试的开局是让你自我介绍,或者让你自己说一个最体现自己能力的项目经历。这时候大部分小伙伴会以流水账的形式啪啦啪啦一顿说。Z哥认为这个开头很关键,抢得主动权就靠这个了。不管你啪啦啪啦说什么,在结尾或者中间要着重反复突出1到2点核心点,以此引导面试官的提问方向。只要突出的核心点是对方招聘需求中的东西,会被接下去提问的概率非常大。然后就将自己准备好的最拿手的东西讲出来就好了。可能你会问,如果面试官不按这个套路出牌,直接根据简历发问怎么办呢?或者途中话锋一转换了一个我不熟悉的话题怎么办呢?这个时候,保持不卑不亢,知道什么就说什么。模糊不清的不要抱着侥幸心理去蒙,不知道就不知道。但是可以多输出一些自己的思路,哪怕不知道怎么实现也没关系。记住,原则上来说,思路比具体的方式更有价值,更重要,因为它是一个抽象的事物,更具延展性。当然了,如果有机会还是可以间接引导到自己熟悉的领域里去。这需要你抓住机会在结尾处做一下补充语句,以引导后续的交流方向。毕竟招聘需求所要求的项有很多,对面试官来说,在有限的时间里只能抽样一部分内容来验证。所以只要你的引导方向在清单范围内,我觉得一般不太会刻意刁难你,故意避开你熟悉的领域。当然了,你也不要表现的“用力过猛”,体现你在刻意引导提问方向。整个面试过程的大部分时间应该都会花在一些细枝末节上面。不过,对面试官来说,他的最终诉求无非就是2个:你说的这个事情,或者你简历里写的这个事情是不是真的。你解决这个问题或者这类问题的能力到底在什么程度。所以多说说你是怎么做的,怎么解决的,而不要只是说做了什么。what并不能体现你的能力,只有多说how和why才是体现你能力的地方。特别特别特别要注意的一点是,有不少小伙伴喜欢用大量的内容阐述背后的工作环境,公司是做什么业务的啊,这个是其中的什么子业务啊。这些其实对面试官来说是不太感冒的,要避免。我们讲述环境信息的尺度把握在能说清楚这是一个什么问题就够了。总结总结一下,本文Z哥先带你分析了下当前的就业大环境。并且在找公司、写简历、备面试上给你一些参考建议。找公司的核心就是,对自己要有深刻实际的认识,然后通过四象限来筛选公司。找到匹配自己规划的目标公司,写简历的核心就是,突出独特性,并且投其所好。避免错别字,避免用非通用的文件格式。备面试的核心就是,掌握信息输出的主动权,通过多讲述how和why,体现自己解决问题的能力,而不是“陈列成绩”。好了,希望此文对你有所帮助。最后附上3份相关的市场报告,希望能帮大家更多的了解当下的大环境。在我微信后台回复关键字:「19就业」获取。相关文章:你知识焦虑了吗?什么技巧能「一日千里」?作者:Zachary出处:https://www.cnblogs.com/Zacha…如果你喜欢这篇文章,可以点一下文末的「赞」。这样可以给我一点反馈。: )谢谢你的举手之劳。▶关于作者:张帆(Zachary,个人微信号:Zachary-ZF)。坚持用心打磨每一篇高质量原创。欢迎扫描下方的二维码。定期发表原创内容:架构设计丨分布式系统丨产品丨运营丨一些思考。如果你是初级程序员,想提升但不知道如何下手。又或者做程序员多年,陷入了一些瓶颈想拓宽一下视野。欢迎关注我的公众号「跨界架构师」,回复「技术」,送你一份我长期收集和整理的思维导图。如果你是运营,面对不断变化的市场束手无策。又或者想了解主流的运营策略,以丰富自己的“仓库”。欢迎关注我的公众号「跨界架构师」,回复「运营」,送你一份我长期收集和整理的思维导图。

February 27, 2019 · 1 min · jiezi

【Leetcode】103. 二叉树的锯齿形层次遍历

题目给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]题解这道题要求用z字型,就是要求知道深度。因为知道深度我们就可以根据深度的奇偶来判断如何打印。首先相到的就是层序遍历,然后记录是第几层。层序遍历用队列的代码我们已经很熟悉了。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } /class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> res = new LinkedList<>(); if (root == null) { return res; } LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(root); int depth = 0; while (!queue.isEmpty()) { int size = queue.size(); LinkedList<Integer> currentRes = new LinkedList<>(); // 当前层一直出队. while (size > 0) { TreeNode current = queue.poll(); TreeNode left = current.left; TreeNode right = current.right; if (left != null) { queue.add(left); } if (right != null) { queue.add(right); } // 奇数层,从头添加; 偶数层从尾部添加. if (depth % 2 != 0) { currentRes.add(0, current.val); } else { currentRes.add(current.val); } size–; } // 把当前层遍历的结果加入到结果中. res.add(currentRes); depth++; } return res; }}同之前一样,我们想一想有没有递归的解法.我们可以采用先序遍历的方式,先遍历节点,然后递归的遍历左子树和右子树。稍作改动的是,需要在遍历左子树和右子树的时候带上深度的信息,才能知道是加在列表头还是列表尾部。递归的结束条件就是遇到空节点。/* * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> res = new LinkedList<>(); if (root == null) { return res; } helper(res, root, 0); return res; } public void helper(List<List<Integer>> res,TreeNode root, int depth) { if (root == null) { return; } // 注意这里new List, 说明当前节点递归进入了新的层. if (res.size() <= depth) { res.add(new LinkedList<>()); } if (depth % 2 != 0) { res.get(depth).add(0, root.val); } else { res.get(depth).add(root.val); } helper(res, root.left, depth + 1); helper(res, root.right, depth + 1); }}热门阅读技术文章汇总【Leetcode】101. 对称二叉树【Leetcode】100. 相同的树【Leetcode】98. 验证二叉搜索树 ...

February 27, 2019 · 2 min · jiezi

【Leetcode】101. 对称二叉树

题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3题解还记得我们上几次说过,二叉树的题目,大多数可以用递归解决。而递归主要确定两点:递归的子问题是什么;递归的结束条件是什么这个题这两点都不难找到,直接看代码吧。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isSymmetric(TreeNode root) { return root == null || isSymmetricHelp(root.left, root.right); } private boolean isSymmetricHelp(TreeNode left, TreeNode right) { if (left == null || right == null) return left == right; if (left.val != right.val) return false; return isSymmetricHelp(left.left, right.right) && isSymmetricHelp(left.right, right.left); }}这个题目还要求用非递归的方式去解.一种很直观的想法就是利用层序遍历,看它是不是对称的.入队顺序依次是, 左子树的左儿子,右子树的右儿子左子树的右儿子,右子树左右儿子。这样出队的时候两两检查是不是对称。public boolean isSymmetric(TreeNode root) { Queue<TreeNode> q = new LinkedList<TreeNode>(); if(root == null) return true; q.add(root.left); q.add(root.right); while(!q.isEmpty()){ TreeNode left = q.poll(); TreeNode right = q.poll(); // 叶子节点. if(left== null&& right == null) continue; // 其中一个为null 肯定不是 if(left == null ^ right == null) return false; // 值不相同 if(left.val != right.val) return false; q.add(left.left); q.add(right.right); q.add(left.right); q.add(right.left); } return true; }热门阅读技术文章汇总【Leetcode】100. 相同的树【Leetcode】98. 验证二叉搜索树【Leetcode】95~96 不同的二叉搜索树 ...

February 25, 2019 · 1 min · jiezi

技术面试老是有劲使不出,该怎么办?

又到了一年金三银四,回想到很多年前我刚参加工作时的面试经历,那时都是呆呆地等着面试官问问题,被问到一些自己并不熟悉的问题时要不就是思考半天也切不中要点,要不就只能无奈地回答并不清楚了。其实不管是经验不足的初级开发,还是面临更高要求的资深开发,在面试上都会有一样的困扰:如何在掌握的知识有限的情况下,完成好一场高质量的面试呢?本文最适合以下几种情况的同学参考:知识面有限的初学者希望首次加入大公司的开发同学面临技术深度要求的开发同学虽然文中主要以后端开发为例介绍技术面试的准备方法,但是和其他岗位的面试也有相似之处,其他朋友也可以作为参考。两个悲剧的面试故事小黄去年刚从计算机专业毕业,但是感觉对技术掌握得还不够,就又报名参加了一个培训班,年底刚从培训班毕业,怀揣着精心准备的简历,想到杭州闯一闯。今天上午到了一家装修还不错的公司面试,感觉这家公司窗明桌净,办公桌前都是Mac笔记本加双屏显示器,比昨天面的那家外包公司可好多了,心想一定要好好发挥抓住这个机会。老王工作五六年了,今年刚从一家不小的公司出来,公司效益不好,年底裁员了,不幸老王在年前的最后一次裁员名单中中奖了。虽然短期内也没什么太大的经济问题,但是之前拿到offer的都是一些没上轨道的小公司,跟之前待过的公司比总感觉是明珠暗投不太甘心。这次面试的公司看上去还满正规的,如果能进去,就算不涨薪,但是心理上落差总是小一点。小黄按部就班地说完了自己准备的项目介绍,然后面试官就照着简历问了起来。“你熟悉MySQL数据库?”,“对”,“唔…那你能说说MySQL常用的有哪几种存储引擎吗?”,“啊?什么是存储引擎?”。小黄心想,昨天复习了面试宝典里的数据库索引,老师说这个是要点,面试官怎么不按常理出牌呢。“你简历上写了使用过Kafka消息中间件?”,“嗯,对的”,“那你能说说Kafka的拉模型和其他推模型消息中间件的区别吗?”,“…”,“今天面试就到这里,有后续的话HR在一周内会联系你的”。老王在隔壁的会议室里坐了下来,面试官让老王先介绍一下自己最近比较有代表性的项目,老王大概说了说自己这两年做的一个平台的功能。面试官问:“在这个项目过程中你有碰到什么印象比较深的技术难点或者业务难点吗?”,老王想了一想,感觉一下子有点想不起来。面试官继续问:“刚才你介绍的项目里有说到XXX功能,那在YYY异常情况下如果处理ZZZ问题呢?”。老王心想以前也没考虑过这个,那我就直接现场推敲一下吧,“这里要先这样,对了,那里要那样,不对,这里还有一种情况”。十分钟过去了,老王还在原地兜着圈子,而且丝毫没有停下来的意思。面试官只能打断老王换了一个问题:“那你能介绍一个你有过深入了解的技术吗?”,老王:“我好像这几个都了解一点”。“那关系型数据库中的聚集索引和非聚集索引有什么区别呢?”,“好像这两个的存储方式有点不同,非聚集索引开销会大一点”,“那么为什么非聚集索引开销会比较大呢?”,“这个问题好像要涉及操作系统之类的知识,有点太深了”。40分钟后,老王也结束了面试。程序员何苦为难程序员?为什么面试官老是会问一些莫名其妙的问题?我怎么可能了解计算机方面的所有问题呢?为什么他问得这么深,写代码的时候能有什么用?之前我在一次失败的面试之后总是感觉有点不舒服,我感觉我的水平也是挺不错的,为什么到了面试就总感觉发挥不出,而且老是被“虐”呢?下面我们一起来想想办法。该怎么办?不打无准备之仗!如何完成好一场高质量的面试?这是我们在文章一开头提出的问题。首先我们要知道,我们掌握的知识一定是有限的,不管学到了多少,仍然还会有不知道的知识。特别是对技术深度有要求的资深开发岗位,想要面面俱到几乎是一个不可能的任务。但是为什么有些人就能很轻易地拿到offer呢?首先,我们分析一下一场面试的结构。面试的结构一般技术面试都会分为四个部分:项目介绍/自我介绍、技术能力问答、综合能力问答、反向提问环节。而其中前三个部分对面试的成败影响最大。首先,面试一般都会以项目介绍/自我介绍来进行切入,其实技术面试的自我介绍主要也是介绍自己的项目经验。然后会穿插着对技术能力和综合能力的评估,一般这一步都会由之前的项目介绍引申出来。一般来说,面试官在每个环节希望了解的主要是:项目介绍——基本背景、擅长的业务领域、解决问题的能力、技术层级技术能力问答——技术深度、分析能力、抽象能力、学习能力综合能力问答——工作素养、协作能力、学习素养虽然看上去眼花缭乱的非常多,其实核心关注的就是几点:技术好、好合作、主动性强。对于大部分面试官来说,一般也不会做太多事前准备和细密的事后分析,大多都是靠一个大概的印象来做出判断的。所以面试的一个诀窍就是:突出亮点。一旦面试中有让人印象深刻的亮点,其他方面只要不是太差一般面试就十拿九稳了。单点突破但是很多读者应该和我以前一样,觉得自己好像也没什么亮点啊,总感觉没什么特别的可说。但是通过总结和准备,我相信每一个人都可以有自己的亮点,而且是很多个亮点。首先,我们可以通过总结来得到一份优秀的项目介绍。关键点就在于不能光介绍项目完成的需求,因为这些对于面试官来说并没有什么价值,毕竟我们面的是开发岗位不是产品岗位:)在项目介绍中,我们应该明确描述我们在项目中解决的问题,包括技术难题和业务难题。如何表述可以参考一下现在流行的STAR法则,即在什么情况下(Situation),面临一项什么样的任务(Task),采取了什么样的行动(Action),达到了怎样的结果(Result)。这样的表述可以很好地展示自己的解决问题能力,充分显示了自己在工作中的主动性。然后,我们还可以通过准备来深挖几个在工作中比较重要的技术点作为“技术亮点”展示,这指的不是仅仅通过“面试宝典”来准备的肤浅的理论知识,而应该是能做到真正的言之有物、切中工作要点的实践性的深入知识点。这一步是本文所有面试准备技巧中唯一对技术水平有要求而且是要求很高的步骤,技术水平不够的朋友可能发愁怎么准备,技术水平比较高的朋友可能又会疑惑到底什么是实践性的深入知识点。大家不用担心,我已经为大家准备好了学习材料或者说是参考样例。通过学习或参考工作经验较丰富者的总结文章我们可以更容易地获得自己的技术亮点。实践性的深入知识点的最大特点就是:工作中会使用且可以层层深入形成问题链条。关系型数据库是后端开发离不开的技术,而数据库索引又是程序中的SQL语句执行效率的关键,大家可以通过我之前编写的一系列数据库索引相关的文章来了解一个实践性的深入知识点到底长什么样。后续我也会不断更新更多浅显易懂的高阶技术,有兴趣的朋友可以持续关注一下。下面的文章主要以知识点讲解为主,需要具体的一系列相关面试题的朋友可以在文后留言,如果人数比较多我会考虑另外写一篇文章讲解具体的面试题并链接到对应的知识点。数据库索引是什么?新华字典来帮你 —— 理解数据库索引融会贯通 —— 深入20分钟数据库索引设计实战 —— 实战数据库索引为什么用B+树实现? —— 扩展连点成面但是有了准备之后,我们怎么能防止面试官问出很多超出我们准备范围的“奇怪”的问题呢?这就需要我们有效地引导和填充整个面试的过程。一般一场技术面试会在40分钟到60分钟,如何完成好一场技术面试的关键就在于如何用亮点来充满这40到60分钟。一般一个技术亮点会包含一系列层层递进的内容,所以可以问出大概三到五个问题。如果发现面试官不知道应该如何追问,那么你可以简短一些地把后续知识点一次性介绍完。一般这些问题都说完时间就过去了十到十五分钟,而项目介绍和相关的问答会占用大概10分钟。如果我们准备了两个技术亮点,加上前后的一些非技术性问题和反向提问,那么基本上一场面试就圆满地结束了。那么如何让面试官问出自己想问的问题呢?这就需要我们准备好一个“剧本”了。首先,面试的开场一定是项目介绍,可以将我们准备好的技术亮点与项目介绍中解决的技术难题结合起来,这样面试官基本都会根据这个点继续往下追问。其次,我们还可以对简历内容进行特意的编排来诱导面试官主动提出我们准备好的问题。例如在简历中把擅长的技术放在更靠上的位置突出显示,并且增加更多的深入解释。这样不仅可以引起面试官的注意,还能使简历显得更有技术含量,更容易通过筛选。最后,还可以厚着脸皮主动提出自己对某一个领域比较了解,尝试询问面试官对这一部分有没有兴趣。通过上述这三点,基本上80%以上的面试就能够顺顺利利地圆满完成了。问题总结在掌握了面试的技巧之后,我们再来看看之前小黄和老王到底犯了什么错误,我们也能避免踩坑。初级开发小黄的问题:惜字如金,没有充分回答问题;对于面试官提出的“是否用过”“是否了解”这样的问题,应该补充上能够证明自己是内行的解释。等着面试官提问,没有主动地引导。我们应该主动将问题引导向自己擅长的方面。资深开发老王的问题:项目经历没有准备;只讲了项目的功能,而不讲过程中遇到的业务难点和技术难点。过分纠结细节,但是表述又不流畅;问题抓不住重点,从细节开始推敲,反反复复。表述复杂问题时应该从宏观到微观。先从比较高的层次入手,划分大的模块,确定模块间的交互,然后再逐个模块地细化细节。这样不仅自己能够更容易地解决问题,而且面试官也更容易理解,避免发生即使回答了正确答案但是面试官也不认同的情况。

February 22, 2019 · 1 min · jiezi

【Leetcode】100. 相同的树

题目给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2 2 [1,2], [1,null,2]输出: false示例 3::输入: 1 1 / \ / \ 2 1 1 2 [1,2,1], [1,1,2]输出: false题解大多数的二叉树题目都是用递归可以解的。所以当拿到二叉树的题目的时候,我们首先就是看看能拆解成哪些子问题。这个问题的子问题很简单,就是左子树,右子树都相等的二叉树是相同的二叉树。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } /class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } else if (p == null || q == null) { return false; } if (p.val == q.val) { return isSameTree(p.left, q.left) && isSameTree(p.right, q.right); } else { return false; } }}那如果用非递归解怎么解呢?如果遇到二叉树的问题,没思路还有第二招,就是想想看是不是遍历的变种:先序遍历中序遍历后序遍历层次遍历我们可以用队列,一起进行层序遍历,同时比较左右两颗树:/* * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } else if (p == null || q == null) { return false; } LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(p); queue.add(q); while(!queue.isEmpty()) { TreeNode left = queue.poll(); TreeNode right = queue.poll(); if (left == null && right == null) { // 都是空的,遍历到叶子节点了 continue; } else if (left == null || right == null) { // 有一个为null return false; } else if (left.val != right.val) { // 不相等. return false; } // 左子树入队 queue.add(left.left); queue.add(right.left); // 右子树入队 queue.add(left.right); queue.add(right.right); } return true; }}其实我们本质上就是要比较左右两棵树,也没必要非要是队列,其实stack也是可以的,大同小异。所以并不是你记住哪种数据结构,关键是你能理解后,灵活应用. public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) { return true; } else if (p == null || q == null) { return false; } Stack<TreeNode> stack = new Stack<>(); stack.push(p); stack.push(q); while(!stack.isEmpty()) { TreeNode left = stack.pop(); TreeNode right = stack.pop(); if (left == null && right == null) { continue; } else if (left == null || right == null) { return false; } else if (left.val != right.val) { return false; } stack.push(left.left); stack.push(right.left); stack.push(left.right); stack.push(right.right); } return true; }相关阅读技术文章汇总【Leetcode】98. 验证二叉搜索树【Leetcode】95~96 不同的二叉搜索树 ...

February 20, 2019 · 2 min · jiezi

被裁员后,我是如何成功找到了一份数据科学工作?

作者 Kristen Kehrer中文翻译 MikaCDA 数据分析师原创作品,转载需授权本文的目的为了告诉你们我是如何成功找到一份数据科学的工作。从被裁员到成功签约,这两个月对我来说即辛苦又紧张。我拥有统计学硕士学位,并且自2010年以来一直从事高级分析工作。如果你是该领域的新手,那么你的体验可能会有所不同,但希望本文能有所帮助。我们将介绍如何利用LinkedIn,搜寻各种职位申请,如何在同时提高你的技能,以及当收到offer时该如何协商。被裁员的第1天Vistaprint公司决定减少员工人数,很不幸我是其中一员。但我知道如今市场对数据科学家的需求很火,因此从被裁员的第1天起,我就很乐观。我收到了遣散费,这让我能够真正考虑接下来该怎么做。在我把头发染成亮粉色后的第4天,我碰巧被裁员了,这真是很无奈。在被裁员后的第4天,我顶着一头粉色的头发。这是我的儿子哈利,他当时差不多3个月。实际上,之后我的第一场面试就是顶着一头粉色头发,面试官很喜欢。但是,之后我决定把头发染回之前的颜色,以便之后的求职。做的第一件事在LinkedIn上,招聘人员经常会联系我。我一般都会回复。如果你刚进入这个领域,你可能不会在LinkedIn邮件中收到招聘人员的消息,提出这一点的目的在于,你之后在职业生涯中可以关注这方面。如今我正在求职,我所做的第一件事就是浏览这个清单,给每个人留言:“你好,我正在求职中。如果你们有任何空缺的职位那就太好了,我们可以聊聊。“有很多人回复说他们有空缺的职位,但是在与他们交谈之后,我发现这并不适合我。除了去联系来找我的招聘人员之外,我还进行了谷歌搜索(以及LinkedIn搜索),寻找分析领域的相关招聘人员。与职业导师第一次见面在被裁员之后,Vistaprint为我安排了职业导师。她教给我的信息非常有用,这让我在之后的职业生涯都受益匪浅。我的职业导师是来自Transition Solutions的Joan Blake。在我们的第一次会面时,我带来了我的简历,我们谈论了之后我想找哪方面的工作。由于我的简历和LinkedIn在过去帮我找到了工作,她并没有对简历进行太大的修改,但把我的专业技能和经验放在顶部,把学历背景放在底部。并且我们把简历的篇幅尽量控制在一页以内。这是我的简历:我还在简历中附上了求职信。这让我能够有机会明确地表明,我的情况很符合他们的工作描述。我列了一个电子表格,当中包含了我所申请的所有公司。在表格中,包含了以下信息:公司名称;申请的日期;收到回复的日期;招聘经理的姓名等。这帮助我掌握目前求职的情况和进度。求职申请对我申请的每个工作,我都会在LinkedIn进行搜索。查看我的人脉网络中是否有人目前在这家公司。如果有的话,我会让他们知道我在申请,因为如今很多公司都提供推荐奖金。我大概会这么说:你好,Michelle。我正在申请XX公司的数据科学家职位。你愿意帮我引荐一下吗?如果我认识的人中,没有人在这家公司,那么我会试着找到该职位的招聘经理。可能是“数据科学与数据分析”主管(或副总裁)这类头衔。我给招聘经理发的信息如下所示:你好,Sean。我对远程数据科学的职位感兴趣。我有统计学硕士学位,以及7年的建模经验。我很擅长使用SQL,以及用R进行建模,并且对Python有一定的了解。我很期待有机会与你聊聊,我想谈谈我将如何通过统计方法为公司提供有效的分析见解并创造价值。Kristen大多数人都会回复。当我告诉职业导师我在LinkedIn上求职所获得成功后,她为此感到有些惊讶。开始面试和电话面试电话面试基本大同小异,有些电话面试更紧张一些,有些耗时更长,基本都在半小时左右,通常会是HR。既然是与HR进行沟通,那么不用涉及太深的技术问题,你只希望能够通过电话面试,并试着与招聘经理约定时间进行面试。介绍一下自己:这里HR只想大致了解你,以及你的经历。我的介绍如下:我是一名数据科学家,拥有7年的统计和分析经验,可以解决各行业的业务问题。我能够熟练使用SQL,在R中进行模型构建,并且目前正在学习Python。你想要做什么?我会确保我想做的基本与职位描述相符合。我可能会说“ 我期待不断学习新工具和新技术。我希望能够处理有意思的问题,从而带来商业价值“。你的薪资要求是怎样的?如果可以的话,尽量避免这个问题,你会被问到,但是尝试用不同的角度回答。你可以回答:“我过去的薪资比较符合我的期望,我相信(公司名称)会付出相应的薪资,你怎么看这个职位的薪资范围呢?”他们会有该职位的薪资范围,但他们可能会告诉你他们没有。大多数时候我会给出我的薪资期望,但这并不意味着当收到offer时你无法进行协商。收到offer很棒,你马上就要拿到offer了。这时,你可以联系发offer的公司,询问“我收到通知说我能拿到offer,有什么办法可以让流程加快吗?”我向两家公司提过这个问题。其中一个加快了流程,给我发了额外offer。协商你拿到了offer,现在应该进行协商了。只有很少一部分人会就薪资进行协商,女性更少。一定要协商!当你了解了薪资、休假时间、以及福利信息,你可以这么说:非常感谢您的offer,我很感激。我希望能提高一些薪资。然后等待回应,保持积极的心态。他们可能会说,需要把这些信息提给招聘经理。谢谢。我会花一些时间了解福利的内容。期待再和您协商,我感觉我们能达成一致。然后就结束谈话,并且定下下次协商的具体时间,最后让他们知道你很高兴与他们进行交流,保持积极的态度。就这样我成功地获得了心仪的工作,并在一周后开始上班。我感觉特别的欣喜,经过多次面试我终于找到了适合自己的工作,这一切都是值得的。结语有针对性的求职信,并直接在公司网站上申请会大大提高求职的响应率。同时,你可以有效地利用LinkedIn联系招聘人员,直接进行交流。同时在这个过程中,我的表达能力和自信心都得到了很大的提升。最后希望你能成功找到心仪的工作。

February 15, 2019 · 1 min · jiezi

Java面试

线程池首先要明确为什么要使用线程池,使用线程池会带来什么好处?• 线程是稀缺资源,不能频繁的创建。• 应当将其放入一个池子中,可以给其他任务进行复用。• 解耦作用,线程的创建于执行完全分开,方便维护。线程池是一种多线程处理形式,处理过程中将任务提交到线程池,任务的执行交由线程池来管理。如果每个请求都创建一个线程去处理,那么服务器的资源很快就会被耗尽,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。抽象类与接口区别1.抽象类可以有构造方法,接口中不能有构造方法。2.抽象类中可以有普通成员变量,接口中没有普通成员变量!!!!!!!(注意重点在 普通 即 非静态 和 变量!!!!)3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。悲观锁和乐观锁使用场景乐观锁是在应用层加锁,而悲观锁是在数据库层加锁(for update)乐观锁顾名思义就是在操作时很乐观,这数据只有我在用,我先尽管用,最后发现不行时就回滚。悲观锁在操作时很悲观,生怕数据被其他人更新掉,我就先将其先锁住,让别人用不了,我操作完成后再释放掉。悲观锁需要数据库级别上的的实现,程序中是做不到的,如果在长事务环境中,数据会一直被锁住,导致并发性能大大地降低。一般来说如果并发量很高的话,建议使用悲观锁,否则的话就使用乐观锁。如果并发量很高时使用乐观锁的话,会导致很多的并发事务回滚、操作失败。总之,冲突几率大用悲观,小就用乐观。乐观锁不会发生并发抢占资源在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突。这就是著名的并发性问题。1.悲观锁:指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态2.乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。乐观锁不能解决脏读的问题。线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。死锁和脏数据就是典型的线程安全问题。简单来说,线程安全就是: 在多线程环境中,能永远保证程序的正确性。只有存在共享数据时才需要考虑线程安全问题。 多线程会引出很多难以避免的问题, 如死锁,脏数据,线程管理的额外开销,等等。更大大增加了程序设计的复杂度。在Java 8 中,如果一个桶中的元素个数超过 TREEIFY_THRESHOLD(默认是 8 ),就使用红黑树来替换链表java内存区域:hashmapkey value初始化容量 1左移4位16容量 2的4次方static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16加载因子系数1分成4等分0.25 0.25*3=0.75 在容量的3/4(0.75)的时候扩容static final float DEFAULT_LOAD_FACTOR = 0.75f;HashMap和Hashtable的区别HashMap没有考虑同步,是线程不安全的;Hashtable使用了synchronized关键字,是线程安全的前者允许null作为key,后者不允许null作为key从ConcurrentHashMap代码中可以看出,它引入了一个“分段锁”的概念,具体可以理解为把一个大的Map拆分成N个小的HashTable,根据key.hashCode()来决定把key放到哪个HashTable中。在ConcurrentHashMap中,就是把Map分成了N个Segment,put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中,ConcurrentHashMap中默认是把segments初始化为长度为16的数组。通过把整个Map分为N个Segment(类似HashTable),可以提供相同的线程安全,但是效率提升N倍,默认提升16倍。HashMap的底层实现Java8之前,其底层实现是数组+链表实现,Java8使用了数组+链表+红黑树实现ConcurrentHashMap的具体实现1、该类包含两个静态内部类HashEntry(节点)和Segment(桶);前者用来封装映射表的键值对,后者用来充当锁的角色List有序 可以重复 set无序不可以重复ArrayList的初始容量10 加载因子0.5Vector的初始容量10 加载因子1HashSet的初始容量为16,加载因子0.75HashMap的初始容量为16,加载因子0.75 扩容增量:原容量的1倍数据库索引原理索引原理必须清楚一种数据结构「平衡树」(非二叉),也就是b tree或者 b+ tree,重要的事情说三遍:“平衡树,平衡树,平衡树”。当然, 有的数据库也使用哈希桶作用索引的数据结构 , 然而, 主流的RDBMS都是把平衡树当做数据表默认的索引数据结构的。线程和进程的区别1、进程是一个“执行中的程序”,是系统进行资源分配和调度的一个独立单位;2、线程是进程的一个实体,一个进程中拥有多个线程,线程之间共享地址空间和其它资源volatile关键字该关键字可以保证可见性不保证原子性ThreadLocal关键字当使用ThreadLocal维护变量时,其为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立的改变自己的副本,而不影响其他线程对应的副本线程池java.util.concurrent.ThreadPoolExecutor类就是一个线程池。客户端调用ThreadPoolExecutor.submit(Runnabletask)提交任务JVM划分1、方法区:常量、静态变量、即时编译器2、堆内存:垃圾回收的主要场所3、程序计数器4、虚拟机栈(栈内存):保存局部变量、基本数据类型变量以及堆内存中某个对象的引用变量5、本地方法栈垃圾回收算法有哪些1、引用计数2、标记-清除 分两个阶段 第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。GC经常发生的区域是堆区,堆区还可以细分为新生代、老年代、内存溢出 内存泄露是导致内存溢出的原因之一NIO和IO的主要区别IO 面向流 阻塞IO NIO 面向缓冲区 非阻塞IO 选择器 选择一个通道双亲委派模型(1).BootStrap ClassLoader:启动类加载器,负责加载存放在%JAVA_HOME%lib目录中的(2).Extension ClassLoader:扩展类加载器,由sun.misc.Launcher$ExtClassLoader实现,负责加载%JAVA_HOME%libext目录中的(3).Application ClassLoader:应用程序类加载器,由sun.misc.Launcher$AppClassLoader实现,负责加载用户类路径classpath上所指定的类库Java8新特性1、Lambda表达式允许我们将函数当成参数传递给某个方法2、函数式接口@Functionallnterface来标明该接口是一个函数式接口3、引入重复注解@Repeatable4、接口中可以实现方法default方法5、注解的使用场景拓宽6、新的包java.time包dubboProvider在容器里面进行启动,启动之后往服务中心进行服务一个注册,然后Consume订阅之前注册过的服务,如果服务发生改变注册中心会通知Consume,Consume拿到订阅关系之后就直接invoke调用Provider同时有个Monitor监控他们的调用情况会员中心调用订单中心订单需要提供一个接口给会员调用Consumer:192.168.0-.192/com.tl.IOrderService?application=UserCp数据库索引作用 底层数据结构 为什么使用这种结构索引 是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息底层数据结构B+树使用B+树的原因:查找速度快,效率高,聚集索引和非聚集索引根本区别是表记录的排列顺序和与索引的排列顺序是否一致聚集索引表记录的排列顺序和索引的排列顺序一致非聚集索引制定了表中记录的逻辑顺序,但是记录的物理和索引不一定一致MyISAM和InnoDB的区别MyISAM不支持事务,InnoDB是事务类型的存储引擎MyISAM只支持表级锁InnoDB支持行级锁和表级锁MyISAM不支持外键InnoDB支持外键MyISAM支持全文索引InnoDB不支持MyISAM表不支持事务、不支持行级锁、不支持外键InnoDB表支持事务、支持行级锁、支持外键Spring 知识点Spring 的 IOC 和 AOP• IOC:控制反转,(解耦合)将对象间的依赖关系交给 Spring 容器,使用配置文件来创建所依赖的对象,由主动创建对象改为了被动方式;• AOP:面向切面编程,将功能代码从业务逻辑代码中分离出来;AOP 的实现方式有哪几种?如何选择?JDK 动态代理实现和 cglib 实现选择:如果目标对象实现了接口,默认情况下会采用 JDK 的动态代理实现 AOP,也可以强制使用 cglib 实现 AOP;如果目标对象没有实现接口,必须采用 cglib 库,Spring 会自动在 JDK 动态代理和 cglib 之间转换。扩展:JDK 动态代理如何实现JDK 动态代理,只能对实现了接口的类生成代理,而不是针对类,该目标类型实现的接口都将被代理。原理是通过在运行期间创建一个接口的实现类来完成对目标对象的代理Mybatis 知识点关于 MyBatis 主要考察占位符#和 $ 的区别,区别如下:符号将传入的数据都当做一个字符串,会对自动传入的数据加一个双引号;$ 符号将传入的数据直接显示生成 SQL 中;符号存在预编译的过程,对问号赋值,防止 SQL 注入;$符号是直译的方式,一般用在 order by ${列名}语句中;能用#号就不要用 $ 符号Linux常用命令文件和目录:pwd 显示当前目录ls 显示当前目录下的文件和目录:ls -F 可以区分文件和目录;ls -a 可以把隐藏文件和普通文件一起显示出来;ls -R 可以递归显示子目录中的文件和目录;ls -l 显示长列表ls -l test 过滤器,查看某个特定文件信息。可以只查看 test 文件的信息处理文件方面的命令有:touch、cp、 In、mv、rm处理目录方面的命令:mkdir查看文件内容:file、cat、more、less、tail、headeg. 找出进程名中包括 java 的所有进程:ps -ef | grep javatop 命令 实时监测进程压缩数据tar -xvf 文件名tar -zxvf 文件名tar -cvzf 文件名结束进程:kill PID 或者 kill all ...

January 26, 2019 · 1 min · jiezi

世界顶级公司的前端面试都问些什么

原文:http://davidshariff.com/blog/…作者:David Shariff翻译:疯狂的技术宅本文首发微信公众号:jingchengyideng欢迎关注,每天都给你推送新鲜的前端技术文章在过去的几年里,我在亚马逊和雅虎面试过许多前端工程师。在这篇文章中,我想分享一些技巧,帮助大家做好准备。免责声明: 本文的目的并不是为你列出在前端面试中可能会被问到的问题,但是可以将其视为知识储备。面试很难,作为候选人,通常会给你45分钟的时间来让你展示自己的技能。 作为一名面试官,同样难以在这么短的时间里评估这个人是否适合这项工作。 对于面试来说,没有任何一种标准能够适合所有人,面试官通常会覆盖某一个领域,但除此之外,他们会自行决定应该问哪些问题。不管你坐在面试桌的哪一侧,这篇文章都会尽可能的涵盖前端开发中那些最重要的领域。常见的误解我看到面试者犯的最大错误之一是喜欢准备一些琐碎的问题,例如“什么是盒子模型?”或“告诉我在JavaScript中==和===之间的区别?”等等。知道这些问题的答案固然很好,但它并不能让面试官知道你真正的水平。相反,你应该为面试做一些非常实际的准备,能够真正体现出自己的JavaScript,CSS和HTML编码水平。为面试的准备包括去实现UI,构建窗口小部件或实现诸如Lodash和Underscore.js库中常见的功能,例如:构建常见Web应用程序的布局和交互,例如Netflix浏览器站点。实现小工具,如日期选择器,轮播或电子商务购物车。编写类似debounce或深度克隆对象的函数。说到库,常见的另一个错误是人们喜欢完全依赖最新的框架来解决面试问题。你可能会想:既然在开发中我可以使用jQuery,React,Angular等,为什么还要重新发明轮子,为什么不能在面试中使用它?这个问题很好,技术、框架和库总会随着时间的推移而发生变化 —— 我更感兴趣的是:你需要了解前端开发的基本原理,而不是依赖更高级别的抽象。如果你不能在不依赖这些库的情况下回答的面试问题,我希望你至少可以彻底解释和推测库在背后都做了什么。总的来说,你应该期望大部分的面试都是非常实际的。JavaScript你需要了解JavaScript,而且是深入了解。 在面试中,越高级别的人对语言知识深度的期望也越高。 至少,以下是你应该熟悉的JavaScript内容:执行上下文、尤其是词法作用域和闭包。提升机制、函数与块作用域、以及函数表达式和声明。绑定 - 特别是调用、bind、apply 和this关键字。对象原型,构造函数和mixins。组合函数和高阶函数。时间委托和冒泡。typeof,instanceof和Object.prototype.toString。使用回调,promises,await和async处理异步调用。何时使用函数声明和表达式。DOM如何遍历和操作DOM很重要,如果他们依赖jQuery或者编写了很多React和Angular类型的应用,那么这就是大多数面试者应该努力的地方。你可能不会每天都做这些,因为我们大多数人都使用抽象排序。但是如果不依赖第三方库,你应该知道该如何进行以下操作:使用document.querySelector和旧版浏览器中的document.getElementsByTagName选择或查找节点。上下遍历: Node.parentNode,Node.firstChild,Node.lastChild和Node.childNodes。左右遍历: Node.previousSibling和Node.nextSibling。操作:在DOM树中添加,删除,复制和创建节点。 你应该了解如何修改节点的文本内容,以及切换,删除或添加CSS类名等操作。性能:当你有很多节点时,操作DOM的代价可能会很高,所以你至少应该知道文档片段和节点缓存。CSS至少,你应该知道如何在页面上布局元素,如何使用子元素或直接用后代选择器来定位元素,以及何时使用classes与id。布局:坐在彼此相邻的元素以及如何将元素放在两列与三列中。响应式设计:根据浏览器宽度更改元素的尺寸。自适应设计:根据特定断点更改元素的尺寸。特异性:如何计算选择器的特异性以及级联怎样影响属性。使用恰当的命名空间和类名。HTML知道哪些HTML标签能最好的表现你正在显示的内容以及相关属性,应该掌握手写HTML的技能。语义标记。标记属性,例如disabled, async, defer以及何时使用data-*。知道如何声明你的doctype(很多人因为不是每天都写新页面,从而忘记了这一点),以及可以使用哪些meta标签。可访问性问题,例如:确保输入复选框具有更大的响应区域(使用标签“for”)。 另外还有role =“button”,role =“presentation”等。系统设计针对后端系统设计的面试通常会涉及MapReduce、设计分布式键值存储或需要CAP定理等知识。 尽管你的前端工作不需要深入了解此类系统是如何设计的,但是在被要求设计常见应用程序的前端架构时,千万不要感到惊讶。 通常这些问题会问的含糊,比如“设计像Pinterest这样的网站”或“告诉我如何构建购物结账服务?”。 以下是需要考虑的领域:渲染: 客户端渲染(CSR),服务器端渲染(SSR)和通用渲染。布局: 如果你正在设计多个开发团队使用的系统,则需要考虑构建组件,以及是否需要团队遵循一致的规范来使用这些组件。状态管理:例如在单向数据流或双向数据绑定之间进行选择。你还应该考虑自己的设计是否遵循被动或响应式编程模型,以及组件应该如何相互关联。异步流: 你的组件可能需要与服务器实时通信。你的设计应考虑XHR与双向调用。如果面试官要求你支持旧版浏览器,那么你的设计需要在隐藏的iFrame,脚本标签或XHR之间进行选择以进行消息传递。如果没有,你可以建议使用websockets,或者你可能决定服务器发送事件(SSE)更好。关注点分离: MVC、MVVM和MVP模式。多设备支持: 你的设计是否会针对Web、移动Web和混合应用使用相同的实现,或是单独实现?如果你正在开发类似于Pinterest这样的站点,可能会考虑在Web上使用三列,但在移动设备上只考虑一列,那么你的设计该如何处理这个问题?交付: 在大型应用程序中,让独立团队拥有自己的代码库并不罕见。这些不同的代码库可能彼此依赖,每个代码库通常都有自己的管道来释放对生产环境的更改。你的设计应考虑如何使用依赖关系(代码拆分)、测试(单元和集成测试)和部署来构建这些资源。你还应该考虑如何通过CDN分发资源或内联它们以减少网络延迟。网络表现除了通用编程技术之外,你应该期望面试官查看你的代码或设计及其对性能的影响。 在以前将CSS放在页面的顶部,并在底部放置JS脚本的做法就足够了,但是Web正在快速发展,你应该熟悉这个领域的复杂性。关键渲染路径。Service workers。图像优化。延迟加载和捆绑拆分。HTTP/2和服务器推送的一般含义。何时预取和预加载资源。减少浏览器重排以及何时将元素渲染交给GPU。浏览器布局,合成和绘制之间的差异。数据结构和算法这点可能具有争议,但是不了解高时间复杂度和常见运行时(如O(N)和O(N Log N)的基本知识会对你造成困扰。理解内存管理等方面的知识对当前十分常见的单页应用非常有帮助。 例如:如果你要实现一个拼写检查功能,那么了解常见的数据结构和算法将使你的工作变得更加轻松。我不是说你需要一个CS学位,但是这个行业已经不再是写一个简单的页面了。 网上有很多资源,你可以很快掌握这些基础知识。常用Web知识你需要掌握构成Web的技术和范例。HTTP请求: GET和POST以及相关标头,如Cache-Control,ETag,Status Codes和Transfer-Encoding。REST与RPC。安全性:何时使用JSONP,CORs和iFrame策略。总结作为Web开发人员或工程师,需要大量的知识。 不要拘泥于所需的知识深度,而要保持开放的心态,学习开发所需的所有复杂技术。除了本文涉及的技术主题外,在面试中你还需要谈谈自己过去的项目,描述有趣的纠结点以及所做的权衡。我知道前端面试中还有很多方面被我忽略了,所以我很想听听你的经历,或者你认为自己在面试时被问到,但是被我忽略的那些重要内容。本文首发微信公众号:jingchengyideng关注公众号 jingchengyideng ,回复“体系”,查看本文所讲到的知识体系大图

January 21, 2019 · 1 min · jiezi

常见面试问题回答技巧(非技术)

常见面试问题回答技巧 共48条仔细阅读 把握机会 赢得Offer 祝君好运!请你做一下自我介绍?回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有。其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、性格中最积极的部分、做过的最成功的事,主要的成就等,这些回答关于学习或者生活都可以,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业很重视一个人的礼貌,求职者要尊重考官,要在自我介绍结束后说一句“谢谢”。你觉得你最大的优点是什么?回答提示:沉着冷静、条理清楚、立场坚定、顽强向上、乐于助人和关心他人、适应能力和幽默感、乐观和友爱。要例举具体的优点,如:做事认真、抗压能力强、乐于助人、学习能力强等,然后要举实例证明这也是最重要的一点。说说你最大的缺点?回答提示:这个问题企业问的概率很大,通常不希望听到直接回答的缺点是什么,如果求职者说自己有强迫症、爱忌妒人、非常懒、脾气大、工作效率低,那么肯定不会被企业录用。绝对不要自作聪明地回答“我最大的缺点是过于追求完美”,有的人以为这样回答会显得自己比较出色,但事实上,他已经岌岌可危了。企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分。回答样本:我平时比较爱忘事,然后我通过写便条来提醒我自己什么时候该做什么事。你对加班的看法?回答提示:实际上好多公司问这个问题,并不证明一定要加班,只是想测试你是否愿意为公司奉献。回答样本:如果是工作需要我会义不容辞加班,我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班。如何安排自己的时间?会不会排斥加班?回答提示:基本上,如果上班工作有效率,工作量合理的话,应该不太需要加班。可是我也知道有时候很难避免加班,加上现在工作都采用责任制,所以我会调配自己的时间,全力配合。分析:虽然不会有人心甘情愿的加班,但依旧要表现出高配合度的诚意。在五年的时间内,你的职业规划?回答提示:一般公司高管或者副总喜欢问个人职业规划方面的问题。当然,说出其他一些你感兴趣的职位也是可以的,比如产品销售部经理,生产部经理等一些与你的专业有相关背景的工作。要知道,考官总是喜欢有进取心的应聘者,此时如果说“不知道”,或许就会使你丧失一个好机会。最普通的回答应该是“我准备在技术领域有所作为”或“我希望能按照公司的管理思路发展”。能把职业规划分成几部分去完成,比如1个月、三个月、半年、1年以至3年的具体发展目标和实施方案。你的朋友是如何评价你的?回答提示: 面试官想从侧面了解一下你的性格及与人相处的问题。回答样本一:我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺。回答样本二:我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题。你还有什么要问我的吗?回答提示:企业的这个问题看上去可有可无,其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:咱公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说咱公司的晋升机制是什么样的?公司希望我以后向什么方向发展?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。你对薪资的要求?回答提示:如果你对薪酬的要求太低,那显然贬低自己的能力;如果你对薪酬的要求太高,那又会显得你分量过重,公司受用不起。一些雇主通常都事先对求聘的职位定下开支预算,因而他们第一次提出的价钱往往是他们所能给予的最高价钱,他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣。回答样本一:我对工资没有硬性要求,我相信贵公司在处理我的问题上会友善合理。我注重的是找对工作机会,所以只要条件公平,我则不会计较太多。回答样本二:我受过系统的软件编程的训练,不需要进行大量的培训,而且我本人也对编程特别感兴趣。因此,我希望公司能根据我的情况和市场标准的水平,给我合理的薪水。回答样本三:如果你必须自己说出具体数目,请不要说一个宽泛的范围,那样你将只能得到最低限度的数字。最好给出一个具体的数字,这样表明你已经对当今的人才市场作了调查,而且自己具有这方面的价值。为什么选择我们这家公司?回答提示:曾经在报章杂志看过关于公司的报道,与自己所追求的理念有志一同。而贵公司在业界的成绩也是有目共睹的,而且对员工的教育训练、升迁等也都很有制度。并具体详谈你调查到的内容会让面试官觉得你很用心。分析:去面试前先做功课,了解一下该公司的背景,让对方觉得你真的很有心想得到这份工作,而不只是探探路。谈谈你对跳槽的看法?回答提示:①我认为跳槽应该是进入到更好的企业和更大的平台,而不是在公司待几个月就认为公司同事关系不好,自己发展有瓶颈就跳槽,这样换工作是无意义的。②频繁的跳槽对单位和个人双方都不利,应该反对。谈谈如何适应新的工作环境?回答提示①办公室里每个人有各自的岗位与职责,不得擅离岗位。②根据领导指示和工作安排,制定工作计划,提前预备,并按计划完成。③多请示并及时汇报,遇到不明白的要虚心请教。④抓间隙时间,多学习,努力提高自己代码质量和代码规范性。你(如果面试后端开发)来我们公司做前端可以吗?回答提示:面试者在考验面试者是否对所述职位专一时,如果面试者过多表现在前端上的技能,那面试官就会用这个问题问你,如果你回答可以,那么面试官会认为你求职目标不明确,从而不会要你继续面试。假设你在某单位工作,成绩比较突出,得到领导的肯定。但同时你发现同事们越来越孤立你,你怎么看这个问题?你准备怎么办?回答提示:①成绩比较突出,得到领导的肯定是件好事情,以后更加努力。②检讨一下自己是不是对工作的热心度超过同事间交往的热心了,加强同事间的交往及共同的兴趣爱好。③工作中,切勿伤害别人的自尊心④不再领导前拨弄是非。请说出你选择这份工作的目的?回答提示:这是想知道面试者对这份工作的热忱及理解度,并筛选因一时兴起而来应试的人,如果是无经验者,可以强调“就算职种不同,也希望有机会发挥之前的经验”。包括对面试官的了解和团队的了解都是面试之前应该了解的。你能为我们公司带来什么呢?回答提示:企业很想知道未来的员工能为企业做什么,求职者应再次重复自己的优势,然后说:“就我的能力,我可以做一个优秀的员工在组织中发挥能力,给组织带来高效率和更多的收益”。给公司带来活力,“我更加积极、更加努力、更加有朝气。”怎样看待学历和能力?回答提示:学历不一定完全代表能力,虽然我的学历不够硬但是我会在技术上更努力更认真,并在短期内发挥自己的优势,把公司项目做的更好。你的业余爱好是什么?回答提示:找一些富于团体合作精神的,这里有一个真实的故事:有人被否决掉,因为他的爱好是深海潜水。主考官说:因为这是一项单人活动,我不敢肯定他能否适应团体工作。或者看技术论坛,会给工作带来新的思路,或者看关于数据库优化/数据原理的书籍。作为被面试者请你给我打一下分?回答提示:试着列出四个优点和一个非常非常非常小的缺点(可以抱怨一下设施,没有明确责任人的缺点是不会有人介意的)。你怎么理解 PHP 这个职位?回答提示:把岗位职责和任务及工作态度阐述一下,更多的说 PHP 发展和优势以及你学习 PHP 的原因。比如:PHP 语言上的应用发展, PHP 最大特点就是语法灵活,开发速度快, 开发成本低,最适合开发业务流程,所以互联中使用 PHP 开发动态网站将成为主流。喜欢这份工作的哪一点?回答提示:每个人的价值观不同,自然评断的标准也会不同,但是,在回答面试官这个问题时可不能太直接就把自己心理的话说出来,尤其是薪资方面的问题,不过一些无伤大雅的回答是不错的考虑,如交通方便,工作性质及内容颇能符合自己的兴趣等等都是不错的答案,不过如果这时自己能仔细思考出这份工作的与众不同之处,相信在面试上会大大加分。说说你对 PHP 行业和发展趋势的看法?回答提示:第一、语言本身的发展上,PHP 从5版本之后将面向过程转变到面向对象思想方面,做出过一次重大的改变,PHP以后的技术方展,除了在基本语法上保持开发高效之外,需要将部分模块不段升级和优化。 也要从运行效率上有大的提高,以及多提供一些针对不同企业扩展的第三方类库进行丰富。第二、 PHP 语言上的应用发展, PHP 最大特点就是语法灵活,开发速度快, 开发成本低,最适合开发业务流程,所以互联中使用 PHP 开发动态网站将成为主流。对工作的期望与目标何在?回答提示:就是职业规划的另一种问法,也是公司在以后培养你的方向上的选择。可以提一些具体的想法和做法。让上级认为你之前考虑过这个事,而且重视自己的职业发展。就你申请的这个职位,你认为你还欠缺什么?回答提示:企业喜欢问求职者弱点,他们希望看到这样的求职者:继续重复自己的优势,然后说:“对于这个职位和我的能力来说,我相信自己是可以胜任的,只是缺乏经验,这个问题我想我可以进入公司以后以最短的时间来解决,我的学习能力很强,我相信可以很快融入公司的企业文化,进入工作状态。”企业喜欢能够巧妙地躲过难题的求职者。你通常如何处理別人的批评?回答提示:①沈默是金,不必说什么,否则情况更糟,不过我会接受建设性的批评。②我会等大家冷靜下来再讨论,反思自己是否有这方面问题并进行完善。怎样对待自己的失败?回答提示:我认为失败不是坏事,一件事情没有成功肯定是我做的地方有不是,我觉得能积极面对失败并总结经验成功就指日可待。什么会让你有成就感?回答提示:为公司竭力效劳,尽我所能,完成一个项目,并且能提出自己的创新想法。眼下你生活中最重要的是什么?回答提示:对我来说,能在这个领域找到工作是最重要的,能在公司任职对我说最重要。你为什么愿意到我们公司来工作?回答提示:对于这个问题,你要格外小心,如果你已经对该单位作了研究,你可以回答一些详细的原因,像“公司本身的高技术开发环境很吸引我。”我希望能够进入一家与我共同成长的公司”,“你们公司一直都稳定发展,在近几年来在市场上很有竞争力”,“我认为公司能够给我提供一个与众不同的发展道路。”这都显示出你已经做了一些调查,也说明你对自己的未来有了较为具体的远景规划。你和别人发生过争执吗?你是怎样解决的?回答提示:这是面试中最险恶的问题,其实是考官布下的一个陷阱,千万不要说任何人的过错,应知成功解决矛盾是一个协作团体中成员所必备的能力。基本上没有和他人产生矛盾,首先有矛盾就是因为大家对同一个问题有不同的解决方案,把方案里的优秀点统一起来就是最佳解决方案。你是否能获得这份工作,将取决于这个问题的回答。考官希望看到你是成熟且乐于奉献的。他们通过这个问题了解你的成熟度和处世能力。在没有外界干涉的情况下,通过妥协的方式来解决才是正确答案。你做过的哪件事最令自己感到骄傲?回答提示:这是考官给你的一个机会,让你展示自己把握命运的能力。这会体现你潜在的领导能力以及你被提升的可能性。记住:你的前途取决于你的知识、你的社交能力和综合表现。想过创业吗?回答提示:这个问题可以显示你的冲劲,但如果你的回答是“有”的话,千万小心,下一个问题可能就是:那么为什么你不这样做呢?而且HR会觉得你在公司的稳定性弱,所以有或者没有不要马上说出来。对这项工作,你有哪些可预见的困难?回答提示:①不宜直接说出具体的困难,否则可能令对方怀疑应聘者不行。②可以尝试迂回战术,说出应聘者对困难所持有的态度——工作中出现一些困难是正常的,也是难免的,但是只要有坚忍不拔的毅力、良好的合作精神以及事前周密而充分的准备,任何困难都是可以克服。分析:一般问这个问题,面试者的希望就比较大了,因为已经在谈工作细节,但常规思路中的回答,又被面试官“骗”了。当面试官询问这个问题的时候,有两个目的。一是看看应聘者是不是在行,说出的困难是不是在这个职位中一般都不可避免的问题。二是想看一下应聘者解决困难的手法对不对,及公司能否提供这样的资源。而不是想了解应聘者对困难的态度。如果我录用你,你将怎样开展工作?回答提示: ①如果应聘者对于应聘的职位缺乏足够的了解,最好不要直接说出自己开展工作的具体办法。②可以尝试采用迂回战术来回答,如“首 先听取领导的指示和要求,然后就有关情况进行了解和熟悉,接下来制定一份近期的工作计划并报领导批准,最后根据计划开展工作。”分析:这个问题的主要目的也是了解应聘者的工作能力和计划性、条理性,而且重点想要知道细节。如果向思路中所讲的迂回战术,面试官会认为回避问题,如果引导了几次仍然是回避的话,此人绝对不会录用了。你希望与什么样的上级共事?回答提示:①通过应聘者对上级的“希望”可以判断出应聘者对自我要求的意识,这既上一个陷阱,又是一次机会。②最好回避对上级具体的希望,多谈对自己的要求。③如“做为刚步入社会的新人,我应该多要求自己尽快熟悉环境、适应环境,而不应该对环境提出什么要求,只要能发挥我的专长就可以了。分析:这个问题比较好的回答是,希望我的上级能够在工作中对我多指导,对我工作中的错误能够立即指出。总之,从上级指导这个方面谈,不会有大的纰漏。与上级意见不一致时,你将怎么办?回答提示:①一般可以这样回答“我会给上级以必要的解释和提醒,在这种情况下,我会服从上级的意见。”②如果面试你的是总经理,而你所应聘的职位另有一位经理,且这位经理当时不在场,可以这样回答:“对于非原则性问题,我会服从上级的意见,对于涉及公司利益的重大问题,我希望能向更高层领导反映。”分析:这个问题的标准答案是思路①,如果用②的回答,必死无疑。你没有摸清楚改公司的内部情况,先想打小报告,这样的人没有人敢要。您在前一家公司的离职原因是什么?回答提示:避免把“离职原因”说得太详细、太具体。尽量说原单位给你带来的提升,体现出感恩的心态,而不能抱怨公司哪里不好。相关例子:如“我离职是因为这家公司倒闭;我在公司工作了三年多,有较深的感情;从去年始,由于市场形势突变,公司的局面急转直下;到眼下这一步我觉得很遗憾,但还要面对显示,重新寻找能发挥我能力的舞台。”同一个面试问题并非只有一个答案,而同一个答案并不是在任何面试场合都有效,关键在应聘者掌握了规律后,对面试的具体情况进行把握,有意识地揣摩面试官提出问题的心理背景,然后投其所好。你工作经验欠缺,如何能胜任这项工作?回答提示:①如果招聘单位对应届毕业生的应聘者提出这个问题,说明招聘公司并不真正在乎“经验”,关键看应聘者怎样回答。②对这个问题的回答最好要体现出应聘者的诚恳、机智、果敢及敬业。③如“作为应届毕业生,在工作经验方面的确会有所欠缺,因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现,实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力,而且比较勤奋,所以在兼职中均能圆满完成各项工作,从中获取的经验也令我受益非浅。请公司放心,学校所学及兼职的工作经验使我一定能胜任这个职位。”分析:这个问题思路中的答案尚可。突出自己的吃苦能力和适应性以及学习能力(不是学习成绩)为好。如果你在这次面试中没有被录用,你怎么打算?回答提示:现在的社会是一个竞争的社会,从这次面试中也可看出这一点,有竞争就必然有优劣,有成功必定就会有失败。往往成功的背后有许多的困难和挫折,如果这次失败了也仅仅是一次而已,只有经过经验经历的积累才能塑造出一个完全的成功者。我会从以下几个方面来正确看待这次失败:①要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行,能够超越自我。②善于反思,对于这次面试经验要认真总结,思考剖析,能够从自身的角度找差距。正确对待自己,实事求是地评价自己,辩证的看待自己的长短得失,做一个明白人。③主要是技术上哪里薄弱,把不足的技术抓紧时间攻克。谈谈你做过的项目?回答提示:举一个你最有把握的例子,把来龙去脉说清楚,而不要说了很多却没有重点。切忌夸大其词,把别人的功劳到说成自己的,很多主管为了确保要用的人是最适合的,会打电话向你的前一个主管征询对你的看法及意见,所以如果说谎,是很容易穿梆的。谈谈你过去的工作中,最令你受挫的事情?回答提示:如果是学生可以用竞赛里的名次来举例;如果是员工可以以工作中自己努力而又没有做成功的项目来举例。分析:该问题的目的是借此了解你对挫折的容忍度及调解方式。你觉得原来的工作对你从事 PHP 开发有帮助吗?回答提示:这是针对求职者提出的问题,建议此时可以配合面试工作的特点作为主要依据来回答,如业务工作需要与人沟通,便可举出之前工作与人沟通的例子,经历了哪些困难,学习到哪些经验,把握这些要点做陈述,就可以轻易过关了。工作中你难以和同事、上司相处,你该怎么办?回答提示:①我会服从领导的指挥,配合同事的工作。②我会从自身找原因,仔细分析是不是自己工作做得不好让领导不满意,同事看不惯。还要看看是不是为人处世方面做得不好,如果是这样的话 我会努力改正。③如果我找不到原因,我会找机会跟他们沟通,请他们指出我的不足,有问题就及时改正。④作为优秀的员工,应该时刻以大局为重,即使在一段时间内,领导和同事对我不理解,我也会做好本职工作,虚心向他们学习,我相信,他们会看见我在努力,总有一天会对我微笑的。如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?回答提示:工作一段时间后发现工作不适合你,有两种情况:①如果你确实热爱 PHP 程序员这个职业,那你就要不断学习,虚心向领导和同事学习业务知识和处事经验,了解这个职业的精神内涵和职业要求,力争减少差距;②你觉得这个职业可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对单位和个人都有好处。而且我会推荐更适合 PHP 职位的人选。在完成某项工作时,你认为领导要求的方式不是最好的,自己还有更好的方法,你应该怎么做?回答提示:①原则上我会尊重和服从领导的工作安排,同时私底下找机会以请教的口吻,婉转地表达自己的想法,看看领导是否能改变想法。②如果领导没有采纳我的建议,我也同样会按领导的要求认真地去完成这项工作。③还有一种情况,假如领导要求的方式违背原则,我会坚决提出反对意见,如领导仍固执己见,我会毫不犹豫地再向上级领导反映。如果你的工作出现失误,给本公司造成经济损失,你认为该怎么办?回答提示:①我本意是为公司努力工作,如果造成经济损失,我认为首要的问题是想方设法去弥补或挽回经济损失。如果我无能力负责,希望公司帮助解决。②分清责任,各负其责,如果是我的责任,我甘愿受罚;如果是一个我负责的团队中别人的失误,也不能幸灾乐祸,作为一个团队,需要互相提携共同完成工作,安慰同事并且帮助同事查找原因总结经验。③总结经验教训,一个人的一生不可能不犯错误,重要的是能从自己的或者是别人的错误中吸取经验教训,并在今后的工作中避免发生同类的错误。检讨自己的工作方法、分析问题的深度和力度是否不够,以致出现了本可以避免的错误。如果你做的一项工作受到上级领导的表扬,但你主管领导却说是他做的,你该怎样?回答提示:我首先不会找那位上级领导说明这件事,我会主动找我的主管领导来沟通,因为沟通是解决人际关系的最好办法,但结果会有两种:①我的主管领导认识到自己的错误,我想我会视具体情况决定是否原谅他。②他更加变本加厉的来威胁我,那我会毫不犹豫地找我的上级领导反映此事,因为他这样做会造成负面影响,对今后的工作不利。祝你早日找到心仪的工作!原文传送门 https://www.hoehub.com/articles/Interview-answering-skills.html

January 18, 2019 · 1 min · jiezi

蚂蚁4轮面经(Java研发):悲观锁+G1收集器+幻读+连接池+分布式架构

一面1.线程池有哪些参数?分别有什么用?如果任务数超过的核心线程数,会发生什么?阻塞队列大小是多少?2.数据库连接池介绍下,底层实现说下3.hashset底层实现,hashmap的put操作过程4.说说HaspMap底层原理?再说说它跟HaspTable和ConcurrentHashMap他们之间的相同点和不同点?5.说说B+树和B树的区别,优缺点等?6.算法题,对一个链表进行归并排序,链表可能有环7.怎么实现一个线程安全的计数器?8.原子类AtomicInteger实现原理是什么?和你设计的计数器优劣比较?CAS怎么实现原子操作的?9.Java中的锁有什么?synchronized与Lock的区别?公平锁和非公平底层怎么实现的?AQS原理详细介绍一下?10.你在项目中一般怎么调优JVM的呢?11.说一下GC吧,什么时候进行Full GC呢?12.你了解哪些收集器?CMS和G1。详细谈谈G1的优点二面1.了解哪些排序算法,讲讲复杂度2.手撕归并排序3.Redis有哪些数据结构?底层的编码有哪些?有序链表采用了哪些不同的编码?4.redis的hash数据结构最多能存储多少个元素5.自己如何实现RPC?6.mysql默认存储引擎?MyISAM、InnoDB、MEMORY的区别7.什么是幻读,如何解决8.事务隔离级别有什么?通过什么来实现的?分别解决了什么问题?9.乐观锁与悲观锁的使用场景三面1.介绍对你技术能力帮助最大的项目,重点讲架构设计思路2.分布式全局唯一ID怎样来实现?3.dubbo的生产者如何发布服务,注册服务,消费者如何调用服务?4.dubbo负载均衡的策略有哪些?一致性哈希详细聊一下?5.分布式session如何实现的6.微服务你的理解?以及常用的微服务方案dubbo、spring cloud的比较?7.Kafka怎么保证数据可靠性?8.数据库主从同步数据一致性如何解决?技术方案的优劣势比较?9.分布式锁的实现方式你知道有哪些?主流的解决方案是什么?HR面常规问题为主1.聊人生的经历2.聊印象深刻的人生的经历3.说下技术方面或者生活方面你做得比较好的一个点和不足的一个点吧?4.职业规划以上就是蚂蚁技术三面和HR面试题目,欢迎工作一到五年的Java工程师朋友们加入Java进阶架构学习交流:952124565群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)同时也会提供最新的BAT面试技巧,合理利用自己每一分每一秒的时间来学习提升自己。

December 24, 2018 · 1 min · jiezi

2018年终巨献:阿里、腾讯最新Java面试题,你准备好进BAT了吗

Java基础1.进程和线程的区别;2.Java的并发、多线程、线程模型;3.什么是线程池,如何使用?4.数据一致性如何保证;Synchronized关键字,类锁,方法锁,重入锁;5.Java中实现多态的机制是什么;6.如何将一个Java对象序列化到文件里;7.说说你对Java反射的理解;8.同步的方法;多进程开发以及多进程应用场景;9.在Java中wait和seelp方法的不同;10.synchronized 和volatile 关键字的作用;11.服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达;12.抽象类与接口的区别;应用场景;抽象类是否可以没有方法和属性;13.静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?14.修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法;15.说说你对泛型的了解;16.Java的异常体系;17.如何控制某个方法允许并发访问线程的个数;18.动态代理的区别,什么场景使用;19.Dex加载过程和优化方式;20.Jvm和Gc机制;21常用的设计模式。22.数据结构与算法23.堆和栈在内存中的区别是什么(数据结构方面以及实际实现方面);24.最快的排序算法是哪个?给阿里2万多名员工按年龄排序应该选择哪个算法?堆和树的区别;写出快排代码;链表逆序代码;25.求1000以内的水仙花数以及40亿以内的水仙花数;26.子串包含问题(KMP 算法)写代码实现;27.万亿级别的两个URL文件A和B,如何求出A和B的差集C,(Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)28.蚁群算法与蒙特卡洛算法;29.写出你所知道的排序算法及时空复杂度,稳定性;30.自己集合实现一个队列31.自己实现线程安全类32.快速排序和冒泡的排序,怎么转换一下。二、Spring mvc与Struts区别Hibernate/Ibatis两者的区别Hibernate一级和二级缓存Hibernate实现集群部署Hibernate如何实现声明式事务简述Hibernate常见优化策略Spring bean的加载过程(推荐看Spring的源码)Spring如何实现AOP和IOCSpring bean注入方式Spring的事务管理(推荐看Spring的源码)Spring事务的传播特性springmvc原理springmvc用过哪些注解Restful有几种请求Restful好处Tomcat,Apache,JBoss的区别memcached和redis的区别有没有遇到中文乱码问题,如何解决的如何理解分布式锁你知道的开源协议有哪些json和xml区别三、设计模式:设计模式的六大原则常用的设计模式用一个设计模式写一段代码或画出一个设计模式的UML如何理解MVC高内聚,低耦合方面的理解四、数据结构:队列、栈、链表、树、堆、图编码实现队列、栈操作系统:操作系统什么情况下会死锁产生死锁的必要条件死锁预防数据库:范式数据库事务隔离级别数据库连接池的原理乐观锁和悲观锁如何实现不同数据库的数据查询分页SQL注入的原理,如何预防数据库索引的实现(B+树介绍、和B树、R树区别)SQL性能优化数据库索引的优缺点以及什么时候数据库索引失效10.Redis的存储结构网络:OSI七层模型以及TCP/IP四层模型HTTP和HTTPS区别HTTP报文内容get提交和post提交的区别get提交是否有字节限制,如果有是在哪限制的TCP的三次握手和四次挥手session和cookie的区别HTTP请求中Session实现原理redirect与forward区别安全:如果客户端不断的发送请求连接会怎样DDos攻击DDos预防那怎么知道连接是恶意的呢?可能是正常连接其它:说一个你参与的项目、其中作为什么角色遇到最困的问题是什么,怎么解决的你认为自己有那些方面不足平常如何学习的如何评价自己智力题:给你50个红球和50个黑球,有两个一模一样的桶,往桶里放球,让朋友去随机抽,采用什么策略可以让朋友抽到红球的概率更高?从100个硬币中找出最轻的那个假币?总结:以上这些考察的知识点,在强大的互联网上都可以搜索到答案,有些答案可能不是很全,所以需要自己去总结,但是对于一些需要知道原理的知识点,还是推荐看源代码或者对于的书,然后总结得到自己的东西,这样既学到真东西,还不会很容易忘。Java基础的知识点推荐《Java编程思想》,JVM的推荐《深入理解Java虚拟机》,Spring原理的推荐《Spring源码深度解析》,对于网站架构的推荐《大型网站技术架构核心原理与案例分析》。以上面试题答案和资料获取方式,加群:952124565,进群即可获取。

November 23, 2018 · 1 min · jiezi

2018年Java面试总结(收藏明年跳槽用)

JAVA问题总结java 基础java数据类型谈一谈 “==” 跟 “equals” 的区别jvm 的性能调优(三年以上的工作经历问的比较多)最好多掌握集合是个重灾区: 回答的好,基本面试官会觉得你的基础怎么样的 天平arrayList LinkedList Vector 的区别 底层问的多红叉树数据结构考试题出的多Sethashset 跟 treesettreeset 两种实现排序的底层方法Map 问的是最多的HashMap HashTable 区别 HashMap 的底层实现原理ConcurrentHashMap 的实现原理HashMap 跟 ConcurrentHashMap 底层问的偏多TreeMap LinkedHashMap HashMap 的区别java 中的线程问题synchronized 跟 volatile 区别实现创建新线程的方法 3种 有返回值实现方式好处面试官喜欢问你 有没有用过线程池,有没有设计过线程池方面的代码三年以上工作经历 常见的设计模式(多说设计模式种类) 最好能说出我们的spring、 tomcat中底层的一些实现那些功能 用到哪几种设计模式(bean 的注入跟管理)spring中的两大核心 依赖注入aop 跟 控制反转 ioc 需要仔细琢磨透springmvc 跟 struts2.0 区别mybatis 跟 hibernate、 jdbc 的区别 优缺点springmvc 的流程 一个请求request请求, 经历了那些 ; 最好能画出 springmvc的流程图我们都知道spring 是单利 如果实现多利; 怎么做?spring中问的东西 对你的面试效果权重很高;applicationContext通常实现什么bean工厂spring 那些注解 需要掌握spring事务管理机制spring底层原理 需要掌握;3年以上动态代理 跟 继承jdk 两种实现 最好能写其中一种动态代理的代码。java IO 跟NIO的区别 我面试过程没有遇到过, 可以相应的了解java8的新特性 需要掌握mysql的存储过程sql 语句分页问的特别多; mysql orcle也要知道sql底层些东西 最好了解一般面试官会问你 简单的介绍下 redis对redis的很熟悉面试官 基本会问这些redis的存储策略redis的集中数据类型 (需要很熟)redis的容灾机制redis的有个map 数据类型 key 是否可以是任意类型 还有它的长度有无限制redis在业务上 可以实现那些功能 不单单是 作为非关系型数据库的作用 还有其他作用;可以响应 的去了解redis的基本操作命令 设置过期时间 expir等redis 问的频率很高; 需要多了解电商方面问题(由于我写了电商项目)dubbo+zookeeper(zookeeper最少三台因为它有投票机制) 面试官当时问我这个电商项目用到几台zookeeper ;都是奇数;最少3台dubbo + zookeeper的底层能掌握多少; 就看你自己了单点登入session共享js跨域问题静态缓存的问题; 你们项目是怎么很好的解决静态资源缓存问题solr全文检索问到过一次两点一线 得需要知道是什么cookie 跟 session的区别cookie 的值 在网页中的请求头 请求体 还是 在哪儿nginx 问的不多 我们了解足够应付过去(nginx这个东西实在是太优秀了)运维方面上的就是 linux一些操作命令 设置权限等并发工具包:java.util.concurrent 下面几个常用的 ...

November 14, 2018 · 1 min · jiezi

软实力的准备——一篇文章教会你面试中的小套路

面试,一个短时间内对某个人做出判断的测试。很多时候,工程师们只准备了相关的技术点,却没有对非技术的软实力部分做准备。而软实力的考察,不仅贯穿整个面试流程中,更在BOSS面和HR面中尤为关键。鉴于当前业界也没有特别契合的攻略文档,仅有有几篇文章还是HR写的,特有此文。在本文中,我们将从环境与心态,相关问题和表达技巧三个方面阐述如何准备面试,以确保在硬实力的OK的情况下,软实力不掉链子。马上开始~1. 面试中的软实力如下图,面试可以分为硬实力(技术层面)和软实力(非技术层面)的考核。在技术面试中,硬实力是基础,但这不是本文的讨论内容。业界也有很多技术面试文档,大家可以选择自己合适的文档来准备。软实力在我看来和硬实力一样重要。具体来说,硬实力是基础,软实力就是硬实力的Buff。没有基础当然不行,但是一个好的软实力,可以让你得到1+1>2的收益。有些同学技术面试通过的很顺利,等到BOSS面和HR面就被涮了,很大的原因就是软实力没有准备好。既然软实力如此重要,那么我们该从哪几个层面准备呢?2. 软实力的准备2.1 环境与心态准备环境和心态是最容易准备,也是最容易被忽略的部分,但是它们真的很重要。对于环境和心态,我认为主要有以下两条:2.1.1 电话面试:安静无打扰,信号好如果是现场面试,地点往往是面试官订的,按时去就可以了。而如果是电话面试,自己找一个安静,无打扰且电话信号好的地方就特别重要。最好的地点是无人打扰的会议室,事先还要先给朋友家人打个电话试试,不然一旦到时候面试官听不清楚,就会大大影响你的面试质量。面试官就会想,连一个地方都找不好,还能干什么。2.1.2 自信、开朗的心态面试前的半个小时就要开始准备面试了,但是不要看书,而是调整心态。从面试官的角度上来看,一个自信、朝气满满、爱笑的面试者在第一印象上就远胜一个拘束,谨慎,严肃的面试者。而一个良好的心态可以帮助你:在自己没有把握的题目上更有想法更有勇气去尝试解决难题甚至让面试官少问几道题这些都远胜于你在一道题目上的得失。要知道面试是一个综合考察的过程,就好像我们100分的考试,一道题目的得失并不会让你不及格,重要的是考前状态一定要调整好。遇到难题不慌,即使解决不了也尝试说出自己的思路;遇到简单的题也要多考虑一下,不膨胀,不因为马虎大意丢分。多笑,多说,不要惜字如金,这样才能留下更好的印象。2.2 相关问题在拥有了良好的环境和心态后,并不是高枕无忧了,面试中还有一些常见问题需要准备。这些问题往往是准备了就能回答的很好,没有准备就回答的很痛苦的,既然这样,为什么不做好准备呢?下面会是一个题目List,以及面对这些题目时我们的回答方式。2.2.1 你最近在看什么书/有没有研究什么新技术提前找一本技术书或者研究一个新的技术,看完且总结重点,保证说时言之有物即可。2.2.2 你对薪资的要求HR老问这个问题,一般来说第一次问时,不需要直接说出期望的薪资,可以这么回答:我相信公司的规范,可以给我符合我职级的工资。当然,现在前端行业都比较坦诚,HR基本上都会继续问你具体金额,这就需要你在面试前通过你的朋友多多了解新公司的行情,然后结合你自己的情况给出一个数值。其实只要和公司想要给你的差距不是太大,都不是问题。面试是双向选择嘛,可以谈的。但是如果是差距太大的话,HR就会认为你不懂行情,这就有点难受了。2.2.3 说一说你最成功/失败的项目按照STAR法则来说,尝试着去讲一个故事。这个故事要有背景,因为这个背景,导致了什么样的问题,你是如何去尝试解决的,最终取得了什么样的成果。需要注意的是,作为一个工程师,我们还要着重关注以下几个点:数据为王:优化之前的数据,优化之后的数据,提升了XX百分比业务导向:这个项目一定要是你日常核心工作中的横向比较:业界是否有其他的解决方案,你的方案比起其他人有什么样的优势,处在一个什么样的位置归纳提升:一个单独的技术点满分是10分,但是总结整理出来的玩法和套路满分可能是100分2.2.4 你觉得你的优势/劣势是什么优势其实大家都会说,多举例子证明即可。劣势的话,比较稳妥的方式是找一个不太重要的劣势,比如说太过认真,变通较少,但是就是会显得不够真诚。另外一个稍微难点的方法就是仔细考虑自己的优劣势,照实说,但是一定要想好要怎么拉回来。举个例子,我最大的毛病就是钻研的不够深入,比如XXX,我也会去看他们的源码,了解他们的基本原理,但是对于更进一步的优化还欠缺这样的思考,我认为我下一步进步的重点就在这方面,blabla…这样说,就代表了其实不是我不深入,只是我认为自己深入的还不够,能给面试官一个更好的印象。Tips: 别照着例子背啊,结合自己的情况描述更佳。要是问你看了什么源码,三言两语被问倒了就惨了。2.2.5 你有什么想问我的吗这是面试官在面试最后百分百会问的一个问题。除了对于岗位职责的问题,强烈建议问的一个问题是:如果我这次面试有幸过了的话,大概多久能收到消息?通过问这个问题,从面试官的反应中大概率可以知道自己这次面试过了与否,特别棒的一个小套路。2.3 表达技巧不管我们准备的有多么充分,总会有准备不到的问题。这个时候直接说不会肯定是最差的答案,这个时候就需要一定的表达技巧了。2.3.1 清晰直接不会就是不会,直接说“这块我了解的不多”或者“这块我确实做得不够好”。不要长篇大论说理由和原因,显得很推卸责任,很可能会让面试官厌烦,得不偿失。2.3.2 反转并言之有物当然了,尽管题目不太会或者不太肯定,如果我们有一些想法,也是可以说的。在清晰直接的表达完自己对这块不熟之后,可以依据自己的看法说出思路。举个例子:问题:你是否优化过Vue或者React的源码?回答:我没有优化过,但是,我觉得这个问题需要分两方面来看。首先,现在这些主流框架的代码已经写得比较好了,优化的空间不大。另外,我看过它们的一些源码,比如说Vue nextTick的部分和React fiber的部分,而且我在的业务代码中也针对React的组件渲染做了XXX的优化,blabla…回答要切合题目的主题,不要反转了之后瞎BB,那样还不如单纯的说不会。另外就是要尝试多引导说话,将面试官的问题纳入到你的节奏上来,一旦能达到这一步,恭喜你,本次面试你一定是过了的。3 总结面试中的技术准备一定是最关键的,但是好的软实力准备可以让你更上一层楼。希望这篇文章能给大家的面试多增加一层BUFF。

November 12, 2018 · 1 min · jiezi