八股_java基础
概念1.说说java的特点面向对象 平台无关性:一次编译到处运行 内存管理:自动管理内存和回收不再使用的对象 2.java的优势和劣势是什么?优势: 跨平台,一次编译到处运行 生态丰富,有各种框架和类库 内存管理,垃圾自动回收 严格的面向对象,复用性和可维护性优秀 天然支持多线程,方便并发编程 安全性方面:java有安全模型,比如支持沙箱机制,适合网络编程 稳定性方面:企业级应用长期使用,版本更新比较注重向后兼容 劣势 内存占用大,jvm本身也占用内存 性能开销较c++,Rust大 执行效率较慢,比如微服务启动时间比go慢 语法繁琐,开发效率比较低 3.Java为什么是跨平台的?因为java运行在jvm上,jvm会将编译后的class文件根据平台的不同翻译成不同平台对应操作系统的机器码。 因此不同平台需要安装各自版本的jvm才能运行java程序。 4.JVM,JDK,JRE三者的关系jdk包括jre,jre包括jvm。 5.为什么java解释和编译都有?Java 同时采用 解释执行 和 编译执行(JIT 编译)的结合方式,主要是为了在 启动速度 和...
苍穹外卖复盘(待完善)
JWT简介JWT,全称json web tokens, 用于对应用程序上的用户进行身份认证。 JWT的结构JWT由三部分组成,用 . 分隔。像这样 Header.Payload.Signature Header:是一个json对象,标识这个令牌(token)的类型(type)和签名的算法,算法默认是HMAC SHA256(写成HS256),例如: 1234{ "typ":"JWT", "alg":"HS256"} 最后,将上面的 JSON 对象使用 Base64URL 算法(详见后文)转成字符串。 Payload:也是一个json对象,用于存放实际需要传递的数据。JWT提供了7个官方字段供选用。 iss(issuer):签发人 exp(expiration time):过期时间 sub(subject):主题 aud(audience):受众 nbf(Not Before) : 生效时间 iat(Issued At) : 签发时间 jti(JWT ID) :...
设计模式
面向对象设计原则 单一职责原则(SRP)一个类应该仅有一个引起它变化的原因。(职责划分明确,避免类承担过多功能导致高耦合) 开闭原则(OCP)软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。(通过抽象和多态实现功能扩展,而非直接修改原有代码) 里氏替换原则(LSP)所有引用基类的地方必须能透明地使用其子类的对象。(子类必须能够完全替代父类,不破坏原有功能逻辑) 依赖倒转原则(DIP)高层模块不应该依赖低层模块,两者都应该依赖抽象;抽象不应该依赖细节,细节应该依赖抽象。(通过接口 / 抽象类解耦实现类,降低模块间直接依赖) 接口隔离原则(ISP)客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。(细化接口设计,避免胖接口导致的强制实现冗余方法) 合成复用原则(CRP)尽量使用对象组合 /...
苍穹外卖
微信登录功能实现采用HTTPS 调用1GET https://api.weixin.qq.com/sns/jscode2session 请求参数 属性 类型 必填 说明 appid string 是 小程序 appId secret string 是 小程序 appSecret js_code string 是 登录时获取的 code,可通过wx.login获取 grant_type string 是 授权类型,此处只需填写 authorization_code 返回参数 属性 类型 说明 session_key string 会话密钥 unionid string 用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台帐号下会返回,详见 UnionID...
SQL
...
JavaWeb
socket我们可以通过Socket技术(它是计算机之间进行通信的一种约定或一种方式),实现两台计算机之间的通信,Socket也被翻译为套接字,是操作系统底层提供的一项通信技术,它支持TCP和UDP。而Java就对Socket底层支持进行了一套完整的封装,我们可以通过Java来轻松实现Socket通信。 要实现Socket通信,我们必须创建一个数据发送者和一个数据接收者,也就是客户端和服务端,我们需要提前启动服务端,来等待客户端的连接,而客户端只需要随时启动去连接服务端即可,它们默认采用的是TCP协议进行连接。 socket实现双向通信(Tcp)主线程用于发送消息,子线程用于接收消息。 服务端: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354package com.dmw.socket;import java.io.*;import java.net.*;public class Server { public...
JS代理和模块
代理(proxy) 它可以理解为进行某个操作前先拦截统一操作后再执行。借助 Proxy,你可以在不直接修改目标对象的前提下,对其行为进行定制。 1234567891011121314151617181920212223const target = { message1: "hello", message2: "everyone"};const handler = { get(target, prop, receiver) { return `拦截获取属性: ${prop}, 值为: ${target[prop]}`; }, set(target, prop, value, receiver) { console.log(`拦截设置属性: ${prop} 为 ${value}`); target[prop] = value; ...
JS异步编程
1.同步和异步同步即按顺序执行。 异步即独立执行,异步就是从主线程发射一个子线程来完成任务。 就像这样: 2.回调函数js从设计之初就是只支持单线程的语言,如何做到异步编程呢?js使用回调函数来解决这个问题。 回调函数就是一个函数,它是在我们启动一个异步任务的时候就告诉它:等你完成了这个任务之后要干什么。这样一来主线程几乎不用关心异步任务的状态了,他自己会善始善终。 常用的异步操作实现方式: setTimeout定时任务12345678910111213141516171819<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>dmw</title> </head><body><p>回调函数等待 3 秒后执行。</p><p id="demo"></p><script>const print = () =>...
JavaScript_ES6
被js的各种语法困惑了很久,至今未能流程写出一个完整的js程序,痛心疾首,决定认真学一遍ES6语法。 本次学习了6部分内容,分别是: 1.变量和常量1234567891011121314//1.变量和常量let count=0console.log(count)const URL = 'https://2025521.xyz'console.log(URL)// URL = 'ddd'//独立作用域{ let num1=1; console.log(num1);}// console.log(num1) 2.模板字符串12345//2.模板字符串const str1 = 'abc'const str2 = 'def'const str3 = `${str1 + str2}`console.log(str3)...
Spring
数据库框架整合学习了Spring之后,我们已经了解如何将一个类作为Bean交由IoC容器管理,这样,我们就可以通过更方便的方式来使用Mybatis框架,我们可以直接把SqlSessionFactory、Mapper交给Spring进行管理,并且可以通过注入的方式快速地使用它们。 因此,我们要学习一下如何将Mybatis与Spring进行整合,那么首先,我们需要在之前知识的基础上继续深化学习。 了解数据源在之前,我们如果需要创建一个JDBC的连接,那么必须使用DriverManager.getConnection()来创建连接,连接建立后,我们才可以进行数据库操作。而学习了Mybatis之后,我们就不用再去使用DriverManager为我们提供连接对象,而是直接使用Mybatis为我们提供的SqlSessionFactory工具类来获取对应的SqlSession通过会话对象去操作数据库。 那么,它到底是如何封装JDBC的呢?我们可以试着来猜想一下,会不会是Mybatis每次都是帮助我们调用DriverManager来实现的数据库连接创建?我们可以看看Mybatis的源码: ...




