四面阿里Java开发岗,java语言简介百度百科

HUAWEI-Java一面-1H

闲聊偏多,问的技术性问题比较基础

  • 简单说说面向对象的特征以及六大原则
  • 谈谈final、finally、finalize的区别
  • Java中==、equals与hashCode的区别和联系
  • 谈谈Java容器ArrayList、LinkedList、**·**HashMap、HashSet的理解,以及应用场景
  • 谈谈线程的基本状态,其中的wait() sleep() yield()方法的区别。
  • … …

HUAWEI-Java二面 -0.5H

问题深入一些,开始加难度

  • JVM性能调优的监控工具了解那些?
  • 简单谈谈JVM内存模型,以及volatile关键字
  • 垃圾收集器与内存分配策略
  • 垃圾收集算法
  • MySQL几种常用的存储引擎区别
  • 数据库的隔离级别
  • 算法:5亿整数的大文件,怎么排?
  • … …

HUAWEI-Java三面-0.5H

三面问题更为细致了,考察项目经验更多

  • Java内存模型
  • full gc怎么触发
  • gc算法
  • JVM回收策略
  • ClassLoader原理和应用
  • 高吞吐量的话用哪种gc算法
  • ConcurrentHashMap和HashMap
  • volatile的底层如何实现,怎么就能保住可见性了?
  • 有参与过开源的项目吗?
  • 线程池原理,拒绝策略,核心线程数
  • 1亿个手机号码,判断重复
  • 线程之间的交互方式有哪些?有没有线程交互的封装类

HUAWEI-Java4面-1H

重点考察全局观和应急处置

  • 项目介绍
  • 两次点击,怎么防止重复下订单
  • 数据库表设计,索引
  • Redis的缓存淘汰策略、更新策略
  • dubbo、netty、RPC介绍原理
  • 限流算法
  • zk挂了怎么办
  • 分布式锁的实现方式,zk实现和Redis实现的比较
  • 秒杀场景设计,应付突然的爆发流量
  • 分布式数据一致性
  • 一致性哈希
  • 消息队列原理介绍
  • 注解的原理
  • 数据库原理,数据库中间件,索引优化
  • ioc原理、aop原理和应用
  • 大数据相关,MapReduce
  • Docker的原理

HUAWEI-Java5面-HR面

HR面这边就略过了,一般问来问去就那几个,没啥好讨论的

image.png

看完上述的面试经历,不知你会作何感受?不过给我的最大冲击力就是**“面试造火箭,工作拧螺丝” “基础不牢,地动山摇”** 说的是真真的有理!如果你深感自己技术不牢固,基础不扎实,刷题不够多,那我建议你往下听我继续分享!

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。

需要免费领取这份Kafka源码笔记的铁汁们,麻烦帮忙转发一下这篇文章+关注我,然后戳这里免费获取!

ka源码笔记的铁汁们,麻烦帮忙转发一下这篇文章+关注我,然后戳这里免费获取!**

就这一次!拼多多内部架构师培训Kafka源码笔记(现已绝版)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现正四面体的透视投影动态隐线算法,需要以下步骤: 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` 方法中更新角度并重绘图形。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值