首页 文章 精选 留言 我的

精选列表

搜索[工程师],共10000篇文章
优秀的个人博客,低调大师

最近Java高级工程师面试总结

面试总结 Java基础 Hashtable和HashMap的区别。 抽象类与接口的区别。 final关键字的使用和区别。 异常分类和处理机制。 JDK版本区别。 StringBuilder内部实现机制。 反射机制的使用。 匿名内部类的使用。 泛型的概念和使用。 弱引用和虚引用的概念和使用方式。 开源框架 SpringMVC和Struts2的区别 Spring IOC和AOP的概念以及实现方式 Spring事务的管理 Hibernate与MyBatis的比较 Hibernate延迟加载的机制 JVM虚拟机 GC算法有哪些 垃圾回收器有哪些 如何调优JVM 缓存和NoSQL 缓存的使用场景 缓存命中率的计算 Memcache与Redis的比较 如何实现Redis的分片 MongoDB的特点 分布式 zookeeper的用途 dubbo的用途以及优点 dubbo的实现原理 数据结构和算法 单向链表的逆序排列 双向链表的操作 1亿个整数的倒序输出 找出给定字符串中最长回文(回文:abcdcba,两端对称) 网络编程 Get和Post的区别 Https协议的实现 长连接的管理 Socket的基本方法 数据库 inner join和left join的区别 复杂SQL语句 数据库优化方式 数据库拆分方式 如何保证不同数据结构的数据一致性 安全 什么是XSS攻击,具体如何实现? 开放问题:如何保障系统安全? 设计模式 写出一个设计模式的类图 设计模式的意义是什么 写个单例模式的代码 多线程 如何避免Quartz重复启动任务 线程池满了如何处理额外的请求 同一个对象的连个同步方法能否被两个线程同时调用 1、零基础(没有任何编程经验) 2、有前端基础(HTML+CSS+JAVASCRIPT),没有JAVA基础 3、有前端基础(HTML+CSS+JAVASCRIPT),有JAVA基础(没有相关工作经验) 4、有前端基础(HTML+CSS+JAVASCRIPT),有JAVA工作经验 5、没有前端基础,有JAVA基础(没有相关工作经验) 6、没有前端基础,有JAVA工作经验 多年工作经验的梳理和总结,带着大家全面、 科学地建立自己的技术体系和技术认知! 部分答案 Java基础 HashMap和Hashtable的区别 HashMap是非线程安全的,Hashtable是线程安全的。 HashMap的键值都可以为null,Hashtable的键值都不可以为null值。 HashMap继承自AbstractMap类,Hashtable继承自Dictionary类。 ps : Properties类继承自Hashtable类。 异常分类和处理机制 分类: 运行时异常(Runtime Exception) 受检查异常(Checked Exception) 运行时异常: 必须继承RuntimeException类, 定义方法时不必声明会抛出运行时异常。 调用方法时不必捕获运行时异常。 受检查异常: 不继承自RumtimeException类 定义方法时需要抛出可能会抛出的Checked Exception 调用方法时需要捕获Checked Exception或者继续向上抛出。 逻辑上: 运行时异常:一般不需要或者不知道如何处理此类异常; 受检验异常:一般需要知道如何处理可能发生的异常情况。 StringBuilder内部实现机制 StringBuilder内部有一个字符数组,代码如下 char[] value; //字符数组int count; //字符串长度 每一次append操作都是将新的字符串加入到可变长的字符数组中,长度计算方式与ArrayList类似。调用toString()方法时,new一个String对象即可。 public String toString() { return new String(value, 0, count);// Create a copy, don't share the array} ps: StringBuffer是线程安全的,StringBuilder是非线程安全的。 匿名内部类的使用 匿名内部类是没有名字的类,只在某一处被使用,不会被多处调用,一般是某个父类或接口的特定实现。 强引用、软引用、弱引用和虚引用 强引用: 一般的引用都是强引用,即使OutOfMemory也不会回收这部分被把持的引用内存。 软引用(SoftReference): 如果内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被使用。++软引用可以用来实现内存敏感的高速缓存。++ 弱引用(WeakReference):弱引用的对象拥有更短暂的生命周期。当垃圾回收期发现只有若引用的对象,不论内存空间足够与否,都会回收它。 虚引用():虚引用不会决定对象的生命周期,如果一个对象仅持有一个虚引用,那么它随时可能被回收。++虚引用主要用来跟踪对象被垃圾回收器回收的活动。++ 开源框架 SpringMVC和Struts2的区别 SpringMVC的方法级别的拦截,Struts2是类级别的拦截; SpringMVC是基于Servlet实现Controller,Struts2是基于Filter实现; SpringMVC性能和安全性高于Struts2; SpringMVC更加组件化和流程化,易于扩展,比如返回JSON通过设置@ResponseBody即可; Struts2更加无耦合,比较纯粹,但是需要更多的自行开发的代码以支持更多功能。 Spring事务的管理 分类:声明式事务、编程式事务 声明式事务:通过统一配置实现事务的统一管理,一般配置TransactionMananger以及相关属性即可。 编程式事务(注解方式):在需要事务的方法上配置相关的注解(包括事务类型、回滚策略等) 事务类型: PROPAGATION_REQUIRED PROPAGATION_SUPPORTS PROPAGATION_MANDATORY PROPAGATION_REQUIRES_NEW PROPAGATION_NOT_SUPPORTED PROPAGATION_NEVER PROPAGATION_NESTED 事务隔离级别 ISOLATION_DEFAULT ISOLATION_READ_UNCOMMITTED ISOLATION_READ_COMMITTED ISOLATION_REPEATABLE_READ ISOLATION_SERIALIZABLE Hibernate与MyBatis的比较 Hibernate完全实现对象关系映射(ORM),MyBatis实现的是SQL Mapping MyBatis可以进行更为细致的SQL优化,可以减少查询字段。比Hibernate容易掌握,Hibernate门槛较高。 Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。 Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。 Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。 Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。 JVM虚拟机 GC算法有哪些 引用计数 复制 标记-清除 标记-压缩 分代(新生代、老年代、永久代) 垃圾回收器有哪些 串行回收器:新生代串行回收器、老年代串行回收器 并行回收器:新生代ParNew回收器、新生代ParallelGC回收器、老年代ParallelGC回收器 CMS回收器:(Concurrent Mark Sweep、并发标记清除) G1回收器(1.7以后代替CMS回收器) 如何调优JVM 标准参数: -client -server模式 -Xmn、-Xms、-Xmx 监控:jps、jstat、jinfo、jmap、jhat、jstack… Java 中堆和栈有什么区别? JVM 中堆和栈属于不同的内存区域,使用目的也不同。 栈常用于保存方法帧和局部变量,而对象总是在堆上分配。 栈通常都比堆小,也不会在多个线程之间共享,而堆被整个 JVM 的所有线程共享。 缓存和NoSQL 缓存命中率的计算 命中缓存次数/(命中缓存次数+未命中缓存次数) = 命中率 Memcache与Redis的区别 memcache把数据存在内存之中,断电后会挂掉;Redis部分数据持久化在硬盘上,断电不会丢失。 memcache存的是key-value对,redis支持更多的数据结构和数据类型 memcache可以使用一致性hash做分布式,redis可以做主从同步 redis单线程,只使用1个cpu 如何实现Redis的分片 使用一致性哈希对数据进行映射 实现方式:客户端分片(每个客户端对应一个分片)、代理协助分片、查询路由分片; 使用redis集群,如codis(豌豆荚,依赖zookeeper); 分布式 zookeeper的用途 zookeeper作为分布式应用协调系统,已经用到很多分布式项目中。 可以用来完成统一命名服务、状态同步服务、集群管理、分布式应用配置项等管理工作。 zookeeper的主要操作分一下几种: 创建节点 读取节点数据 更新节点数据 删除节点 监控节点变化 应用场景: 统一命名服务,使用create自动创建节点编号; 配置管理,多个节点的共享配置,当配置发生变化时,可利用zookeeper让使用这些配置的节点获得通知,进行重新加载等操作。如dubbo服务。 集群管理:集群选举主节点,资源定位。 共享锁 负载均衡 应用项目: dubbo服务集群、redis集群、Hadoop集群等 dubbo的用途以及优点 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 数据结构和算法 将单项链表逆序排列 将单向链表逆序输出,方法有三种: 遍历链表,将每个节点的内容存入一个数组中,然后逆序输出数组(最简单的做法) 使用栈来逆序输出 直接将链表(指针)逆序然后输出 如果对自己未来有想法,想提升自己,你现在在JAVA这条路上挣扎,也想在IT行业拿高薪,可以参加我们免费的公开课试听学习 干货满满的,选择最适合自己的课程学习,技术大牛亲授,课程内容有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点。如果你想拿高薪的,想学习的,想就业前景好的,想跟别人竞争能取得优势的,想进阿里面试但担心面试不过的,你都可以来。 群号:468947140 进群修改群备注:开发年限-地区-经验 点击链接加入群聊【Java-BATJ企业级资深架构】:https://jq.qq.com/?_wv=1027&k=52j2FVO

优秀的个人博客,低调大师

运维工程师从入门到放弃必备书籍

By:Linxu http://www.walker0909.com/ 《鸟哥的私房菜》(基础版/服务器版) 《构建之法——现代软件工程》 《RabbitMQ实战高效部署分布式消息队列》 《程序员必读软件架构》 《OpenStack开源云 王者归来》 《ELKstack权威指南》 《Nginx高性能Web服务器详解》 《Docker容器与容器云》 《Zabbix企业级分布式监控系统》 《奔跑吧Ansbile》 《Docker技术入门与实战》 《Python核心编程》 《Python自动化运维技术与最佳实践》 《Python网络编程攻略》 《实战JAVA虚拟机——JVM故障诊断与性能优化》 《WireShark网络分析就这么简单》 《Redis入门指南》 《Redis设计与实现》 《Flask Web开发——基于Python的Web应用开发实战》 《持续交付——发布可靠软件的系统方法》 《大型分布式网站架构设计与实践》 《大型网站技术架构:核心原理与案例分析》 《构建高性能Web站点》 《高性能Linux服务器构建实战——运维监控、性能调优与集群应用》 《性能之巅——洞悉系统、企业与云计算》 《Puppet实战》 《Mongo大数据处理权威指南》 《实战Linux Shell编程与服务器管理》 《PHP从入门到放弃》

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册