四面字节跳动,抗住算法后艰难拿到后端offer,薪资18K

在大学期间最想去的就是字节跳动了,感觉是现在互联网企业比较活跃的一份子,这段时间在同学的内推下。顶住疫情的压力去面试了字节跳动,最终拿到字节跳动西瓜视频的offer, 字节果然都是算法怪 几乎技术面都有算法环节!

本次字节面试题分享

字节跳动面试官都很优秀,面试的过程中全程微笑,基本是讨论的方式面试。

疫情期间四面字节跳动,抗住算法后艰难拿到后端offer,薪资18K

字节跳动

字节跳动一面

9月13日

自我介绍

  • 算法题一:无序数组的中位数(快排思想O(N)时间复杂度)
  • 算法题二:给-数组,让你找- -对满足i<j && ali<a[j]的和(O(N)时间复杂度0(1)空间复杂度)
  • 算法题三:给一数组,让你找一对满足i<j<k && a[j<a[j]<a[k]的和和k (O(N)时间复 杂度O(N)空间复杂度)

三道题都比较简单,秒了。

字节跳动二面

9月13日

  • 自我介绍
  • 算法题:(和)可以匹配,给你一个字符串,问你有多少合法的括号(分段处理: O(N)时间复杂度,0(1)空间复杂度)算法题秒了
  • 然后问了线程和进程
  • TCP和UDP区别(重了)
  • 然后来了个情景设计题雪:
  • 设计一个城市的顺丰快递系统,这个是边讨论边回答,大概花了30分钟(人有点懵,也有点累)
  • 数据库的事务
  • 事务的特点
  • 同步和互斥,锁
  • 输入一个URL ,发生的过程

字节跳动三面

9月18日

  • 自我介绍
  • 算法题:给-个数组(正负数都有) , 让你找最大子数组的和。( 处理前缀和, O(N)时间复杂度)秒了。
  • 智力题:给8个小球,7个质量相同,一个重一点,给你一个天平,称几次可以称出来。(2次)这个题当时脑子比较清醒就秒了。
  • DNS域名系统
  • HTTP和HTTPS的区别
  • HTTPS的SSL ( TLS )协议
  • 进程和线程的区别
  • 进程通信方式
  • 介绍共享内存通信方式
  • 线程的通信方式
  • synchronized和volatile介绍
  • synchronized和volatile的区别和应用
  • 说Fjava的GC算法

 

疫情期间四面字节跳动,抗住算法后艰难拿到后端offer,薪资18K

 

字节跳动HR面

  • 都是常规问题

面试经验分享:

本次面的是字节跳动的西瓜视屏部门,有没有小伙伴在里面的呀,期待我们快快见面哦,这次给大家分享的面试题等等,我都收藏成了一份文档里面,大家可以扫一扫免费获取!!!

01-redis面试专题分享:

疫情期间四面字节跳动,抗住算法后艰难拿到后端offer,薪资18K

 

03-spring面试专题

疫情期间四面字节跳动,抗住算法后艰难拿到后端offer,薪资18K

 

Java后端面试题答案

疫情期间四面字节跳动,抗住算法后艰难拿到后端offer,薪资18K

 

限于头条篇幅的原因,所有的复习资料没有办法全部展示出来,如果您需要我的这些面试复习资料的话,扫一扫免费获取

19年大厂面试总结:

疫情期间四面字节跳动,抗住算法后艰难拿到后端offer,薪资18K

 

面试资料免费获取

疫情期间四面字节跳动,抗住算法后艰难拿到后端offer,薪资18K

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值