阿里本地 Java面经
阿里本地 Java面经
双非渣本,22应届,一直很喜欢阿里(java生态无敌),可能不是很nb的部门,但是对于双非渣本的小菜鸡而言,这已经很棒了。
秋招阿里第二次机会,第一次集团CTO线hrg挂,这次可以通过很惊喜,也很意外。面经送上
阿里一面-9.1-50分钟一面直接部门leader面试,是一个很有礼貌的哥哥,很棒的感觉!!
一面感觉对实习挖的很深,实习的项目需要了解
第一部分基本全是实习项目
自我介绍
问我实习部门,实习经历,实习负责的具体点
数字人民币DCEP架构 (实习相关)
实习负责的项目系统设计、应用范围
上线之后的预估流量有多少
实习期间做的已经上线的具体的项目功能 (内部项目,支付主动下单,合规改造…)
对于项目中数据的新增方式设计的有哪些 (页面新增、mysql、es、hive)
数据处理中运用了哪些技巧 (单独的mysql数据,mysql+es数据,es+hive表数据,手动分页,es深查询之类)
介绍其中怎么操作mysql、es (mysql没使用mybatis-plus、反向生成实体类 mapper类,es是封装sql创建语句、深浅查询)
es中1 ...
排序算法
排序算法排序算法是《数据结构与算法》中最基本的算法之一。
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:
1.冒泡排序冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
1.1 排序原理
比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。
对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值。
1.2 算法演示
最快的时候:输入数据已经是 正序 , 这时候只需要循环确定一遍,时间复杂度为 O(n)
最慢的时候:输入数据是 反序 ,这时候需要嵌套式循环移动,时间复杂度为 O(n^2)
1.3 代码实现
升序排序
public s ...
CGLib浅析
CGLib浅析什么是CGLibCGLIB实现动态代理,并不要求被代理类必须实现接口,底层采用asm字节码生成框架生成代理类字节码(该代理类继承了被代理类)。
所以被代理类一定不能定义为final class并且对于final 方法不能被代理。
实现需要
//MethodInterceptor接口的intercept方法/***obj 代理对象*method 委托类方法,被代理对象的方法字节码对象*arg 方法参数*MethodProxy 代理方法MethodProxy对象,每个方法都会对应有这样一个对象 */public Object intercept(Object obj, Method method, Object[] arg, MethodProxy proxy)
Ehancer enhancer = new Enhancer() //Enhancer为字节码增强器,很方便对类进行扩展enhancer.setSuperClass(被代理类.class);enhancer.setCallback(实现MethodInterceptor接口的对象)enhancer.creat ...
代理、静态、动态
代理为其他对象提供一种代理以控制这个对象的访问,在某些情况下一个对象不能直接访问那个对象时,代理就起到了客户端和被代理对象 (委托类) 中介作用。
按照代理的创建时期,代理类可以分为两种:
静态:由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。
动态:在程序运行时运用反射机制动态创建而成。
静态代理
Subject: 代理类和被代理类实现同样的接口
Proxy:代理类,里面有被代理类,具体逻辑委托被代理类进行处理
RealSubject:被代理类,可以在其内做一些访问权限控制,额外的业务处理
Client:看到的是代理类,并不知道具体处理业务逻辑的类,降低耦合性
代码实现
UserDAO 代理和被代理的公共的接口(Subject)
public interface ProxyDao { boolean insert(String name);}
UserDAOImpl 被代理类(RealSubject)
public class ProxyDaoImpl implements ProxyD ...
RabbitMQ合集
RabbitMQ合集RabbitMQ系列正在更新ing~ ~ ~
RabbitMQ 安装与界面管理
RabbitMQ入门案例
消息中间件RabbitMQ
RabbitMQ工作模式
Spring Boot 整合 RabbitMQ
Rabbit 高级操作
Git使用教程
Git使用教程安装官网下载:https://git-scm.com/downloads 下载完成后使用默认进行安装。
安装完成后,在开始菜单里找到 Git -> Git Bash,蹦出一个类似命令行窗口的东西,就说明Git安装成功!还需要最后一步设置,在命令行输入:
git config --global user.name "Your Name"git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
创建版本库(仓库)# 创建仓库mkdir <仓库name> # 进入仓库cd <仓库name># 此命令用于显示当前目录pwd# 把当前目录初始化成Git仓库git init
也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录直接git init也是可以的。
添加文件到仓库在仓库目录下放入文件,如新建一个test.txt文件,然后使用git add test.txt ...
npm常用命令
npm常用命令简介npm是跟随node一起安装的包(模块)管理器。常见的使用场景有以下几种:
允许用户从npm服务器下载别人编写的第三方包到本地使用。
允许用户从npm服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到npm服务器供别人使用。
常用命令检测是否安装及版本npm -v # 显示版本号说明已经安装相应的版本
生成package.json文件npm init
package.json用来描述项目中用到的模块和其他信息
安装模块npm install # 安装package.json定义好的模块,简写 npm i# 安装包指定模块npm i <ModuleName># 全局安装npm i <ModuleName> -g # 安装包的同时,将信息写入到package.json中的 dependencies 配置中npm i <ModuleName> --save# 安装包的同时,将信息写入到package.json中的 devDependencies 配置中npm i <ModuleNa ...
yaml语言教程
yaml语言教程简介YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”(仍是一种标记语言)。
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
YAML 的配置文件后缀为 .yml,如:runoob.yml 。
yaml常用来用作配置文件,和json类似
基本语法
大小写敏感
使用缩进表示层级关系
缩进不允许使用tab,只允许空格
缩进的空格数不重要,只要相同层级的元素左对齐即可
‘#’表示注释
数据类型YAML 支持以下几种数据类型:
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(li ...
Markdown使用教程
Markdown使用教程一、Markdown简介Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。
应用当前许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。例如:GitHub、简书、知乎等
编辑器推荐使用Typora,官网:https://typora.io/
二、徽章什么是徽章徽章是一种小巧精美的小图标,一般配有相关文字进行辅助说明,可对数据进行监控,链接跳转等,富有表现力。
常见于github项目主页,但其不仅出现于 github 项目主页,凡是能够表现图片的地方都可以出现徽章。
徽章的使用
在markdown中使用
格式:[![图片文字说明](图片源地址)](超链接地址) # 即超链接内部嵌套图片
徽章生成网站:https://shields.io/
本文档主要介绍markdown,不对徽章做过多介绍,详细介绍请 戳我 了解。
三、设置目录设置之后会根据分级标题来自动生成目录。
[TOC]
注:github暂未支持。
[TOC]
在github生成TOC的方法:https://github.com/eka ...
滴滴面试1面+2面 Java后端
滴滴面试1面+2面 Java后端双非渣本小菜鸡,有幸进入滴滴,时间挺久啦,收到offer,总结一下面经,可能忘记一些
滴滴进入,金融事业部滴滴支付方向
一面 – 6月22日11:00 一个小时(全程赛码在线面试系统)
一面面试官是一个大哥哥感觉的,一直在笑~~ 我太喜欢了,给我的感觉很放松很nice
上来自我介绍 (说我特别有激情,hhh)
介绍一下你的项目 (这部分就是正常介绍,说出了为什么做、项目特点、成就、职责、项目技术难点、遇到问题、可优化点、对项目未来想法)
【问了点项目技术,从Java基础开始了】
8个基本数据类型以及对应的字节数 (这个可以自行百度下)
什么是面向对象 (这个我用我自己做饭和去餐馆点餐举例子的,hhh)
面向对象和面向过程的区别 (这里主要说,对应的优缺点,面向对象易扩展、封装、继承、多态balabala )
那对于多态,说说你的看法 (多态的定义+自己理解,以及运行时多态和编译时多态 ,就是重载重写)
那重载和重写有什么区别 ( 老八股 )
构造方法可以被重写吗 ( 不能重写可以重载 说原因 )
...