字节上海国际电商
- 自我介绍
- 面向对象相关的封装、继承、多态是否有了解
- 可以简单介绍一下多态吗?还有吗?
- 在Java中多态也叫动态绑定,相比于c语言的静态绑定,多态可以保证基类在编译阶段只用确保存在此方法即可,方法的实际调用会在运行阶段通过动态绑定后才会调用,这可以使得在传入子类为参数时,向上转型为基类或者接口,更好的实现代码的复用性。
- 设计原则有听说过吗?
- 开闭原则:对扩展开放,对修改关闭,目的是为了使程序的扩展性更好,易于维护和升级,应更多的使用接口和抽象类。
- 里氏代换原则:任何基类可以出现的地方,子类一定可以出现。
- 依赖倒置原则:针对接口编程,依赖抽象而不依赖具体
- 依赖倒转原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。
- 接口隔离原则:使用多个专门的接口而不使用单一的总接口
- 迪米特法则:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立
- 单一职责原则:一个类只负责一个功能领域中相应的职责
- 设计模式有听说过吗?
- 单例模式
- 构成条件:静态变量、静态方法、私有构造器
- 单例模式两种形态
- 饿汉模式(线程安全)
- 懒汉模式(线程不安全)
- 懒汉模式转化成线程安全
- 加synchronized关键字
- 用双重检查加锁
- 用静态内部类
- 单例模式
- Java中8八种基本数据类型?忘记了byte
- byte、short、int、long、float、double、char、boolean
- Java中为什么String没有作为一种基本类型?
- String是一个对象,引用类型。在Java中基本类型为为他分配实际占用的内存空间,而引用类型仅仅是一个指向堆区中某个实例的指针,可以调用其方法。
- Java中为什么又设计一个包装类型?除了泛型还有别的用途吗?
- Java中万物皆为对象,但是如果使用对象在堆中来存储int等数据类型不是很有效,于是出现了像c++中的基本类型,可以直接在栈中分配空间并且不用new这个对象。又因为Java是一个面向对象的语言,基本类型不具备对象的性质,所有我们将基本类型包装起来形成包装类,使他有了对象的性质便可一为其添加属性和方法。
- 常见的集合类型都有哪些?
- 数据库你有用过吗?你了解哪些用途?建表语句?字段类型?索引语句?给你一个数据库结构,你能写sql语句吗?
- redis一般是做什么用的?为什么redis访问的更快?
- 基于内存实现
- 高效的数据结构
- 合理的数据编码
- 合适的线程模型
- 内存是一定比磁盘要快吗?可以从底层结构来说一下吗?
- (操作系统)分段管理和分页管理有了解过吗?
- (计算机网络)DNS解析过程了解过吗?
- tcp协议的拥塞控制有了解过吗?
- 算法题:target,连续数字和为target的所有数组;
- 例子:target= 9 输出 [[4,5],[2,3,4]]
import java.util.*;
public class demo29 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int target = in.nextInt();
int target1 = target+1>>1;
List<List<Integer>> res = new LinkedList<>();
int i = 1,j =2,cur =3;
while(i<j&&j<=target1){
if(target == cur){
List<Integer> temp = new LinkedList<>();
for(int p = i;p<=j;p++){
temp.add(p);
}
res.add(temp);
cur-=i++;
}
else if(cur >target) {
cur-=i++;
}
else {
cur+=++j;
}
}
System.out.println(res);
}
}
public class esingle { private static esingle esingledemo = new esingle();
private esingle(){
System.out.println("我是饿汉模式");
}
public static esingle getInstance(){
return esingledemo;
}
}
public class lsingle {
private static lsingle lsingledemo ;
private lsingle(){
System.out.println("我是线程不安全的懒汉模式");
}
public static lsingle getInstance2(){
if(lsingledemo == null){
lsingledemo = new lsingle();
}
return lsingledemo;
}
}
public class lsingle1 {
private static lsingle1 lsingle1demo;
private lsingle1(){
System.out.println("我是懒汉模式加关键字锁的形式");
}
public static synchronized lsingle1 getInstance3(){
if(lsingle1demo == null){
lsingle1demo = new lsingle1();
}
return lsingle1demo;
}
}
public class lsingle2 {
private static volatile lsingle2 lsingle2demo;
private lsingle2(){
System.out.println("我是懒汉模式线程安全并且只在第一次加锁的形式");
}
public static lsingle2 getInstance4(){
if(lsingle2demo == null){
synchronized (lsingle2.class){
if (lsingle2demo == null){
lsingle2demo = new lsingle2();
}
}
}
return lsingle2demo;
}
}
public class demo28 {
public static void main(String[] args) {
esingle single1 = esingle.getInstance1();
lsingle single2 = lsingle.getInstance2();
lsingle1 single3 = lsingle1.getInstance3();
lsingle2 single4 = lsingle2.getInstance4();
}
}
//输出
我是饿汉模式
我是线程不安全的懒汉模式
我是懒汉模式加关键字锁的形式
我是懒汉模式线程安全并且只在第一次加锁的形式
商汤云存储
- (项目)介绍项目,如何定义高并发?
- 常见的限流算法
- 计数器(固定窗口)算法
- 滑动窗口算法
- 漏桶算法
- 令牌桶算法
- 多台服务器查询,如何保证数据的一致性?
- 客户端请求过来如何确定哪台服务器?
- rabbitMQ了解吗?
- 项目中收获是什么?
- 你是如何学Java?
- 项目中遇到问题如何处理?
- 运行一个程序的加载过程?
- 详细讲一下java这个程序是如何运行起来的?
- Java中的类是怎么寻找到的?
- 通过类的完全限定名称获取定义该类的二进制字节流。
- 计算机网络:三次握手与四次挥手
- 为什么没有四次握手这样的设计呢?
- FIN是什么意思?
- close_wait是什么阶段,为什么会有一个等待时间?
- 介绍一下虚拟内存
- 虚拟内存可用的空间可以比实际的空间大吗?
- 一个程序申请了一个4GB的内存,但是实际的物理内存只有2GB这样会报错吗?
- 申请完4GB内存只有,操作系统做了什么事情?malloc函数
- 一定要在把堆的空间扩大吗?堆扩大的时候操作系统需要在这个时候建立虚拟内存和物理内存的映射关系的吗?
- 页是怎么养淘汰到磁盘中的,LFU这个算法有了解吗?
- 进程之间通信的有哪些方式?
- ctrl_C的处理逻辑?
- 发送信号是给进程还是给线程?具体是进程的那个线程处理这个信号?
- 页交换详细讲一下?
- 写一道算法题:leetcode445 链表中的两数相加
网易有道(北京)
- 自我介绍
- 手写一个单例模式
- 算法题:计算根号二的值,结果保留小数点后一位
- 写一个线程随机输出100以内的随机数
public class random implements Runnable{
@Override
public void run(){
for(int i = 0;i<100;i++){
System.out.print((int)(1+Math.random()*10)+ " ");
}
}
}
public class random2 extends Thread{
public void run(){
for(int i = 0;i<100;i++){
System.out.print((int)(1+Math.random()*10)+ " ");
}
}
}
public class demo30 {
public static void main(String[] args) {
random demo =new random();
Thread thread = new Thread(demo);
Thread thread1 = new random2();
thread.start();
thread1.start();
}
}
阿里云(电话面试)
- 线程池的七个参数
- (redis)缓存穿透、缓存雪崩和缓存击穿
- resdis数据如何可持久化
- redis如何保证事务的一致性
- 算法题:链表如何判断环
- concurrenthashmap在Java1.7与1.8中的区别?
- hashtable与hashmap的区别
- hashmap解决冲突的方法
- jvm垃圾回收算法?常见的垃圾回收器?G1与CMS的区别
- mybatis是否有了解过
- 可重入锁与字段锁的区别,还有嘛
笔试
package lyjps.jsoninclude;
import java.util.LinkedList;
import java.util.List;
class demo {
public String s ;
public int i;
public List<demo> list;
public demo(String s, int i){
this.s = s;
this.i = i;
}
public demo(String s, List<demo> list){
this.s = s;
this.list = list;
}
}
//这个类demo有两种初始化方式
//1.字符串和一个数字 2.字符串和一个存有demo对象的list
public class includeMethod {
public static void main(String[] args) {
List<demo> a = new LinkedList<>();
a.add(new demo("a",1));
a.add(new demo("b",2));
List<demo> p = new LinkedList<>();
p.add(new demo("c1",3));
p.add(new demo("c2",4));
a.add(new demo("c",p));
List<demo> b = new LinkedList<>();
b.add(new demo("a",1));
List<demo> q =new LinkedList<>();
q.add(new demo("c1",3));
b.add(new demo("c",q));
b.add(new demo("d",5));
System.out.println(method(a,b));
}
//method这个方法是拿b与a进行比较,判断a是否包含b
public static boolean method(List<demo> a,List<demo> b){
for(demo temp1 : b){
String s1 = temp1.s;
//新增加flag变量,来判断b中的String,a中不存在
boolean flag = false;
for(demo temp2 :a){
if(temp2.s .equals(s1)){
flag = true;
//这里如果两者的字符串相等,而i不相等会返回false,这里包括了temp1或者temp2只有一个存着List,因为i如果没有初始化,它会有一个默认值零
if(temp2.i != temp1.i){
return false;
//如果两个对象都有list,我们在递归的进行判断
}else if(temp1.i == 0&&temp2.list!=null&&temp1.list!=null){
return method(temp2.list,temp1.list);
}
}
if(!flag) return false;
}
}
return true;
}
}
标签:线程,demo,List,static,日常,实习,new,public
From: https://www.cnblogs.com/lyjps/p/17009883.html