软件工程师面试经验(共156条)

  • 2022-10-12 10:02:31 | 网上申请
    面试过程:

    目前只经历过技术一面,感觉没问什么问题,主要就是一个自我介绍,然后之后就问项目相关的。
    后面一直就围绕项目来聊,问我这个面试官人非常nice,很健谈,感觉整个面试过程他说的话比我说的还多的多。
    最后到点了就这样结束了。什么技术问题、专业知识啥的居然基本没问,可能是因为我运气好加上这是第一轮面试吧。不知道能不能通过一面。

    面试官问的面试题:

    京东商城java后端开发面试题

    1.首先常规自我介绍
    2.然后让介绍一下项目经历
    3.说完又问项目用的什么技术
    4.问了一下项目建的表大概有哪些
    5.然后问mysql表中数据太多该怎么办
    后面如上所述,一直就围绕项目来聊,问我这个面试官人非常nice,很健谈,感觉整个面试过程他说的话比我说的还多的多。感觉真就人品好,一面估计能混过去,但是二面应该就现原形了。。。

  • 2021-01-20 14:31:46 | 社会招聘
    面试过程:

    先笔试,在面试,笔试题做的不好,有些东西都记不清了;
    面试就问一些很大众化的问题,比如之前的工作经验,为什么要选择做这个工作,学习的过程中做过的项目,项目中用到的功能大概说一下,印象最深的是什么之类的。。。
    话说这个公司的待遇估计还不错的,只是没给消息,无奈
    一些问题:问有没有自己做的项目,就是没有老师带的
    我的回答:答有,在线图书借阅系统,简历上也有写

    面试官问的面试题:

    京东JAVA工程师面试题

    1.做过的项目,自己的两个优点两个缺点。然后根据我的回答深入问。
    2.技术方面根据我自己用到的技术深入了解:
    spring: spring技术的用处。
    hibernate:hibernate如何映射数据库才能达到最好效果
    sqlserver:怎么提升数据库查询速度。
    若用户反映一个功能很慢,我怎么办

  • 2018-11-12 19:58:28 | 校园招聘
    面试过程:

    笔试选择做的还行,编程题只过了半个,还收到了面试通知,室友一半不答了也收到了。感觉京东笔试不刷人。面试在一个酒店,很大的排场,因为我是4点半场,面一个人应该是半小时,但我那个面试官之后貌似没人了,面了我一个多小时。可能对我比较满意,最后直接告诉我说复试明天还是这里,如果明天复试面试官让写代码的话应该遍写遍讲自己的思路,因为他让我手写代码的时候好像被晾的挺无聊的,哈哈。二面面试官也很好,聊的也很开心,结果是没过。唉。

    面试官问的面试题:

    京东商城JAVA开发工程师面试题

    一面:先让讲项目,而后问项目中遇到的问题,要讲的很具体,而后说一下怎么解决的。
    然后集合框架,具体又讲了ArrayList和HashMap。又多线程的各种问题,线程安全机制。IOC的理解,NIO,一个实际问题让面向对象分析并写代码,写抽象工场,写二分查找。
    二面:刚开始一直根据自我介绍聊天,聊校园经历什么的,最合他说聊那些是想知道为什么没有实习,个人感觉挂就挂在这里了。
    讲项目,项目中用到的技术。又是集合框架,这真是必问。JVM,垃圾回收算法。事务,在项目中具体是怎么处理的,这个问题产生了分歧,不过我秒认错。并发工具包,锁,线程池相关。

  • 2018-08-29 15:55:55 | 网上申请
    面试过程:

    电话面试,首先微信询问了为什么离职,我说是因为出差不能 接受,最好不要说其他体现自己缺点的原因。然后就让我等电话面试,当天下班7点就来电话开始面试了,面试一共就问了10个问题左右,当时聊的挺轻松的。

    面试官问的面试题:

    京东商城JAVA开发工程师面试题

    1. LinkedList和ArrayList的数据原理?
    a) LinkedList:链表结构,增删快,读取慢。
    b) ArrayList:数组结构,读取快,增删慢。
    2. ArrayList的默认初始化长度,在add时的源码实现?
    a) 默认长度10,add时如果满了会使用arrays.copy()到一个新建的长度为1.5倍的数组。
    3. HashMap的底层实现,在高并发时会出现的问题,是否有序的,解释无序的原因?
    a) Entry数组,hash碰撞时会形成链表。
    b) 并发put时会在扩容时形成链表环,下一次get时内容溢出。
    c) 无序,数组下标是根据key的hash值计算的,和放入顺序无关。
    4. HashSet内部实现,如何实现的无重复?
    a) 内部就是包了一个hashMap,使用key的hash值来存放到map里面,如果相同就覆盖。
    5. String的内部结构?
    a) Char数组,定义为final类不可变,每一次字符串拼接都是new stringBuilder.append(),每一次的replace/substring都是new String()。
    6. 线程池的参数含义,线程池执行新情求的流程?
    a) 流程:
    i. 核心数未满就创建线程,即使有空闲的;
    ii. 核心数满了队列未满,就放入队列;
    iii. 队列满了,就新建线程直至最大数满;
    iv. 最大数满了就根据拒绝处理策略处理;
    b) corePollSize:核心线程数
    c) maximumPoolSize:最大线程数
    d) keepAliveTime:空闲线程保留时间
    e) TimeUnit:保留时间单位
    f) BlockingQueue:阻塞队列(有限队列ArrayBlockingQueue,无限队列LinkedBlockingQueue)
    g) ThreadFactory:线程工厂
    h) RejectedExeutionHandler:队列满时的拒绝处理策略
    7. Runable和Callable区别?
    a) 都是任务,后者可以有返回值或者抛出异常,使用get获取返回值时要阻塞当前线程。
    8. volatile关键字的作用?
    a) 防止指令重排,对所有线程的可见性;
    b) 可见性是基于内容屏障实现的,保证每个线程总能拿到内存中的最新值。
    9. 事务的理解,事务的传播性,传播级别,隔离性,隔离级别?
    a) 事务分为编程式和声明式。编程式更加灵活,声明式方便管理。
    b) 传播级别定义的是事务的控制范围,事务隔离级别定义的是事务在数据库读写方面的控制范围。
    c) 传播级别:
    i. REQUIRED:上下文已存在事务,则加入到事务中,若不存在,则创建事务
    ii. NESTED:嵌套上下文中的事务,不存在就新建
    iii. SUPPORTS:上下文已存在事务,则加入到事务中,若不存在,则不使用事务
    iv. NOT_SUPPORTED:不支持事务,如果在事务中,就挂起直至逻辑完成后恢复
    v. REQUIRES_NEW:每次都新建一个事务,挂起上下文的事务直至本事务完成后恢复
    vi. MANDATORY:要求上下文必须存在事务,否则抛出异常
    vii. NERVER:要求上下文不允许存在事务,否则抛出异常
    d) 隔离级别:
    i. Serializable:事务串行执行,影响性能
    ii. Repeatable read:避免了不可重复读取,保证一个事务不会修改已经由另一个事务读取但未提交的数据
    iii. Read committed:默认级别,保证一个事务不会读取已经由另一个事务读取但未提交的数据
    iv. Read uncommitted:保证不会读取非法数据
    10. SQL优化的例子?
    a) 添加索引
    i. 联合索引,谁在前谁可以单独用索引
    ii. is null 和 is not null 不会使用索引
    iii. 对列进行操作,如||连接,不会使用索引
    iv. Like 语句%在前面不会使用索引
    v. Order by 里面使用表达式不会使用索引
    b) 将不等于<>替换为大于or小于
    c) Select避免使用*号
    d) 使用EXISTS代替IN
    e) Sql语句全部大写,因为执行时会转换为大写
    f) 读写分离和分库分表,可以用mysql的主从同步实现分库
    11. SQL注入方式?如何防止?
    a) 方式:比如登录页面用户名输入 ‘ or 1=1 --。
    b) 防止:
    i. 使用预编译PreparedStatement;
    ii. 正则表达式过滤sql关键字和符号;
    12. 乐观锁 悲观锁?
    a) 乐观锁:借助版本号或时间戳,更新前获取旧值,更新时判断值为旧值才更新,否则回滚重试。
    i. 使用场景:业务中无法和数据库保持连接的情况。或获取锁失败几率小的情况。
    b) 悲观锁:一锁二查三更新。Mysql的select for update如果没用索引会全表扫描都锁上。
    13. redis 可存储的数据结构,如何实现分布式锁?
    a) String字符串,hash哈希,list列表,set集合,zset散列
    b) 分布式锁用setnx命令,如果锁不存在则set进去,如果锁存在则不做操作
    c) Setnx结合expire一起使用,保证过期自动解锁,防止死锁。但是可能出现expire命令时突然崩溃导致过期时间设置失败
    d) 高版本redis使用set命令,一次性设置所有参数
    jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);
    e) 还可以使用lua脚本加eval命令实现加锁的原子操作(非原子性场景:解锁时锁突然过期,然后另一个客户端加锁成功,这时解锁就解到别人去了)
    14. Autowire 和 Resource 区别?
    a) Autowire是byType的,是spring提供的,设置required=false可以注入null,结合@Qualifier可以byName。
    b) Resource是byName的,是jdk自带的。
    i. 如果同时指定了name和type,则找不到就抛出异常;
    ii. 如果指定了name,就只按name匹配,找不到抛出异常;
    iii. 如果指定了type,就只按type匹配,找不到或找到多个抛出异常;
    iv. 如果没有指定,先按name,找不到再按type;
    15. Spring Boot、Spring MVC 和 Spring 有什么区别?
    a) Spring:主要核心是IOC和AOP。
    b) Spring MVC:用于web应用,借助mvc分层,核心是DispatcherServlet,ModleAndView,ViewResolver。
    c) Spring Boot:只支持JDK8,简化大量配置,通过自动配置和一个启动类实现,默认是tomcat容器,可以通过pom配置修改为jetty。
    (如省略了web.xml+servlet-mvc.xml+application.xml等配置文件)
    16. 微服务?
    a) 概念:根据业务拆分为多个服务,部署在不同服务器上,相互之间进行调用,使用dubbo或者springcloud;
    b) Dubbo停止维护,只支持RPC,不支持分布式;
    17. Spring Cloud 如何注册服务?断路器是什么?Eureka Server集群?
    a) 在main方法加@EnableDisscoveryClient,就可以在服务发布时,将服务名+ip+port+域名注册到注册中心,一般通过zookeeper/Eureka注册。
    b) 调用的时候通过ribbon和feign(整合了Ribbon和Hystrix):
    i. Ribbon:@RibbonClient(value="服务名称"),要构建http请求;
    ii. Feign:@FeignClient,以接口的方式调用,定义为抽象方法,注解写在方法上;
    c) 断路器:处理多个请求等待响应的问题,有三种状态:
    i. 完全打开:上一次请求没有响应,下一次请求就被拦截。
    ii. 半开:短时间内检测到服务有恢复迹象,就会放过请求,如果能调用成功,则关闭断路器。
    iii. 关闭:服务能正常调用。
    d) Eureka Server集群:采用去中心化的架构,每一个节点都保存其他节点的副本,新建节点后,会从附近节点请求注册信息做初始化,并且以心跳检测所有节点是否正常运行,如果超时没有收到心跳就会注销该节点。如果丢失心跳过多,就会自我保护。
    18. kafka?activeMQ?RabbitMQ?
    a) Kafka:处理发布-订阅的模式,高吞吐量,大数据量,支持批量写入,消息写入磁盘,减少IO;
    b) ActiveMQ:
    c) RabbitMQ:支持miror queue,不支持批量写入
    19. JVM内存区域划分,内存模型,JVM调优?
    a) 内存区域:
    i. 堆:所有线程共享,存放对象和数组。
    ii. 栈:每个线程有独立的栈,存放局部变量,操作数栈,常量池的引用,方法返回地址(递归会导致栈内存溢出) 。
    iii. 方法区:所有线程共享,存放类信息,静态变量,编译后的代码。
    iv. 本地方法栈:用于调用native方法服务的。
    v. 程序计数器:每个线程有独立的计数器,保存的当前执行的指令的地址,用于多线程中切换线程后恢复之前的执行位置。
    b) 内存模型:
    i. 堆(Heap space分为年轻代和老年代。年轻代分为Eden和两个Survivor区)
    1. 年轻代是新对象的产生地方,主要位于Eden区,Eden区被用完就会触发Minor GC,存活的放入From Survivor区,FS区满后触发GC,存活的放入To Survivor区。多次GC后仍然存活的放入老年代。
    2. 老年代存放长久存活的对象,满后触发Major GC,这会让所有线程停止直到回收完成。
    ii. 永久代(Permanent Generation)(Java8中已经用metaspace完全替代了永久代。jvm参数-XX:PermSize 和 -XX:MaxPermSize选项会被忽略)
    iii. Native Area(程序计数器+本地方法栈)
    c) 内存调优:
    i. -Xmx/Xms:最大/初始堆内存 -XX:MaxNewSize/NewSize:最大/初始年轻内存(通常为 Xmx 的 1/3 或 1/4)
    ii. 回收算法:引用计数,标记清除(碎片问题),复制(空间问题),标记整理(最优)
    20. 设计模式,使用场景?
    a) 观察者模式:如android的各种listener监听,借助接口通知观察者做出响应
    b) 装饰者模式:如IO流的各种包装new BufferedInputStream(new FileInputStream(new File()))
    c) 适配器模式:如Java.util.Arrays#asList(),java.io.InputStreamReader(InputStream)
    d) 桥接模式:减耦合,如Collections类中的sort(),JDBC数据库访问接口API

  • Java研发岗面试经验(北京) - 京东

    2024-04-02 | 社会招聘

  • PHP开发工程师面试经验(北京) - JD京东商城

    2022-08-16 | 网上申请

  • gis软件开发工程师面试经验(北京) - 京东商城

    2022-06-21 | 社会招聘

  • java engineer面试经验(上海) - 京东

    2022-06-14 | 招聘会

  • 软件测试工程师面试经验(北京) - 京东商城

    2018-08-04 | 内部推荐

  • 初级软件测试工程师面试经验(北京) - 京东

    2021-07-01 | 网上申请

  • 软件开发面试经验(北京) - 京东

    2022-05-20 | 社会招聘

  • JAVA软件工程师面试经验(北京) - 京东

    2018-05-12 | 校园招聘

  • JAVA研发工程师面试经验(北京) - 京东商城

    2021-02-05 | 网上申请

  • java软件开发面试经验(北京) - 京东商城

    2020-03-23 | 校园招聘

  • java前端开发工程师面试经验(北京) - 京东商城

    2020-07-16 | 校园招聘

  • java开发实习生面试经验(北京) - 京东

    2019-12-17 | 网上申请

  • Java开发面试经验(北京) - 京东商城

    2020-05-09 | 网上申请

  • JAVA开发工程师面试经验(上海) - 京东商城

    2019-12-04 | 内部推荐

  • 实习java工程师面试经验(北京) - 京东

    2020-05-06 | 熟人/朋友/介绍

  • JAVA研发工程师面试经验(北京丰台) - 京东商城

    2019-11-15 | 网上申请

1 2 3 4 5 6 7 8 下一页   共 8 页

还需查看京东商城 更多信息?

最后更新时间:2024-04-02