精华内容
下载资源
问答
  • 本文来源网络收集整理\word可编辑 本文来源网络收集整理\word可编辑 本文来源网络收集整理\word可编辑 Java初级开发工程师的职责 Java初级开发工程师的职责 Java初级开发工程师需要协助工程师处理线上版本紧急技术...
  • PAGE PAGE 1 Java初级开发工程师的职责 Java初级开发工程师需要协助工程师处理线上版本紧急技术问题线上版本bug处理下面是小编为您精心整理的Java初级开发工程师的职责 Java初级开发工程师的职责1 职责 1 负责参与...
  • Java 初级开发工程师的岗位职责 Java 初级开发工程师需要负责后台功能模块的开发 独 立进行系统新功能的需求分析和设计下面是小编为您精心 整理的 Java 初级开发工程师的岗位职责 Java 初级开发工程师的岗位职责 1 ...
  • Java初级开发工程师的工作职责精选 Java初级开发工程师需要负责公司核心产品的升级开发下面是xx为您精心整理的Java初级开发工程师的工作职责精选 Java初级开发工程师的工作职责精选1 职责 1 在研发负责人的安排下...
  • 本文来源网络收集整理\word可编辑 本文来源网络收集整理\word可编辑 本文来源网络收集整理\word可编辑 Java初级开发工程师的工作职责精选 Java初级开发工程师的工作职责精选 Java初级开发工程师需要负责公司核心产品...
  • 本文来源网络收集整理\word可编辑 本文来源网络收集整理\word可编辑 本文来源网络收集整理\word可编辑 Java初级开发工程师岗位的具体内容 Java初级开发工程师岗位的具体内容 Java初级开发工程师需要负责按照项目设计...
  • PAGE PAGE 1 Java初级开发工程师的岗位职责 Java初级开发工程师需要负责后台功能模块的开发进行系统新功能的需求分析和设计下面是小编为您精心整理的Java初级开发工程师的岗位职责 Java初级开发工程师的岗位职责1 ...
  • PAGE PAGE 1 Java初级开发工程师的主要职责 Java初级开发工程师需要根据分配的任务按时按质完成模块的设计和编程实现下面是小编为您精心整理的Java初级开发工程师的主要职责 Java初级开发工程师的主要职责1 职责 1...
  • Java初级开发工程师需要根据开发规范与流程独立完成编码、及相关文档。下面是学习啦小编为您精心整理的Java初级开发工程师工作的岗位职责。Java初级开发工程师工作的岗位职责1职责:1. 协助完成需求的整理和软件设计...

    Java初级开发工程师需要根据开发规范与流程独立完成编码、及相关文档。下面是学习啦小编为您精心整理的Java初级开发工程师工作的岗位职责。

    Java初级开发工程师工作的岗位职责1

    职责:

    1. 协助完成需求的整理和软件设计;

    2. 按照项目计划,按时提交高质量代码,完成开发任务,规范文档的编写、维护,以及其他与项目相关工作;

    3. 负责单元测试代码的编写和进行单元测试;

    4. 协助负责java程序的打包、发布和部署工作;

    任职要求:

    1.本科以上,应届毕业生即可,计算机相关专业,有实习经验;

    2. 了解HTML5、JavaScript、Ajax、CSS、vue等Web前端技术;

    3. 了解springboot/springmvc/mybatis/netty等开源框架,阅读过相关源码优先;

    4. 了解Java常用的设计模式;熟悉Redis, Elasticsearch并了解各自使用场景者优先;

    5. .了解使用Maven, GIT代码管理工具;

    6. 强烈的责任心与团队精神,较强的抗压能力和良好的沟通、协调、组织能力;

    7. 热爱技术,对技术有不懈的追求,喜欢研究开源代码,有良好的学习能力、团队协作能力和沟通能力;

    Java初级开发工程师工作的岗位职责2

    职责:

    1、参与项目需求分析及功能模块的设计工作;

    2、根据工作进度和任务分配,开发相应的软件模块;

    3、负责产品的日常维护工作,跟踪解决用户的问题和故障;

    4、根据项目需要,学习新的开发语言,如Delphi;

    5、完成领导安排的其它项目工作。

    岗位要求:

    1、统招二本以上,计算机相关专业;

    2、英语四级,能阅读英文资料;

    3、有较强的自学能力和学习动力,愿意学习心的变成语言;

    4、积极主动,责任心强;

    Java初级开发工程师工作的岗位职责3

    职责:

    1、根据产品规划、产品的解决方案进行需求分析,根据需求分析进行产品的开发及设计。

    2、根据客户发现的问题进行修复处理。

    3、根据客户提出的建议给与优化支持。

    任职资格:

    1、软件基础理论知识扎实,具有良好的数据结构、算法功底。

    2、计算机相关专业专科以上学历,如经过专业培训并具备金融汽车行内经验者也可择优录取。

    3、1年以上Java后端开发经验,了解git和svn,熟练使用maven,springmvc,mybatis等开源框架进行开发。

    4、熟悉web及前端技术(包括Javascript、ajax、json、jquery、easyui等开发框架),熟悉SQL。

    5、了解Linux系统常用命令及自动化部署。

    6、良好的团队合作精神,踏实认真,细心,能动性较强。

    Java初级开发工程师工作的岗位职责4

    职责:

    完成项目经理交付的开发任务;

    负责软件的功能、安全、质量、性能需求的技术实现;

    承担模块、组件详细设计;

    根据详细设计文件独立进行模块、组件代码实现和调试,并进行模块级测试;

    根据详细设计文件进行代码实现和调试,并进行模块级测试;

    进行BUG修复并保障软件质量。

    岗位要求:

    一年以上JAVA Web开发经验,计算机及相关专业毕业,大学本科以上学历;

    有扎实的JAVA编码基础,良好的编码习惯;

    精通JSP、Servlet、javaBean、HTML、Javascript、css、Ajax、jQuery;

    熟练掌握Spring、Struts、Hibernate、MVC等主流的开发框架;

    解jQuery EasyUI、B-JUI等前端框架,并至少精通其中一种;

    有良好的数据库理论基础,熟练使用Oracle、SQLserver、Mysql等常用的数据库系统;

    熟练使用Eclipse开发环境和SVN版本管理工具;

    具有良好的沟通、团队协作、抗压、计划、创新和学习的能力。

    Java初级开发工程师工作的岗位职责5

    职责:

    1.完成项目经理及开发组长交办的软件产品模块的设计编码工作;

    2.与技术团队共同参与,项目规划、项目策划、需求完善等沟通工作;

    3.具有良好的学习能力,能够快速在团队中成长起来满足开发需求。

    任职要求:

    1.计算机科学与技术及软件工程等相关专业,大专及以上学历,1-2年工作经验;

    2.熟练掌握J2EE架构,了解Struts,Hibernate,Spring等技术框架下的web开发;

    3.掌握使用CSS、JavaScript、Ajax和Jquery框架等前端技术;

    4.熟悉mysql、oracle数据库的sql语句的编写;

    5.了解svn、Meavn版本控制工具;

    6.具有团队合作精神,良好的代码书写能力,能够和团队站在一起完成项目开发任务;

    相关文章:

    展开全文
  • 本文来源网络收集整理\word可编辑 本文来源网络收集整理\word可编辑 本文来源网络收集整理\word可编辑 Java初级开发工程师的职责_岗位职责 Java初级开发工程师的职责 Java初级开发工程师需要协助工程师处理线上版本...
  • PAGE PAGE 1 Java初级开发工程师岗位的工作职责 Java初级开发工程师需要根据开发设计说明书进行系统/模块的软件编码工作以下是小编整理的Java初级开发工程师岗位的工作职责 Java初级开发工程师岗位的工作职责1 职责 ...
  • PAGE PAGE 1 Java初级开发工程师岗位的具体内容 Java初级开发工程师需要负责按照项目设计的数据库结构进行编码和单元以下是小编整理的Java初级开发工程师岗位的具体内容 Java初级开发工程师岗位的具体内容1 职责 1...
  • PAGE PAGE 1 Java初级开发工程师工作的岗位职责 Java初级开发工程师需要根据开发规范与流程完成编码及相关文档下面是小编为您精心整理的Java初级开发工程师工作的岗位职责 Java初级开发工程师工作的岗位职责1 职责 1...
  • PAGE PAGE 1 Java初级开发工程师的基本职责描述 Java初级开发工程师需要根据公司技术文档规范撰写模块详细设计文档下面是小编为您精心整理的Java初级开发工程师的基本职责描述 Java初级开发工程师的基本职责描述1 ...
  • PAGE PAGE 1 Java初级开发工程师岗位的职责模板 Java初级开发工程师需要根据业务系统的设计在项目经理的指导下进行编码实现以下是小编整理的Java初级开发工程师岗位的职责模板 Java初级开发工程师岗位的职责模板1 ...
  • PAGE PAGE 1 Java初级开发工程师岗位的基本职责范本 Java初级开发工程师需要负责局部模块的任务开发并按照项目设计和进度要求编码和单元以下是小编整理的Java初级开发工程师岗位的基本职责范本 Java初级开发工程师...
  • 本文来源网络收集整理\word可编辑 本文来源网络收集整理\word可编辑 本文来源网络收集整理\word可编辑 Java初级开发工程师的工作职责精选_岗位职责 Java初级开发工程师的工作职责精选 Java初级开发工程师需要负责...
  • 本文来源网络收集整理\word可编辑 本文来源网络收集整理\word可编辑 本文来源网络收集整理\word可编辑 Java初级开发工程师岗位的具体内容_岗位职责 Java初级开发工程师岗位的具体内容 Java初级开发工程师需要负责...
  • Java 初级开发工程师岗位的职责模板 Java 初级开发工程师需要根据业务系统的设计在项目经理的 指导下进行编码实现以下是橙子整理的 Java 初级开发工程师岗 位的职责模板 Java 初级开发工程师岗位的职责模板 1 职责 1...
  • Java初级开发工程师面试题汇总.PDF,有答案的版本,可以复制文字。
  • JAVA初级开发工程师面试常问题目(持续更新) 1.说说你对面向对象的理解 面向对象是一种“万物皆对象”的编程思想,在生活中任何事物都可以归为一类,而每一个个体都是一类事物的实例。 2.抽象类和抽象接口的区别 ...

    JAVA初级开发工程师面试常问题目(持续更新)

    1.说说你对面向对象的理解
    面向对象是一种“万物皆对象”的编程思想,在生活中任何事物都可以归为一类,而每一个个体都是一类事物的实例。

    2.抽象类和抽象接口的区别
    抽象类:
    抽象类可以包含非抽象方法,属性;但是包含抽象方法的只能是抽象类
    抽象类中的抽象方法必须由子类实现才能使用,如果子类没有实现全部的抽象方法,则该子类依旧是抽象类
    子类只能继承一个抽象类(extends)
    接口:
    在JDK8之前,接口的方法只能由public修饰,必须是抽象的,JDK8之后,增加了default和static
    接口中只有常量,因为接口中的变量只能用public static final修饰
    接口中的抽象方法必须由子类实现才能使用,如果子类没有实现全部的抽象方法,则该子类为抽象类
    子类可以实现多个接口(implement)

    3.说说第三范式
    第一范式:表中每个分量必须是不可分割的数据项
    第二范式:在第一范式的基础上,表中的每个非主属性必须完全函数依赖于主属性
    第三范式:在第二范式的基础上,表中的每个非主属性之间不能有传递依赖

    4.Java中的方法覆盖(Overriding)和方法重载(Overload)是什么意思?
    方法重写:是指子类继承父类的方法,并重新编写方法里面的内容。
    方法重载:是指在一个类中方法的名称相同但是参数列表不同的情况。
    方法重写原则:

    • 方法名和参数列表必须相同
    • 两小一大原则:方法返回值类型要小于等于父类方法,方法抛出异常类型要小于等于父类方法,方法访问权限要大于等于父类方法
    • 被final,static,private修饰的方法不能被重写

    方法重载原则:

    • 方法名必须相同
    • 参数列表不同(个数不同,类型不同,数据类型的顺序不同)
      (int a) ——> (int a , int b)
      (int a) ——> (double a)
      (int a , double b) ——> (double a , int b)
    • 返回类型可以相同也可以不同,但仅仅返回类型不同是不能构成方法重载的
    展开全文
  • 本人今年刚毕业,正在面试初级Java开发工程师,在这里写下遇见的一些笔试题,会持续更新到本人找到工作 1.写一个单例模式 首先要知道什么是单例模式? 保证整个系统中一个类只有一个对象的实例,实现这种功能的方式...

    本人今年刚毕业,正在面试初级Java开发工程师,在这里写下遇见的一些笔试题,会持续更新到本人找到工作

    1.写一个单例模式
    首先要知道什么是单例模式?
    保证整个系统中一个类只有一个对象的实例,实现这种功能的方式就叫单例模式。

    /**
     * 单例模式案例
     */
    public class Singleton {
    	//确保对象实例只有一个。
     private static final Singleton singleton = new Singleton();
    	//构造方法私有
     private Singleton() {
        }
     //以静态方法返回实例
     public static Singleton getInstance() {
     return singleton;
        }
    }
    

    2.用逆序打印九九乘法表

    public static void main(String[] args) {
    		for(int i=9;i>=1;i--) {
    			for(int j=i;j>=1;j--) {
    				System.out.print(i+"*"+j+"="+i*j+"\t");
    			}
    			System.out.println();
    		}
    	}
    

    在这里插入图片描述

    3.用文件流打印出一个txt文档,文档的内容格式如图
    在这里插入图片描述
    打印的格式为:
    name.txt一共有234个字符串
    abcd出现过4次
    ddd出现过3次
    其余的出现了1次
    4.利用socket给服务器端发送一个“你好”,服务器ip地址为192.168.254.254,端口为8080.

    public class socket {
    	public static void main(String[] args) throws IOException {
    		  Socket s = new Socket("192.168.254.254",8080);//1,建立socket服务.指定要连接主机和端口.
    	      OutputStream out = s.getOutputStream();//2,获取socket流中的输出流.将数据写到该流中.通过网络发送给 服务端.
    	      out.write("你好".getBytes());//getBytes()是将一个字符串转化为一个字节数组
    	        //write(byte[] b) 
    	        //将 b.length 个字节从指定的 byte 数组写入此输出流。
    
    	        InputStream in = s.getInputStream();//3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印.
    	        byte[] buf = new byte[1024];        
    	        int len = in.read(buf);//int read(byte[] b) 
    	        //  从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。 
    	        //参数:b - 存储读入数据的缓冲区。
    	    	//返回:读入缓冲区的总字节数;如果因为已经到达流末尾而不再有数据可用,则返回 -1。是阻塞式方法  
    
    	        System.out.println(new String(buf,0,len));      
    	        //String(byte[] bytes, int offset, int length) 
    	        //通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的 String。         
    
    	        s.close();
    	    }
    	}
    

    5,键盘输入一句英语,把单词的顺序逆序打印出来,但是单词内部的字母顺序不变,同时如果句子中有多个空格,在输出的时候也当成一个空格,例如键盘输入 who are (此处有多个空格)you
    输出结果为 you are who 每个单词之间只有一个空格

    public class revseString {
        public static void main(String[] args) {
            System.out.println("please input");
            Scanner sc=new Scanner(System.in);
            String str=sc.nextLine();
            new revseString().reflectStr(str);
        }
        public void reflectStr(String str){
            if(str==null||str.length()<1){
               System.out.println("你输入的为空白"); 
            }
            ArrayList list = new ArrayList();
            String[] split = str.split("\\s+");
            for (int i=split.length-1;i>=0;i--) {
               list.add(split[i]);
            }
           for (int i=0;i<list.size();i++){
               if (i!=list.size()-1){
                   System.out.print((String) list.get(i)+" ");
               }else {
                   System.out.print((String) list.get(i));
               }
           }
    

    在这里插入图片描述

    展开全文
  • Java提供了一个java.util.concurrent.Executor接口用于创建线程池 四种线程池的创建 ​ newCachedThreadPool:创建一个可缓存线程池 ​ newFixedThreadPool:创建一个定长线程池,提交一个任务就创建,可控制线程...

    一.多线程

    什么是多线程?

    ​ 多线程是指程序中包含多个流,即在一个程序中可以同时进行多个不同的线程来执行不同的任务

    多线程的优劣?

    ​ 优点:可以提高CPU利用率, 提高了程序的效率, 单个程序可以创建多个不同的线程来完成各自的任务

    ​ 缺点:线程也是程序,需要占据内存.多线程需要协调和管理,所以需要CPU跟踪线程.

    并发和并行的区别?

    ​ 并发:多个任务在同一个CPU上,按照细分的时间片段轮流交替执行.

    ​ 并行:单位时间内,多个处理器或者多核处理器同时处理多个任务,真正意义上的同时进行

    并发编程三要素(怎么保证多线程的线程安全,线程安全在哪些方面体现)?

    ​ 原子性:一个或多个操作, 要么全部执行且不被打断, 要么就全部不执行

    ​ 可见性: 多个线程操作一个共享变量时, 其中一个变量修改后, 其他线程可以立刻看到修改结果

    ​ 有序性:程序的执行顺序按照代码先后顺序来执行

    线程与进程的区别?

    ​ 根本区别:进程是操作系统资源分配的基本单元,线程是处理器任务调度和执行的基本单位

    ​ 包含关系:如果一个进程内有多个线程,则执行的过程不是一条线的,而是多条线(多线程),共同完成,线程是进程的一部分.

    ​ 内存分配:同一个进程的线程共享本进程的地址空间和资源,进程之间的地址空间和资源是相互独立的.

    守护线程:服务线程,准确的来说就是服务其他的线程

    什么是线程死锁

    ​ 死锁是指两个或者以上的进程(线程)在执行过程中, 由于竞争资源或由于彼此通信造成的一种堵塞现象,若无外力作用,都将无法进行推进,此时的系统处于死锁状态.

    形成死锁的条件及解决办法

    ​ 互斥条件:一个资源只能被一个进程占用,直到该进程被释放

    ​ 请求与保持条件:一个线程请求被占有资源而发生堵塞时,对以获取资源保持不放

    ​ 不剥夺条件:线程以获取的资源在未使用完之前不能被其他线程强行剥夺, 只有等自己使用完才释放资源.

    ​ 循环等待条件: 发生死锁时, 等待的线程必定形成一个环路, 死循环造成永久堵塞.

    ​ 解决办法:一次申请所有资源. 占有部分资源的线程尝试申请其它资源, 申请不到,主动释放它占有的资源. 按顺序来申请资源.

    创建线程的四种方式

    ​ 继承Thread类

    ​ 实现Runnable接口

    ​ 实现Callable接口

    ​ Executors工具类创建线程池

    runnable和callable的区别:

    • runnable中的run()方法返回void,只是纯粹执行run()方法中的代码
    • callable:中的call()方法有返回值,一个泛型,和Future,FutureTask配合可获得异步执行的结果

    run()方法和start()方法有什么区别

    ​ start()方法用于启动线程, run()方法用于执行线程的运行代码, run()可以反复调用, 而start() 方法只能被调用一次

    ​ 调用start()方法启动线程可以使线程进入就绪状态, 等待运行; run()方法只是thread的一个普通方法调用, 还是在主线程里执行.

    线程生命周期的6个状态

    ​ 新建(NEW):初始化状态,未启动

    ​ 就绪(RUNNABLE):已经调用Thread 的start方法启动了, 等待CPU调度, 就绪状态

    ​ 销毁(TERMINATED):死亡状态, 已正常执行完run()中的方法,或者因为未捕捉的异常而终止run()方法了

    ​ 计时等待(TIMED_WAITING):睡眠状态, 调用sleep(参数)或wait(参数)后线程进入计时休眠状态,

    ​ 等待(WAITING):调用wait()方法, 释放锁进入无线等待状态

    ​ 阻塞(BLOCKED):运行的线程执行wait()方法, 运行的线程获取对象的同步锁时, 同步锁被别的线程占用, 进入阻塞状态.

    sleep()和wait()有什么区别

    ​ 相同:两者都可以使线程进入等待状态

    ​ 不同:sleep()是Thread类下的静态方法, wait()是Object类下的方法

    ​ sleep()不释放锁, wait()释放锁

    ​ wait()常用语线程之间的通信, sleep()常用语暂停执行.

    如何在两个线程之间共享数据?

    ​ 两个线程之间共享变量即可实现共享数据. 一般来说共享变量要求变量本身是线程安全的, 然后再线程中对变量使用

    什么是线程安全?Servlet是线程安全的吗?

    ​ 线程安全是指某个方法在多线程的环境下被调用时, 能够正确处理多线程之间的共享变量, 使程序能正确完成.

    ​ Servlet不是线程安全的, 它是单实例多线程, 多个线程访问一个方法时, 不能保证共享变量是安全的

    什么是线程池?

    ​ 提前常见若干个线程, 有任务需要处理, 线程池里的线程就会处理任务, 处理完线程后线程并不会销毁, 而是等待下一个任务,存放在线程池中.

    ​ Java提供了一个java.util.concurrent.Executor接口用于创建线程池

    四种线程池的创建

    ​ newCachedThreadPool:创建一个可缓存线程池

    ​ newFixedThreadPool:创建一个定长线程池,提交一个任务就创建,可控制线程最大并发数

    ​ newScheduledThreadPool:创建一个固定长度线程池, 支持定时及周期性执行任务

    ​ newSingleThreadExecutor:创建一个单线程化的线程池, 它只会用唯一的工作线程来执行任务

    线程池的五种状态?

    • Running
    • ShutDown
    • Stop
    • Tidying:
    • Terminated

    线程池的优点?

    ​ 重用存在的线程, 减少对象创建销毁的开销

    ​ 可有效的控制最大并发线程数, 提高系统资源的使用率, 同时避免过多资源竞争, 避免堵塞

    ​ 提供定时执行, 定期执行, 但线程, 并发数控制等功能

    什么是乐观锁和悲观锁

    ​ 乐观锁:对并发间操作产生的线程安全问题持乐观状态, 将比较-替换这两个动作作为一个原子去修改内存中的变量; 通过不加锁来处理资源

    ​ 悲观锁: 每次对某资源进行操作时, 都会持有一个独占的锁; 将资源锁住, 等一个之前获得锁的线程释放锁后, 下一个线程才可以访问

    多线程同步有哪几种方法?

    ​ Synchronized关键字:用来给方法,代码块加锁。共享对象头。Java自带,Jvm层面。非公平,适合少量代码同步问题

    ​ Lock锁实现:共享某个变量。一个Java类。公平,适合大量同步代码同步问题

    ​ 分布式锁:多个进程不在同一个系统中,使用分布式锁控制多个进程对资源的访问。

    Synchronized的底层实现原理?

    synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性。

    Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:

    • 普通同步方法:锁是当前实例对象
    • 静态同步方法:锁是当前类的class对象
    • 同步方法快:锁是括号里面的内容

    二.集合框架

    什么是集合?

    ​ 集合可以看做是一种容器, 用来存储对象信息

    数组和集合的区别?

    ​ 数组长度不可变,无法保存有映射关系的数据, 集合用于保存不确定的数据, 以及保存具有映射关系的数据

    ​ 数组元素可以使基本类型的值, 也可以是对象, 集合只能保存对象

    ​ Java集合类主要有两个接口Conllection和Map

    ​ Collection接口常用集合: ArrayList, LinkedList, HashSet, TreeSet, Vector

    ​ Map接口常用集合: HashMap, TreeMap

    Collections和Collection的区别

    Collections:是集合类的工具类提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

    Collection:集合的顶级接口

    List, Set, Map的区别?

    ​ List: 有序, 可重复集合, 集合中每个元素都有对应顺序索引

    ​ Set: 有序, 不可重复集合, 重复元素会覆盖

    ​ Map: 键值对存储, 无序, 元素不可重复,重复元素覆盖

    HashMap和Hashtable的区别?

    ​ 都是集合,底层哈希算法

    区别:

    • HashMap线程不安全,效率高。可以存储null键值对
    • Hashtable线程安全(每个方法中都加入了synchronized),效率低,不可以存储null键值

    HashMap的数据结构

    ​ jdk1.7: HashMap实际上是一个数组和链表结构的散列表

    ​ jdkq.8: 链表中的元素超过了8个后, 会将链表转换为红黑树

    HashSet的实现原理?

    • HashSet底层有HashMap实现
    • HashSet值存放于HashMap的key上
    • HashMap的value值统一为present

    ArrayList和LinkLIst的区别?

    ArrayList底层数据结构是数组

    LinkList底层数据结构是链表

    List转换为数组:ArrayList的toArray方法

    数组转换为List:调用Arrays的asList方法

    ArrayList和Vector的区别?

    • Vector是同步的,ArrayList不是。线程安全, 数据增长原来的2倍
    • ArrayList是同步的,不会过载,比Vector快。非线程安全, 数据增长没有明确规定, 源码来看是增长原来的1.5倍

    哪些集合是线程安全的?

    • vector:线程安全,效率低
    • HashTable:线程安全
    • statck:堆栈类,先进后出

    三.网络编程

    TCP与UDP的区别

    ​ TCP:传输控制协议, 为应用程序提供可靠的通信连接,适合一次传输大批数据的情况,面向连接的协议

    ​ UDP: 用户数据包协议, 提供无连接通讯, 且不对传送包进行可靠的保证

    ​ TCP为可靠的连接, UDP为不可靠的连接

    ​ TCP占有系统资源较多, UDP占有系统资源少

    ​ TCP保证数据准确性, UDP可能丢包, TCP保证数据顺序,UDP不保证

    三次握手,四次挥手详细过程及作用

    建立连接:

    ​ 一次握手: 客户端发送syn包到服务器,等待服务器确认

    ​ 二次握手: 服务器收到syn包, 确认客户的syn, 同时自己发送syn + ACK包给客户端并进入等待

    ​ 三次握手: 客户端收到服务器的SYN + ACK包, 完成三次握手, 开始发送数据

    ​ 三次握手完成后, 客户端与服务器才正式开始传送数据

    断开连接:

    ​ 一次挥手:主动关闭方发送FIN用来关闭主动方到被动关闭方的数据传送

    ​ 二次挥手: 被动关闭方收到FIN包后, 发送一个ACK给对方

    ​ 三次挥手: 被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送

    ​ 四次挥手: 主动关闭方收到FIN后, 发送一个ACK给被动关闭方

    四层网络模型和七层网络模型

    四层网络模型:

    ​ 应用层:应用程序间沟通的层

    ​ 传输层:负责传输数据,并确认数据已送达并接收

    ​ 互联网络层: 负责提供基本的数据封包传送功能

    ​ 网络接口层:对实际的网络媒体的管理, 定义如何使用实际网络

    OSI七层网络模型:

    ​ 物理层, 数据链路层, 网络层, 传输层, 会话层, 表示层, 应用层

    什么是Socket?

    ​ Socket: 用于描述IP地址和端口, 可以用来实现不同虚拟机或者计算机之间的通信, 在Internet上的主机一般运行了多个服务软件, 每种服务打开一个Socket, 并绑定到一个端口上, 不同端口对应不同的服务.

    IO流

    IO流是用来处理设备之间传输数据,下载文件,上传文件。

    ​ 按照流向分,可以分为输入流和输出流

    ​ 按照操作单元分,可以分为字节流和字符流

    ​ 按照角色划分为节点流和处理流

    输入流:程序从输入流中读取数据,

    输出流:程序向输出流写入数据。程序将数据输出到外界。

    BIO,NIO,AIO的区别?

    • BIO:block IO同步阻塞式IO,传统IO,并发处理能力低
    • NIO:Non IO同步非阻塞IO,客户端和服务器通过Channel(通道)通讯,实现了多路复用
    • AIO:Asynchronous IO是NO的升级,NIO2,实现了异步非阻塞IO,异步IO的操作基于事件和回调机制。

    四.网络协议

    ​ 网络协议:计算机网络要有条不紊的交换数据, 就必须遵守一些实现约定好的规则, 这些规则被称为网络协议.

    ​ 网络层协议: IP协议, ICMP协议, ARP协议, RARP协议

    ​ 传输层协议: TCP协议, UDP协会

    ​ 应用层协议: FTP, TeInet, SMTP, HTTP, RIP, NFS, DNS

    什么是HTTP, HTTP与HTTPS的区别?

    ​ HTTP:(Hyper Text Transfer Protocol 超文本传输协议) 端口80, 运行在TCP上, 明文传输, 短连接, 客户端与服务端都无法验证对方身份

    ​ HTTPS: 端口443, 添加了加密和认证机制的HTTP

    Session, Cookie, Token的区别

    ​ HTTP协议本身是无状态的, 即服务器无法判断用户身份

    ​ cookie: web服务器保存在用户浏览器上的小文件(key-value格式), 包含用户相关信息.

    ​ session: 浏览器和服务器会话过程中, 服务器分配的一块存储空间.存放在服务器上

    ​ token: 服务器生成的一串字符串, 作为客户端请求的一个令牌, 第一次登陆后, 服务器生成一个token将此token返回给客户端, 客户端请求携带token请求数据即可. 适用于前后端分离项目.

    五.Redis

    什么是Redis?为什么要用redis?

    ​ Redis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。

    ​ 高性能和高并发:直接操作内存,速度快。数据结构简单,对数据操作也简单。采用单线程,不存在加锁释放锁的操作,不会导致死锁。能接受的请求远大于直接访问数据库。

    Redis支持的数据类型有哪些?

    ​ Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串(String)、列表(List)、集合(Set)、散列表(Hash)(内部是HashMap,成员较少以一维数组存储,成员增多转成HashMap)、有序集合(zset)。

    Redis的优缺点有哪些?

    优点:读写性能优异,支持数据持久化,支持事务,数据结构丰富,支持主从复制

    缺点:

    ​ 数据库容量收到物理内存的限制。

    ​ Redis不具备自动容错和恢复功能

    ​ 较难支持在线扩容

    什么是Redis持久化?Redis有哪些持久化方式?

    持久化:把内存中的数据写入到磁盘中,放置服务器宕机导致内存数据丢失。

    方式:

    RDB(默认Redis DataBase):把当前数据生成快照保存在硬盘
    AOF(Append-only file):记录每次对数据的操作到硬盘上

    手动持久化命令:

    save

    • save 和 bgsave命令都可以手动触发RDB持久化
    • save 命令会阻塞 Redis 服务,直到 RDB 持久化完成。存储大量数据时,会造成较长时间的阻塞。

    bgsave

    • Redis 进程会执行 fork操作创建子进程,RDB 持久化由子进程负责,不会阻塞 Redis 服务进程,Redis 服务的阻塞只发生在 fork 阶段。

    Redis 会自动触发 RDB 持久化,自动触发的 RDB 持久化都采用 bgsave 的方式

    • 配置文件中设置 save 的相关配置,如 save m n,表示在 m 秒被修改过 n 次,自动触发 bgsave 操作。
    • 从节点做全量复制时,主节点自动进行 bgsave 操作, 并把生成的 RDB文件发送给从节点。
    • 执行 debug reload 命令时也会触发 bgsave 操作。
    • 执行 shut down 操作时,如果没有开启 AOF 持久化也会自动触发 bgsave 操作。

    比较:

    ​ AOF 把每次写命令追加写入日志中,解决了数据持久化的实时性,主流的 Redis 持久化方式。
    AOF 文件比 RDB 更新频率高,优先使用aof还原数据
    ​ AOF 比 RDB 更安全
    RDB 恢复数据速度比 AOF 的快,适合备份,全量复制,灾难恢复等。

    AOF 持久化配置

    • appendonly yes # appendonly 改为 yes,开启 AOF
    • appendfilename “appendonly.aof” # AOF 文件的名字
    • appendfsync everysec # AOF 文件的写入方式, everysec 每秒将缓存区内容写入文件 默认的写入方式
    • auto-aof-rewrite-percentage 100 # 运行 AOF重写时 AOF 文件大小的增长率的最小值
    • auto-aof-rewrite-min-size 64mb # 运行 AOF 重写时文件大小的最小值。

    缓存异常

    • 缓存雪崩:

    ​ 缓存雪崩指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉

    ​ 解决方案:

    ​ 1.缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。

    ​ 2.给每一个缓存数据增加相应的缓存标记,记录缓存的是否失效,如果缓存标记失效,则更新数据缓存

    ​ 3.一般并发量不是特别多的时候,使用最多的解决方案是加锁排队

    • 缓存穿透:

    ​ 缓存穿透值缓存和数据库中都没有的数据,导致所有请求都落到数据库上

    ​ 解决方案:

    ​ 1.接口层增加校验

    ​ 2…对一定不存在的key进行过滤,可以把所有可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。

    • 缓存击穿:

    ​ 缓存中没有但数据库中有的数据,由于并发用户多,同时读取缓存未读取到数据,同时去数据库读取数据,数据库压力过大。

    ​ 解决方案:

    ​ 1.热点数据永不过期

    ​ 2.加互斥锁

    • 缓存预热:

    ​ 相关缓存数据直接加载到缓存系统

    ​ 解决方案:

    ​ 1.定时缓存刷新

    ​ 2.数据量不大,可以项目启动自动加载

    • 缓存降级:

    ​ 服务出现问题,不影响核心服务,对其他服务进行降级处理。

    Redis存储过程

    1. 首先建立与Redis服务器端的连接
    2. 用set方法将字符串存放到redis中
    3. set可以用覆盖的方式修改已存在的值
    4. get方法可以读取存入的值,delete方法可以存储存入的值

    Redis集群

    六.Nginx

    什么是Nginx?

    ​ Nginx是一个web服务器和方向代理服务器,用于HTTPHTTPSSMTPPOP3IMAP协议。

    Nginx的优点有哪些?

    ​ 占内存小,可实现高并发连接,处理响应快

    ​ 可实现http服务器、虚拟主机、方向代理、负载均衡

    ​ Nginx配置简单

    ​ Nginx内置的健康检查功能

    Nginx处理请求?

    ​ nginx接收一个请求后,首先由listen和server_name指令匹配server模块,再匹配server模块里的location,location就是实际地址

    server {            					# 第一个Server区块开始,表示一个独立的虚拟主机站点
        listen       80;      				# 提供服务的端口,默认80
        server_name  localhost;       		# 提供服务的域名主机名
        location / {            			# 第一个location区块开始
            root   html;       				# 站点的根目录,相当于Nginx的安装目录
            index  index.html index.htm;     # 默认的首页文件,多个用空格分开
             }          					# 第一个location区块结果
    

    正向代理和反向代理是什么?

    ​ 1.正向代理:一个人发送请求直接到达目标的服务器

    ​ 2.反向代理:请求统一被Nginx接收,nginx反向代理服务器接收到后,按照一定规则分发给后端的业务处理服务器进行处理

    使用反向代理服务器的优点是什么?

    ​ 可以隐藏源服务器的存在和特征,充当互联网云和web服务器之间的中间层

    反向代理负载均衡是什么?

    ​ 单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台服务器负载高宕机而某台服务器闲置的情况。

    负载均衡算法怎么实现?策略有哪些?

    ​ 当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。

    策略:

    ​ 1.轮询:每个请求按时间顺序逐一分配到不同的后端服务器

    upstream backserver { 
        server 192.168.0.12; 
        server 192.168.0.13; 
    } 
    

    ​ 2.权重:weight值越大分配到的访问率越高。

    upstream backserver { 
        server 192.168.0.12 weight=2; 
        server 192.168.0.13 weight=8; 
    } 
    

    ​ 3.ip_hash(IP绑定)每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,有效解决动态网页存在的session共享问题

    upstream backserver { 
        ip_hash; 
        server 192.168.0.12:88; 
        server 192.168.0.13:80; 
    } 
    

    ​ 4.fair

    ​ 5.url哈希:地址绑定

    七.jdk1.8特性

    1. Iterator迭代器接口中的forEach()方法:将遍历逻辑与业务逻辑分离
      • Iterator迭代器是一个对象,工作内容是遍历并选择序列中的对象。可以实现对容器的遍历
      • 迭代器的使用:使用Iterator()方法返回一个Iterator,通过next()返回第一个元素。用hasNext判断容器中是否还有其他元素。
    2. 接口中可以有静态方法和默认方法
    3. java Stream API: 集合批量数据操作
    4. 新的时间Api: java.time,简化java中使用时间的过程

    八.Spring框架

    什么是spring

    ​ 轻量级的控制反转,面向切面的容器框架

    ​ 轻量级的Java开发框架,为了解决企业级应用开发的业务逻辑层和其他层的耦合问题

    ​ spring功能底层依赖它的核心特性:依赖注入(DI)和面向切面编程(AOP)

    通过依赖注入和面向接口实现松耦合,基于切面和惯例进行声明式编程,通过切面和模板减少样板式代码。

    Spring框架的核心

    ​ IOC(控制反转)和AOP(面向切面)和DI(依赖注入)

    Spring模块

    ​ spring core:提供了框架的基本组成部分,包括IOC和DI功能

    ​ spring beans: 提供了BeanFactory,Spring将管理对象称为Bean

    ​ spring context: 提供了框架式的对象访问方法

    ​ spring jdbc: 提供了一个JDBC的抽象层,简化JDBC

    ​ spring aop: 提供了面向切面的编程实现,可以自定义拦截器,切点等

    ​ spring Web : 提供了针对web开发的集成特性

    Spring框架中用到了哪些设计模式?

    ​ 1.工厂模式: BeanFactory,用来创建简单对象的实例

    ​ 2.单例模式: Bean默认为单例模式

    ​ 3.代理模式: Spring的AOP功能

    Spring常用注解:

    • 声明bean的注解
      • @Component
      • @Service
      • @Respository
      • @Controller
    • 注入bean的注解
      • @Autowired(Spring提供),通过byType注入
      • @Resource(Java自带),默认通过byName注入
      • 可以配合使用@Qualifier注解指定某个具体名称的bean
    • Java配置类相关注解
      • @Configuration:声明当前类是配置类,相当于xml形式的Spring配置
      • @Bean:注解在方法上,声明当前方法的返回值是一个bean
      • @Configuration:声明当前类是配置类,内部组合了@Component注解
      • @ComponentScan:用于对Component进行扫描
    • 事务注解
      • @Transaction
    • mvc常用注解
      • @Controller
      • @RequestMapping:用于映射web请求,包括访问路径和参数
      • @ResponseBody:将方法到的返回值放在response的body内,将数据返回给客户端,方法上没有该注解,会将方法的返回值封装为ModulAndView对象。
      • @RequestBody,用于接收JSON类型的数据
      • @PathVariable用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。
      • @RestController:结合 @ResponseBody 和 @Controller 注解

    Spring框架的好处

    ​ 1.轻量:Spring 是轻量的,基本的版本大约2MB。

    ​ 2.控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。

    ​ 3.面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。

    ​ 4.容器:Spring 包含并管理应用中对象的生命周期和配置。

    ​ 5.MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。

    ​ 6.事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。

    ​ 7.异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。

    什么是Spring IOC容器?

    ​ Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。

    IOC的理解?

    • Spring IOC 负责创建对象,管理对象(通过将原本程序中手动创建对象的控制权,交由Spring框架来管理
    • IOC的好处是很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。

    ApplicationContext通常的实现是什么?

    • FileSystemXmlApplicationContext :此容器从一个XML文件中加载beans的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数。
    • ClassPathXmlApplicationContext:此容器也从一个XML文件中加载beans的定义,这里,你需要正确设置classpath因为这个容器将在classpath里找bean配置。
    • WebXmlApplicationContext:此容器加载一个XML文件,此文件定义了一个WEB应用的所有bean。

    DI(依赖注入方式)

    ​ 构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。

    ​ Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。

    ​ 接口注入:对于接口注入来说,如果被注入对象想要 IoC 容器为其注入依赖对象,就必须实现某个接口,这个接口提供了一个方法,用来为其注入依赖对象。但是从注入方式的使用来说,接口注入是现在不提倡的一种方式,基本处于"退役"状态,因为它强制被注入实现对象不必要的依赖。

    AOP 的理解

    • AOP:Aspect Oriented Programming 面向切面编程
    • 将与业务无关的,但对多个对象产生公共的影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被称为切面(Accept)
    • AOP的实现在于代理模式,在程序运行的时候通过动态代理或者CGLIB代理的方式织入到核心业务中。
    • 切入点(Pointcut):指在哪些类的哪些方法上面织入切面
    • 通知(Advice):在方法执行的什么时候做什么增强
    • 切面(Accept):切入点加通知,在什么地方,什么时候,做了什么增强
    • 织入(Weaving):把切面加入到目标对象中,并创建出目标对象对应的代理对象

    什么是Spring beans?

    ​ Spring beans 是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。比如,以XML文件中 的形式定义。

    ​ 一个Spring Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个bean,它的生命周期详情及它的依赖。

    怎么给Spring容器提供配置元数据?

    ​ XML配置文件。

    ​ 基于注解的配置。

    ​ 基于java的配置。

    Spring框架中bean的生命周期?

    • Spring容器 从XML 文件中读取bean的定义,并实例化bean。
    • Spring根据bean的定义填充所有的属性。
    • 如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方法。
    • 如果Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。
    • 如果有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。
    • 如果bean实现IntializingBean了,调用它的afterPropertySet方法,如果bean声明了初始化方法,调用此初始化方法。
    • 如果有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。
    • 如果bean实现了 DisposableBean,它将调用destroy()方法。

    解释不同方式的自动装配?

    • no:默认的方式是不进行自动装配,通过显式设置ref 属性来进行装配。
    • byName:通过参数名 自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byname,之后容器试图匹配、装配和该bean的属性具有相同名字的bean。
    • byType::通过参数类型自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byType,之后容器试图匹配、装配和该bean的属性具有相同类型的bean。如果有多个bean符合条件,则抛出错误。
    • constructor:这个方式类似于byType, 但是要提供给构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常。
    • autodetect:首先尝试使用constructor来自动装配,如果无法工作,则使用byType方式。

    自动装配的局限性

    • 重写: 你仍需用 和 配置来定义依赖,意味着总要重写自动装配。
    • 基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串,和类。
    • 模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。

    Spring MVC概述?

    ​ Spring提供的web框架。

    ​ 主要由DispatcherServlet,处理映射器,处理器(控制器),视图解析器,视图组成。

    核心

    ​ 处理器映射:选择使用哪个处理器来处理请求

    ​ 视图解析器:选择结果应该如何渲染

    运行原理

    ​ 1.Http请求:客户提交请求到DispatcherServlet

    ​ 2.寻找处理器:DispatcherServlet控制器查询一个或多个handlerMapping,找到处理的Controller

    ​ 3.调用处理器:DispatcherServlet请求提交到Controller

    ​ 4.调用业务处理和返回结果:Controller调用业务处理逻辑后,返回ModelAndView

    ​ 5.处理视图映射并返回模型:DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。

    ​ 6.Http响应:视图负责将结果显示到客户端。

    SpringBoot

    SpringBoot是什么?

    精简了配置的Spring,使用约定优于配置的原则

    SpringBoot启动

    • java-jar方式启动
    • spring-boot-plugin方式启动,命令行进入项目所在目录,输入命令mvn spring-boot:run启动

    SpringBoot优缺点,特性,常用注解

    优点

    • 简化了依赖的管理,父依赖可以对几乎所有引入的依赖进行版本的统一管理
    • 简化部署,省去了打包部署的过程
    • 简化监控,

    特性

    • 自动配置
      • 整合MyBatis时,无需自己配置MapperScannerConfigurer即可实现映射器的注入

    常用注解

    • @SpringBootApplication:包含Configuration,@EnableAutoConfiguration,@ComponentScan,用于主类上
    • @RestController:包含@Controller,@ResponseBody
    • @Configuration:Bean配置的信息源
    • @Bean:放在方法上面,产生一个bean交给Spring管理
    • @ConfigurationProperties:读取配置文件中的配置信息。

    SpringBoot依赖

    • 父依赖:spring-boot-starter-parent
    • web依赖:spring-boot-starter-web
    • 测试环境相关依赖:spring-boot-starter-test

    SpringBoot整合RabbitMQ

    • 引入依赖spring-cloud-stream-binder-rabbit
    • 配置与RabbitMQ的服务器的连接
    • 注入RabbitTemplate的类的实例
    • 使用RabbitTemplate完成RabbitMQ客户端与服务器的交互

    九.行业分类

    传统软件行业(传统项目)

    • OA办公自动化系统
    • ERP企业资源管理系统
    • CRM客户关系管理系统
    • CMS内容管理系统
      • App信息管理系统
      • 宿舍管理系统…

    互联网软件(互联网项目)

    • 电商平台(天猫,京东…)
    • 社交平台(QQ,微信…)
    • 网络游戏(LOL…)
    • 短视频平台
    • 金融类平台
    • 保险
    • 医疗

    十.架构

    单体式架构:

    ​ 部署单一

    ​ 技术单一

    ​ 系统错误隔离性差

    ​ 系统可扩展性差

    微服务架构

    ​ 项目复杂度降低

    ​ 团队界限明确

    ​ 扩展灵活,并发承受能力强

    ​ 运维成本较高,复杂性提高。

    单体式架构项目提升性能较为困难,需要对整体模块进行提升,较为困难

    微服务架构拆分成了独立的模块,扩展较为简单。

    设计原则:

    ​ 围绕业务切分(粗粒度拆分)

    ​ 单一职责

    ​ 谁创建,谁负责

    微服务常见术语

    ​ Provider和Consumer

    ​ Provider:服务提供者,提供数据服务,(部分Service和DAO的集合)

    ​ Consumer:服务消费者,消费数据服务(Controller和部分Service集合)

    ​ RPC和Restful

    ​ RPC:远程过程调用(远程过程调用的形式/(自己的协议)来实现数据传输)

    ​ Resuful:一种HTTP协议风格(GET:查询;POST:新增;PUT:修改;DELETE:删除)

    ​ 注册中心(为了解决不同服务,分布式项目之间的地址获取问题)

    分布式系统:

    ​ 分开部署

    ​ 问题:

    ​ 分布式session

    ​ 分布式锁

    ​ 分布式事务

    微服务系统:

    ​ 对项目业务单元的拆分(细粒度的拆分)

    十一.Dubbo

    什么是Dubbo?

    ​ 高性能,轻量级的Java RPC框架,提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,服务自动注册和发现。

    ​ Dubbo不是完整的微服务解决方案,只能说是基于Dubbo可以有一套微服务解决方案。

    Dubbo中的角色节点

    Provider:暴露服务的服务提供方

    Consumer:调用远程服务的服务消费方

    Registry:服务注册与发现的注册中心(推荐使用zookeeper)

    Monitor:统计服务的调用次数和调用时间的监控中心

    Container:服务运行服务器

    Dubbo配置方式:

    ​ 1.Spring配置方式

    ​ 2.Java API配置方式

    service:服务配置

    reference:引用配置

    protocol:协议配置

    application:应用配置

    module:模块配置

    registry:注册中心配置

    monitor:监控中心配置

    provider:提供方配置

    consumer:消费方配置

    method:方法配置

    argument:参数配置

    Dubbo优点?

    ​ 1.面向接口代理的高性能RPC调用

    ​ 2.智能负载均衡

    ​ 3.服务自动注册与发现

    ​ 4.高度可扩展能力

    ​ 5.运行期流量调度

    ​ 6.可视化的服务治理与运维

    十二.Spring Cloud

    什么是Spring Cloud?

    ​ Spring Cloud是一套完整的微服务解决方案。

    ​ Spring公司基于Netflix(网飞)开源的一套微服务组件来进行Spring Cloud开发。

    ​ Spring Boot是为了更好的服务微服务项目。

    十三.MyBatis

    MyBatis配置文件及其作用?

    1. properties:引入数据库属性文件
    2. setting:MyBatis配置文件
    3. typeAliases:别名配置
    4. environments:配置运行环境
    5. transactionManager:事务管理器
    6. DataSource:配置数据源:连接池
    7. mappers:引入mapper映射文件

    十四.Java web

    Servlet

    Servlet:(Server Applet)运行在服务器上的一个小程序,用来处理服务器请求

    jsp和Servlet有什么区别?

    jsp善于表现于页面展示,Servlet善于逻辑控制

    jsp是Servlet的简化,Servlet是一个完整的Java类。

    jsp的4种作用域?

    • page
    • request
    • session
    • application

    常见异常类型

    • NullPointException
    • SQLException
    • IndexOutOfBoundsException
    • NumberFormatException
    • FileNotFoundException
    • IOException
    • ClassCastException
    • ArithmeticException

    十五.MySQL

    什么是索引

    • 索引是一种数据结构,帮助我们快速检索数据库中的数据。

    索引数据结构?

    Hash索引和B+Tree索引

    Hash索引适合等值查询,无法进行范围查询。

    Hash索引无法利用索引完成排序。

    Hash索引不支持多列联合索引的最左侧匹配规则

    数据库存储过程

    大数据的四V和三高

    • 大数据的典型特征
      • 高可扩
      • 高性能
      • 高并发
    • 四V
      • Volume:数据体量大
      • Variety:数据类型繁多
      • Value:价值密度低
      • Velocity:处理速度快

    十六.MQ

    什么是消息中间件?

    ​ 消息队列是异步rpc的主要手段之一。

    什么是消息队列

    ​ 消息队列是一种可以存储,传递消息的容器,常用语分布式系统中减轻服务器压力,有顺序

    MQ的好处

    ​ 通过异步处理提高系统性能和削峰,降低耦合性

    流行的MQ

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ

    ActiveMQ的通讯方式

    • publish(发布)-subscribe(订阅)发布-订阅方式
    • point-to-point(点对点方式)

    RPC是什么?

    • rpc:远程过程调用

    RPC核心

    • 远程提供者需要以某种形式服务调用相关的信息,包括但不限于服务接口定义,数据结构,或者中间件的服务定义文件。
    • 远程代理对象:服务调用者用的服务实际上是远程服务的本地代理。
    • 通信:rpc框架与具体的协议无关
    • 序列化:远程通信,需要将对象转换为二进制流进行传输。

    分布式

    什么是分布式事务?常见的解决方案

    • 分布式事务:将一个操作中涉及到的所有数据库实例的数据库操作捆绑为一个整体进行管理,执行成功,操作中的所有就数据库实例的数据库操作均被提交,遇到错误且必须取消或回滚,所有涉及到的数据库操作都需恢复到操作前的状态,所有数据均清除。

    项目中Redis实现分布式锁

    • 验证前端的重复请求,通过redis过滤。每次请求先在redis中检索有没有这个key,来验证是否一定时间内重复提交。
    • 秒杀系统,Redis是单线程,防止出现数据库爆破。
    • 全局增量ID生成
    展开全文
  • 初入IT行业从事JAVA初级开发工程师

    千次阅读 2018-06-11 18:15:08
    作为一个JAVA初级工程师需要什么,通过朋友得推荐,来到了一个还算不错得公司,但是一直没机会接触项目,现在应该做些什么,有没有一些大神推荐一下学习得历程 ,和方向。 本人性格外向,喜欢音乐,喜欢沟通,以后...
  • 关注我,让我们一起学习java.
  • java初级开发工程师面试题(2019.8)

    万次阅读 多人点赞 2019-08-22 11:58:24
    期间也请教过一些前辈(各个行业),软件开发的人员缺口并没有前几年那么大了,并且现在的企业招人要求也高了(至少以我现在的技术栈还差些),各个行业的行情都不是特别景气。当然,对于优秀的人说,这些都是无关...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 663
精华内容 265
关键字:

java初级开发工程师

java 订阅