朋友四面阿里Java岗的详细流程和面试问题。

最近一个朋友跟我说,现在面试太难了,再也不是以前那种随便背几个面试题然后就能拿到offer的时候了。最近准备换工作面试了阿里,和我交流了下他遇到的一些面试题,然后我整理了一下,就分享给有需要的朋友们顺便也查漏补缺一下。
在这里插入图片描述

一面

1.开始是自我介绍;

2.HashMap的实现原理,什么是hash碰撞,怎样解决hash碰撞?

3.ConcurrentHashMap的原理,与HashTable的区别?

4.HashSet和TreeSet的区别以及底层实现原理

5.HashMap中存key-value,value有重复但是都是Comparable类型可比较;怎样根据value排序此集合,介绍实现方法

6.ReentrantLock和synchronized关键字有什么区别?

7.synchronized 修饰static方法,具体锁的是什么?

8.工作当中cpu和内存异常排查方法;详细说明分析过程及定位解决方式

9.接着是讲项目:

项目里的问题比较简单; 然后就是各种基础,jvm内存模型,nio,bio,aio,高并发,sychronized和volltail,HashMap,数据结构和扩容。

还有一些场景题目,大并发/海量数量的情况下,怎么设计系统。从里面拿出两点来问,一个是系统解耦,一个是分库分表。

最后一个是编码题,HashMap里key是自定义对象的情况,排序 jvm问的比较多,线上发版如何做到分批发的,redis命令,数据结构,数据库内部锁机制,线上问题解决,sql优化等等;
在这里插入图片描述

二面

1.ClassLoader的原理,举出应用场景及工作实例,介绍类加载过程及工作中的应用

2.HashMap的实现原理,什么是hash碰撞,怎样解决hash碰撞?

3.ConcurrentHashMap的原理,与HashTable的区别?

4.HashSet和TreeSet的区别以及底层实现原理

5.HashMap中存key-value,value有重复但是都是Comparable类型可比较;怎样根据value排序此集合,介绍实现方法

6.ReentrantLock和synchronized关键字有什么区别?

7.synchronized 修饰static方法,具体锁的是什么?

8.工作当中cpu和内存异常排查方法;详细说明分析过程及定位解决方式

9。一个jvm的原理及优化;

10.sql的优化;

11.现在使用的框架原理,比如使用了dubbo,会问dubbo的原理,还有h5怎么调用dubbo等;

12.接着是讲项目,项目里的问题比较简单;

13.然后就是各种基础,jvm内存模型,nio,bio,aio,高并发sychronized和volltail,HashMap,数据结构和扩容;

14.还有一些场景题目,大并发/海量数量的情况下,怎么设计系统。从里面拿出两点来问,一个是系统解耦,一个是分库分表;

15.最后一个是编码题,HashMap里key是自定义对象的情况,排序
在这里插入图片描述
下面这个链接,暗号: csdn 。加入即可获得。
点这个,这个。

三面

1、executor service实现的方法,可以设置的参数;

2、出了个算法提,找出链表中倒数第n个节点;

3、还问了thread和runable的区别;

4、聚簇索引是什么;

5、redis问了一个实际问题的解决办法,如果redis一个value特别大,有什么解决方案;

6、redis内存淘汰机制;

7、mysql的默认隔离级别;

8、 堆排序

9.、paxos协议

10、跨机房部署,遇到的问题及解决方案,全年的9999率

11、MMM的DB架构,主从未完全同步,master挂了,未同步的内容会造成什么影响,怎么恢复

12、ng和tomcat什么区别?能否将两者角色互换。即:tomcat做反向代理,ng做服务容器。说明原因。

13、DNS协议

14、volatile实现原理

15、NAT:公网ip和局域网ip转换

16.类加载委托机制,锁的应用,项目架构
在这里插入图片描述

四面:

0、 jit,nio,排序算法,hashmap,更多的是项目细节~

1、谈谈项目里主要负责了什么,负责的项目是怎样的架构,自己负责了什么等等; 2、JVM类加载机制;

3、JVM内存模型,栈空间都放什么,什么情况下栈内存会溢出等;

4、JVM调优;

5、JVM垃圾收集机制;

6、比较关心金融方面的知识是否了解,是否有过金融项目开发的经验;

7、jvm栅栏问题,threadlocal的使用;

8、JVM

9、多线程

10、List求交集

11、解决项目运行时,CPU占用过高的问题

12、线程同步几种机制

13、linux检索log,匹配某一请求最多的top10

最后:

提供【免费】的Java架构学习资料,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

下面这个链接,暗号: csdn 。加入即可获得。
点这个,这个。

另外还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书。
在这里插入图片描述

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
实现正四面体的透视投影动态隐线算法,需要以下步骤: 1. 定义正四面体的顶点坐标和连接关系。 2. 根据相机位置和视角计算出每个顶点在屏幕上的坐标。 3. 对于每个面,判断其是否朝向相机,如果是则不需要绘制,否则需要进行透视投影。 4. 对于每个面,判断其是否需要显示边界,如果需要则进行动态隐线算法。 下面是一个简单的 Java 代码实现: ```java import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; public class Tetrahedron extends JPanel implements ActionListener { private static final int WIDTH = 800; private static final int HEIGHT = 600; private static final int SIZE = 100; private static final int[] X = {0, 0, SIZE/2, -SIZE/2}; private static final int[] Y = {0, SIZE, -SIZE/2, -SIZE/2}; private static final int[][] Z = {{0, SIZE/2, SIZE/2, SIZE/2}, {0, 0, SIZE/2, -SIZE/2}, {0, 0, -SIZE/2, SIZE/2}, {0, -SIZE, 0, 0}}; private static final int[][] CONNECT = {{0, 2}, {0, 3}, {0, 1}, {1, 2}, {1, 3}, {2, 3}}; private double angle = 0; private Timer timer = new Timer(30, this); public Tetrahedron() { setPreferredSize(new Dimension(WIDTH, HEIGHT)); timer.start(); } @Override public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D)g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.clearRect(0, 0, WIDTH, HEIGHT); // calculate vertex coordinates double sin = Math.sin(angle); double cos = Math.cos(angle); int[][] coords = new int[4][2]; for (int i = 0; i < 4; i++) { int x = X[i]; int y = (int)(Y[i]*cos - Z[i][0]*sin); int z = (int)(Y[i]*sin + Z[i][0]*cos); coords[i][0] = x; coords[i][1] = (int)(y*cos - z*sin); } // draw edges g2d.setColor(Color.BLACK); for (int[] conn : CONNECT) { int x1 = coords[conn[0]][0] + WIDTH/2; int y1 = coords[conn[0]][1] + HEIGHT/2; int x2 = coords[conn[1]][0] + WIDTH/2; int y2 = coords[conn[1]][1] + HEIGHT/2; if (isVisible(x1, y1, x2, y2)) { g2d.drawLine(x1, y1, x2, y2); } } angle += 0.05; } private boolean isVisible(int x1, int y1, int x2, int y2) { boolean visible = true; for (int[] conn : CONNECT) { int x3 = X[conn[0]]; int y3 = Y[conn[0]]; int z3 = Z[conn[0]][0]; int x4 = X[conn[1]]; int y4 = Y[conn[1]]; int z4 = Z[conn[1]][0]; if (isIntersecting(x1, y1, x2, y2, x3, y3, z3, x4, y4, z4)) { visible = false; break; } } return visible; } private boolean isIntersecting(int x1, int y1, int x2, int y2, int x3, int y3, int z3, int x4, int y4, int z4) { double t = ((x3-x1)*(y4-y3) - (y3-y1)*(x4-x3))/((x2-x1)*(y4-y3) - (y2-y1)*(x4-x3)); double s = ((x2-x1)*(y3-y1) - (y2-y1)*(x3-x1))/((x2-x1)*(y4-y3) - (y2-y1)*(x4-x3)); if (t >= 0 && t <= 1 && s >= 0 && s <= 1) { int z1 = (int)((1-t)*z3 + t*z4); int z2 = (int)((1-s)*z3 + s*z4); if (z1 < z2) { return true; } } return false; } public static void main(String[] args) { JFrame frame = new JFrame("Tetrahedron"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new Tetrahedron()); frame.pack(); frame.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { repaint(); } } ``` 在这个代码中,我们首先定义了正四面体的顶点坐标和连接关系,然后在 `paintComponent` 方法中计算出每个顶点在屏幕上的坐标。接着,我们绘制正四面体的边界,对于每条边,我们判断其是否需要进行透视投影和动态隐线算法。最后,在 `actionPerformed` 方法中更新角度并重绘图形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值