-
- 说一下 jvm 运行时数据区?
- JVM运行时数据区分为线程私有和共享区域:程序计数器记录字节码地址,是唯一不发生OOM的区域;虚拟机栈存储方法执行信息,可能抛出StackOverflowError或OutOfMemoryError;本地方法栈服务native方法;Java堆为对象实例分配空间,是GC主要区域,内存不足抛出OOM;方法区存储类信息、常量等,JDK8后元空间替代永久代;运行时常量池属方法区,支持动态添加常量;直接内存通过NIO使用,不受堆限制但受本地内存限制。
- Java面试题 . Java 898 2025-09-22 08:00:04
-
- 动态代理是什么?有哪些应用?
- 动态代理是在运行时动态生成代理对象,通过拦截方法调用实现功能增强,无需修改原代码。它基于JDK(要求接口)或CGLIB(通过继承,可代理类)实现,核心是InvocationHandler或MethodInterceptor。相比静态代理需手动编写大量重复代理类,动态代理更灵活高效。典型应用包括SpringAOP实现日志、事务、权限控制;RPC框架中生成本地代理实现远程调用透明化;ORM中实现延迟加载;以及单元测试中Mock外部依赖。它使代码更纯净、可维护,是实现横切关注点的核心技术。
- Java面试题 . Java 853 2025-09-21 08:02:03
-
- 数据库的三范式是什么?
- 三范式是数据库设计原则,1NF要求字段原子性,2NF消除非主属性对主键的部分依赖,3NF消除非主属性间的传递依赖,通过逐步规范数据结构减少冗余与异常,提升数据一致性与维护性,但需权衡查询性能,避免过度范式化。
- Java面试题 . Java 641 2025-09-21 08:00:01
-
- mybatis 中 #{}和 ${}的区别是什么?
- {}采用预编译处理,防止SQL注入,自动转义并加引号;2.${}为字符串直接替换,存在安全风险,需手动校验;3.优先使用#{},仅在动态表名等场景慎用${}。
- Java面试题 . Java 613 2025-09-20 08:23:01
-
- mysql为什么要分区?
- 答案:MySQL分区通过将大表拆分为更小的物理部分来提升查询性能、简化维护和管理数据生命周期,逻辑上仍为一个表。它支持RANGE、LIST、HASH和KEY等分区类型,适用于数据量大、需定期清理或归档的场景。合理选择分区键和数量可优化性能,但需避免跨分区事务以保障一致性,并注意硬件资源与管理成本的平衡。
- Java面试题 . Java 717 2025-09-20 08:15:02
-
- 集群中有3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?
- 是的,在3台服务器的ZooKeeper集群中,即使一个节点宕机,集群仍可正常工作。因为ZooKeeper采用法定人数机制,只要超过半数节点(至少2台)在线,即可维持服务可用性。此时,若Leader节点宕机,剩余Follower节点会自动发起选举产生新Leader,并通过数据同步保持一致性。客户端会自动重连至可用节点,确保业务连续性。但若再有节点故障,导致存活节点不足半数,则集群将不可用,因此需通过监控、备份、多机房部署等手段保障高可用。
- Java面试题 . Java 328 2025-09-19 08:12:01
-
- rabbitmq 对集群节点停止顺序有要求吗?
- 停止RabbitMQ集群节点需考虑镜像队列、仲裁队列及应用依赖,建议先drain节点、移除集群、再停服务,避免数据丢失。
- Java面试题 . Java 660 2025-09-19 08:12:01
-
- 如何避免 sql 注入?
- 避免SQL注入的关键是不信任用户输入并采取多重防护措施。首先使用参数化查询,将SQL语句结构与数据分离,防止恶意代码执行;结合输入验证和过滤,确保输入符合预期格式;遵循最小权限原则,限制数据库用户权限以降低攻击影响;生产环境中应隐藏详细错误信息,防止敏感信息泄露;定期进行代码审查和安全测试,及时发现漏洞;可借助ORM或存储过程减少手动拼接SQL的风险。同时可通过安全扫描工具、手动测试等方式检测漏洞,了解基于错误、布尔、时间等不同注入类型有助于针对性防御。
- Java面试题 . Java 655 2025-09-18 08:42:03
-
- 集群中为什么要有主节点?
- 主节点是集群的核心,负责协调管理、元数据存储、任务调度与故障恢复,确保集群高效稳定运行。
- Java面试题 . Java 343 2025-09-18 08:22:01
-
- 线程池中 submit()和 execute()方法有什么区别?
- submit()返回Future可获取结果和状态,execute()无返回值不关心结果。submit支持Callable并能处理异常,execute仅支持Runnable且异常默认被忽略。
- Java面试题 . Java 553 2025-09-17 08:14:01
-
- redis 常见的性能问题有哪些?该如何解决?
- Redis性能问题主要集中在CPU占用高、内存溢出、命令延迟和持久化开销。根本原因包括大Key、热Key、高复杂度命令滥用及配置不当。解决需多管齐下:优化数据结构,避免使用KEYS等阻塞命令,改用SCAN类命令;合理设置maxmemory及淘汰策略如allkeys-lru;开启主动碎片整理activedefrag;采用Pipelining和连接池提升客户端效率;排查网络延迟与系统资源争用;通过SLOWLOG定位慢查询;避免在大内存实例频繁fork导致阻塞;必要时引入RedisCluster实现分
- Java面试题 . Java 799 2025-09-17 08:02:01
-
-
- 怎么判断对象是否可以被回收?
- 对象能否被回收取决于其是否被程序需要,若无引用或仅被可回收对象引用,则可被回收。主流方法有引用计数法和可达性分析法。引用计数法通过计数器记录引用数量,优点是简单高效,但无法解决循环引用问题。可达性分析法从GCRoots出发,沿引用链搜索,不可达对象视为可回收,能解决循环引用,但实现复杂、效率较低。现代JVM如HotSpot采用可达性分析法。GCRoots包括虚拟机栈、方法区静态属性、常量、本地方法栈中的引用对象,是判断可达性的起点。理解回收机制有助于优化性能、避免内存泄漏。
- Java面试题 . Java 253 2025-09-16 08:34:01
-
- spring cloud 的核心组件有哪些?
- SpringCloud核心组件构成微服务生态骨架,包括服务发现(如Nacos)、配置中心、客户端负载均衡(SpringCloudLoadBalancer)、熔断器(Resilience4j)、API网关(SpringCloudGateway)等,各组件协同解决分布式系统中的服务治理难题。
- Java面试题 . Java 330 2025-09-15 08:14:01
-
- synchronized 和 volatile 的区别是什么?
- synchronized保证原子性和可见性,通过锁对象的monitor实现,同一时刻仅一个线程可执行同步代码块;volatile仅保证可见性,禁止指令重排序,适用于状态标志等场景。两者性能与适用场景不同,需根据需求选择。此外,Java还提供Lock、原子类、并发集合等更灵活的同步机制。
- Java面试题 . Java 759 2025-09-15 08:04:01
PHP讨论组
组员:3305人话题:1500
PHP一种被广泛应用的开放源代码的多用途脚本语言,和其他技术相比,php本身开源免费; 可以将程序嵌入于HTML中去执行, 执行效率比完全生成htmL标记的CGI要高许多,它运行在服务器端,消耗的系统资源相当少,具有跨平台强、效率高的特性,而且php支持几乎所有流行的数据库以及操作系统,最重要的是

