针对importNew 网站中的《面试总结》一文中涉及到的问题,自己的一点总结(1)

news/2024/5/20 14:22:02/文章来源:https://blog.csdn.net/CCUTwangning/article/details/53431426

Java相关

Java GC机制(重要程度:★★★★★)

主要从三个方面回答:GC是针对什么对象进行回收(可达性分析法),什么时候开始GC(当新生代满了会进行Minor GC,升到老年代的对象大于老年代剩余空间时会进行Major GC),GC做什么(新生代采用复制算法,老年代采用标记-清除或标记-整理算法),感觉回答这些就差不多了,也可以补充一下可以调优的参数(-XX:newRatio,-Xms,-Xmx等等)

了解GC机制的第一步就是理解什么样的对象会被回收。当一个对象通过一系列根对象(比如:静态属性引用的常量)都不可达时就会被回收。简而言之,当一个对象的所有引用都为null。循环依赖不算做引用,如果对象A有一个指向对象B的引用,对象B也有一个指向对象A的引用,除此之外,它们没有其他引用,那么对象A和对象B都、需要被回收(如下图,ObjA和ObjB需要被回收)。原文出处:Java中的垃圾回收机制
GC回收对象

GC回收对象

简单来说我总结为两点1、引用对象不可达,2、循环引用的对象

如何线程安全的使用HashMap(重要程度:★★★★★)

作为Java程序员还是经常和HashMap打交道的,所以HashMap的一些原理还是搞搞清除比较好。这个问题感觉主要就是问HashMap,HashTable,ConcurrentHashMap,sychronizedMap的原理和区别。

推荐文章:如何线程安全的使用HashMap

Java创建对象有哪几种(重要程度:★★★★☆)

1.使用new关键字

这是最常见的创建对象的方法,并且也非常简单。通过使用这种方法我们可以调用任何我们需要调用的构造函数。


Employee emp1 = new Employee();

2.使用class类的newInstance方法

我们也可以使用class类的newInstance()方法来创建对象。此newInstance()方法调用无参构造函数以创建对象。

我们可以通过newInstance() 用以下方式创建对象:

Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();

或者

Employee emp2 = Employee.class.newInstance();

3.使用构造函数类的 newInstance方法

与使用class类的newInstance()方法相似,java.lang.reflect.Constructor类中有一个可以用来创建对象的newInstance()函数方法。通过使用这个newInstance()方法我们也可以调用参数化构造函数和私有构造函数。


Constructor<Employee> constructor = Employee.class.getConstructor();
Employee emp3 = constructor.newInstance();

这些 newInstance() 方法被认为是创建对象的反射手段。实际上,内部类的newInstance()方法使用构造函数类的 newInstance() 方法。这就是为什么后者是首选并且使用不同的框架如Spring, Hibernate, Struts等。

4.使用clone方法

实际上无论何时我们调用clone() 方法,JAVA虚拟机都为我们创建了一个新的对象并且复制了之前对象的内容到这个新的对象中。使用 clone()方法创建对象不会调用任何构造函数。

为了在对象中使用clone()方法,我们需要在其中实现可克隆类型并定义clone()方法。

Employee emp4 = (Employee) emp3.clone();

5.使用反序列化

无论何时我们对一个对象进行序列化和反序列化,JAVA虚拟机都会为我们创建一个单独的对象。在反序列化中,JAVA虚拟机不会使用任何构造函数来创建对象。

对一个对象进行序列化需要我们在类中实现可序列化的接口。

ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Employee emp5 = (Employee) in.readObject();

正如我们在以上的字节代码片段中所看到的,除第一种被转换为一个新的函数和一个 invokespecial 指令以外,其它4种方法都被调用并转换为invokevirtual。

示例

让我们来看看准备创建对象的 Employee 类:

class Employee implements Cloneable, Serializable {private static final long serialVersionUID = 1L;private String name;public Employee() {System.out.println("Employee Constructor Called...");}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Employee other = (Employee) obj;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}@Overridepublic String toString() {return "Employee [name=" + name + "]";}@Overridepublic Object clone() {Object obj = null;try {obj = super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return obj;}
}


在下面的Java程序中我们用5种方式来创建 Employee对象。

public class ObjectCreation {public static void main(String... args) throws Exception {// By using new keywordEmployee emp1 = new Employee();emp1.setName("Naresh");System.out.println(emp1 + ", hashcode : " + emp1.hashCode());// By using Class class's newInstance() methodEmployee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();// Or we can simply do this// Employee emp2 = Employee.class.newInstance();emp2.setName("Rishi");System.out.println(emp2 + ", hashcode : " + emp2.hashCode());// By using Constructor class's newInstance() methodConstructor<Employee> constructor = Employee.class.getConstructor();Employee emp3 = constructor.newInstance();emp3.setName("Yogesh");System.out.println(emp3 + ", hashcode : " + emp3.hashCode());// By using clone() methodEmployee emp4 = (Employee) emp3.clone();emp4.setName("Atul");System.out.println(emp4 + ", hashcode : " + emp4.hashCode());// By using Deserialization// SerializationObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.obj"));out.writeObject(emp4);out.close();//DeserializationObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));Employee emp5 = (Employee) in.readObject();in.close();emp5.setName("Akash");System.out.println(emp5 + ", hashcode : " + emp5.hashCode());}
}


此程序输出结果如下:

Employee Constructor Called...
Employee [name=Naresh], hashcode : -1968815046
Employee Constructor Called...
Employee [name=Rishi], hashcode : 78970652
Employee Constructor Called...
Employee [name=Yogesh], hashcode : -1641292792
Employee [name=Atul], hashcode : 2051657
Employee [name=Akash], hashcode : 63313419


原文链接:Java中创建对象的5种不同方法

注解(重要程度:★★★☆☆)

如果简历中有提到过曾自定义过注解,还是了解清楚比较好。主要是了解在自定义注解时需要使用的两个主要的元注解@Retention和@Target。@Retention用来声明注解的保留策略,有CLASS,RUNTIME,SOURCE三种,分别表示注解保存在类文件,JVM运行时刻和源代码中。@Target用来声明注解可以被添加到哪些类型的元素上,如类型,方法和域等。
推荐文章:Java注解教程及自定义注解

异常(重要程度:★★★☆☆)

一道笔试题,代码如下,问返回值是什么。

int ret = 0;
try{
throw new Exception();
}
catch(Exception e){
ret = 1;
return ret;
}
finally{
ret = 2;
}


主要的考点就是catch中的return在finally之后执行 但是会将return的值放到一个地方存起来,所以finally中的ret=2会执行,但返回值是1。

推荐文章:

深入理解Java异常处理机制

Java异常处理和设计

Java异常的面试问题及答案-Part 1

Java异常的面试问题及答案-Part 2

Java异常的面试问题及答案-Part 3

悲观锁和乐观锁区别,乐观锁适用于什么情况(重要程度:★★★★☆)

悲观锁,就是总觉得有刁民想害朕,每次访问数据的时候都觉得会有别人修改它,所以每次拿数据时都会上锁,确保在自己使用的过程中不会被他人访问。乐观锁就是很单纯,心态好,所以每次拿数据的时候都不会上锁,只是在更新数据的时候去判断该数据是否被别人修改过。
大多数的关系数据库写入操作都是基于悲观锁,缺点在于如果持有锁的客户端运行的很慢,那么等待解锁的客户端被阻塞的时间就越长。Redis的事务是基于乐观锁的机制,不会在执行WATCH命令时对数据进行加锁,只是会在数据已经被其他客户端抢先修改了的情况下,通知执行WATCH命令的客户端。乐观锁适用于读多写少的情况,因为在写操作比较频繁的时候,会不断地retry,从而降低性能。
参考资料:
关于悲观锁和乐观锁的区别
乐观锁和悲观锁


单例模式找错误(重要程度:★★★★☆)

错误是没有将构造函数私有化,单例还是比较简单的,把它的饿汉式和懒汉式的两种实现方式看明白了就可以了。


推荐文章:如何正确的写出单例模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_827061.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stack overflow--技术问答网站

转自&#xff1a;http://baike.baidu.com/link?urleMR6Pwdk9IkauI5B3nZb2Yo3VUAcK6vQfrMpcSMPWqgH0ngqFkup3Gdr3t_s_yZe_UFwkR8c1pboaxhEuY-iwF_nGiUYHajEPMO6Y1kqWvT8aPz7a_T6t3a1vxyTccgKl_UIx1cU-6IP7qjre2ijtq Stack Overflow是一个与程序相关的IT技术问答网站。用户可以在…

使用Python爬取大嘴巴巴网站

Anonymous驻中国办事处主任&#xff0c;私下搞了一个叫做“大嘴巴巴”的色*情网站。http://dazui88.com/ 这个网站烂的一逼&#xff0c;大家没事可以搞一搞它。今天我们试着爬取一下网站内容&#xff0c;回头交给网监姐。 1.首先我们观察大嘴巴巴最大的色请板块“轻松一刻”的U…

用户用浏览器访问一个网站的时候背后的过程与步骤是怎样的?

1. 用户访问网站的流程 用户访问网站的流程 用户在浏览器中输入 www.taobao.com 到显示页面的过程 1.1 访问流程 利用DNS协议进行域名解析 --> 建立tcp协议三次握手过程 --> 客户端发出访问网站相应页面请求&#xff08;发出http协议请求报文&#xff09; --…

用Halo打造自己的博客网站

用Halo打造自己的博客网站 我之前分别用过Django和Hexo搭建网站&#xff0c;Django是python的web框架&#xff0c;Hexo是Node.js的&#xff0c;纯前端的玩意儿&#xff0c;配置起来相当折腾&#xff0c;后来我又听说了Halo不错&#xff0c;就尝试按官方文档部署了一套&#xf…

论文 | 用迁移学习解释:电商网站的用户评论应如何优化排序?

小蚂蚁说&#xff1a; 2018年6月初&#xff0c;自然语言处理三大顶会之一NAACL (Annual Conference of the North American Chapter of the Association for Computational Linguistics)在美国新奥尔良举行&#xff0c;吸引了世界各地的自然语言处理等领域的学者参加。 据统计&…

原生javascript-放大镜效果(模仿购物网站)

思路: 效果: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title>

SEO

开放分类&#xff1a; 搜索引擎优化、seo、网站优化、搜索优化、SEO技巧 目录 • SEO的概要 • SEO操作的分类 • SEO 十心 • 网站SEO中遇到的问题 • SEO展望 • 搜索引擎优化(SEO)专业术语 • SEO优势 SEO的概要 [编辑本段]SEO是Search Engine Optimization的缩写&#xff0…

WEB网站常见的攻击方式总结与原理分析

一个网站建立以后,如果不注意安全方面的问题,很容易被人攻击,下面就讨论一下几种常见的漏洞的简介与原理分析 一.跨站脚本攻击(xss) 恶意攻击者通过往Web页面里插入恶意html代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的html代码会被执行&#xff0c;从而达…

Web 性能优化: 图片优化让网站大小减少 62%

摘要&#xff1a; 压缩各种格式的图片。 原文&#xff1a;Web 性能优化&#xff1a; 图片优化让网站大小减少 62% 作者&#xff1a;前端小智 Fundebug经授权转载&#xff0c;版权归原作者所有。 这是 Web 性能优化的第二篇&#xff0c;上一篇在下面看点击查看&#xff1a; Web …

unity自动生成敌人_博主营地 | 如何生成WebGL发布到网站上分享你的游戏

在Unity社区分享经验&#xff0c;你也有机会获得官方推荐&#xff01;发稿入口&#xff1a;unity.cn/articles2020年度Unity价值博主、Unity价值专家招募中 更多Unity博主专属权益见文末网页快速试玩永远是让大家最容易接受的方法&#xff0c;以下是本期内容的视频完整版&#…

php matomo,Matomo4.2.1 发布,网站访问统计系统

Matomo 4.2.1 发布了。 Matomo 是一套基于 PHP5 MySQL 技术构建的开源网站访问统计系统&#xff0c;能够提供详细的统计信息&#xff0c;比如网页浏览人数、访问最多的页面、搜索引擎关键词等等流量分析功能。新的内容为了提高安全性&#xff0c;Matomo 用户界面创建的所有 coo…

php配置出问题,php.ini配置中有3处设置可能导致网站安全出问题

php.ini配置中有3处设置可能导致网站安全出问题发布时间&#xff1a;2020-03-24 10:14:37来源&#xff1a;亿速云阅读&#xff1a;828作者&#xff1a;小新php.ini配置中有3处设置可能导致网站安全出问题。那么是哪三处呢&#xff1f;跟着小编一起往下看吧。一定会对你们有所帮…

html 整站相对地址,网站代码使用“绝对地址“对SEO优化的重要性

摘要为什么网站代码使用“绝对地址”比“相对地址”更有利于SEO优化&#xff1f;1&#xff1a;防止有人恶意镜像网站&#xff1b;2&#xff1a;防止搜索引擎只收录二三级域名而不收录一级域名&#xff1b;3&#xff1a;省去了301重定向&#xff1b;3&#xff1a;提高网站权重&a…

spring boot security ajax_SpringBoot入门建站全系列(十一)Spring-security进行权限认证...

SpringBoot入门建站全系列&#xff08;十一&#xff09;Spring-security进行权限认证Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架&#xff0c;提供了一套 Web 应用安全性的完整解决方案。一般来说&#xff0c;Web 应用的安全性包括用户…

centos nginx重启_企业级电商网站使用Nginx+Lua(OpenResty)实现高性能Web应用

简介OpenResty是一款基于Nginx的高性能负载均衡服务器容器&#xff0c;简单来说是NginxLua。结合了Lua语言来对Nginx进行扩展&#xff0c;使得在Nginx上具有web容器功能。使得可以使用lua脚本来进行web的开发。有了lua&#xff0c;我们可以借助于nginx的异步非阻塞的功能&#…

网站留言板防重复留言_摄影,你一定要知道的几个看图网站!

一开始入行学摄影&#xff0c;不管你是爱好还是职业&#xff0c; 相信都经常听到别人说&#xff1a;“多看片&#xff0c;多模仿”这句话吧&#xff01;确实&#xff0c;一开始没有自己的摄影想法时候&#xff0c;是需要多看看别人的片子&#xff0c;可以激发自己的灵感&#x…

centos 访问网页重启php_解决阿里云CentOS 7重启后网站无法访问的问题

摘要每次阿里云主机重启后&#xff0c;总是无法访问网站。查看进程也发现了 mysqld、php、nginx等都也启动了&#xff0c;ping 也没问题&#xff0c;但就是无法访问。经过一番排查&#xff0c;这是 CentOS 7 最新的 firewalld 防火墙引起的问题。参考解决方案用iptables-servic…

虚拟服务器seo,虚拟主机是什么?

基本定义虚拟主机&#xff0c;又称虚拟服务器、主机空间或是网页空间&#xff0c;是一种让单一服务器可以运行多个网站或服务的技术。虚拟并非指不存在&#xff0c;而是指空间是由实体的服务器延伸而来&#xff0c;其硬件系统可以是基于服务器群&#xff0c;或者单个服务器。其…

[转]大流量、高并发网站验证码解决方案

原文地址: http://www.oksvn.com/Article/Detail-71.shtml摘录: 大型站点都是把验证码服务器和应用服务器分开的。具体的做法有两种&#xff1a;1.获取验证码的时候验证码服务器往客户端写验证cookies&#xff0c;提交的时候服务端获取这个cookie和提交上来的验证码&#xff0c…

《SEO实战密码》终于上市了

经过几番折腾&#xff0c;《SEO实战密码》终于陆续在主要网站和书店上架了&#xff0c;读者目前可以在中国互动出版网、当当&#xff08;普通版&#xff09;、卓越亚马逊、淘宝购买。另外&#xff0c;前几天回国时到出版社签名了200本书&#xff0c;签名版已全部交当当出售&…