前言在实验室的带领下,我有幸投身于聊城市排污权交易工作管理系统的后端开发项目。初涉真实项目开发领域,我在编码过程中,既察觉到自身代码风格与实际工程要求存在的差距,又收获了珍贵的工程实战经验。接下来,我将从团队协作和代码实践这两个角度,对这段经历展开总结。
一、团队协作实践1. Git协作流程规范化在独立开发中,我常采用单分支提交模式。参与真实项目后,深刻认识到版本控制的重要性:
提交规范:遵循规范提交,Commit Message 应遵循 Conventional commits 规范
规范化的提交信息使代码审查效率提升,并能快速定位功能变更历史。
Git 实践规范分享Git 有许多优势,目前是许多团队(唯一使用的代码版本控制软件,为了让大家更加方便、规范地使用 Gi - 掘金 git规范参考,每次的commit应该是可以独立完整运行的版本
2. 工程化开发工具使用coding工具
项目协同
代码托管
持续集成
持续部署每次合并新分支到主分支能够自动检测分析代码,并且部署相应环境,前端能够拿到对应的swagger接口,进行调试
二、代码开发实践1. 框架应用在此之前,使 ...
多线程环境下,确保数据一致性是一个至关重要的问题。其中一个常见的挑战是防止多个线程同时对共享资源进行修改,这可能导致数据竞争、不一致或崩溃。为了应对这一问题,Java提供了几种机制来实现互斥锁(Mutual Exclusion),其中最常用的之一就是java.util.concurrent.atomic.Atomic locks和synchronized关键字。
什么是互斥锁?互斥锁的英文是 mutual exclusion,字面意思是“相互排除”,其核心思想就是在共享资源被修改时,禁止其他线程继续操作。这种机制可以确保只有单个线程在执行某个操作期间才能获得锁,其他线程必须等待直到当前线程释放锁。
互斥锁广泛应用于以下场景:
用户注册系统:防止多个用户同时尝试注册相同用户名
文件操作:防止多个程序对同一文件进行修改
数据库操作:确保数据完整性
Java中的synchronized关键字Java语言中,synchronized是一个关键字,它用于实现互斥锁。当一个方法被标记为synchronized时,Java会自动在该方法开始和结束的地方创建并管理一个互斥锁。这样,任何尝试同时调用 ...
动态代理:类加载器,上下文加载器,代理模式,是一种结构性设计模式,通过创建一个代理对象来控制对原有对象的访问。一般的,代理模式中有两个角色,代理角色和真实角色。代理类负责代理真实类,为真实类提供访问控制的功能,真实类其实是完成具体的业务逻辑。
所以,代理的主要目的就是
保护目标对象
增强目标对象
实现代理一般有两种实现方式:静态代理 和动态代理。
静态代理在编译时,代理类已经被确定,需要事先手写一个代理类。
//创建接口规范真实类的行为public interface Player{ void loadVideo(String filename);}//创建真实类实现接口public class VPlayer implements Player { @Override public void loadVideo(String filename) { System.out.println("加载MP4视频文件:"+filename); }}//创建静态代理类,将真实 ...
java
未读工厂设计模式
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。这满足创建型模式中所要求的“创建与使用相分离”的特点。
简单工厂模式又称 静态工厂模式
创建一个接口
多个实现类实现这个接口
创建简单工厂
client通过调用静态方法根据内置的匹配机制返回接口的实现类
public class Lamborghini implements Car{ @Override public void name() { System.out.println("兰博基尼"); }}public class Porsche implements Car{ @Override public void name() { System.out.println("保时捷"); }}//工厂类public class CarFactory { //创建产品的方法 ...
cookie session token JWT 略解首先要搞清以下三种
认证
验证当前用户的身份
授权
授权第三方应用访问该用户的某些资源
实现授权的方式有 cookie session token OAuth
凭证
实现认证和授权的前提
什么是cookie
http无状态的协议(对应事务处理没有任何记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息)所以说,服务器无法分辨上一次的请求发送者和这一次的请求发送者是不是同一个人
cookie存储在客户端 他会在浏览器下次向同意服务器再次发起请求时携带并发送到服务器上
不可跨域 每个cookie都会绑定一个域名 无法在别的域名下使用 一二级域名之间可以使用
cookie中包含了许多属性
name=value 键值对
domain 域名
path 制定cookie在哪个路径
等等
什么是session
储存在服务端
记录服务器和客户端会话状态的机制
基于cookie实现
浏览器第一次向服务器发送请求时,服务器会创建一个session并返回一个sessionid 第二次请求时 需要携带co ...
java
未读理解Java中的SPI机制简介spi,是jdk内置的一种服务提供发现机制,可以用来扩展或者替换组件。比如java.sql.Driver接口,其他不同的厂商可以对同一接口进行不同的实现。
SPI与API区别:
API是调用并用于实现目标的类接口方法等的描述
SPI是扩展和实现以实现目标类接口方法等的描述
一般来说,当服务厂商提供了一中接口的实现之后,需要在classpath下的META-INF/services目录中创建一个以 服务接口 命名的文件 这个文件中的内容就是这个接口的具体实现类 。当其他的类调用调用到这个服务的时候,就可以查找这个jar包下的META-INF/services/接口名 文件的中的具体实现类的类名 可以根据这个类名进行加载实例化 就可以调用到该服务。在jdk中查找该服务的工具类是java.util.ServiceLoader
如何设计一个属于自己的SPI系统实现SPI虽然简单,但是如果我们想要定制多个不同的接口实现类,就没办法在框架中,指定使用哪一个了。所以可以自己定义SPI机制的实现。
定义一个接口
完成该接口的多个实现
在 ...
新生娱乐赛题解
兹所呈现之本题解,仅为个人针对此题所持观点,其既非官方所颁布之标准答案,亦未必为最优之解法。若阁下持有更佳之思路,诚邀参与讨论。
需特此说明者,本题所标注之难度,乃基于本套试题所设定之相对难度,并非该题实际固有之难度层级。
再者,虑及多数人惯常使用之编程语言状况,本套题解特选用 C 语言予以编写。兹C水平如狗啃屎,若题解之中存在讹误之处,敬祈不吝指正。
废话不多说,开始看题:
Medium 7-5 字母直方图题目:读入一个字符串,对其中的字母按照不区分大小写的出现次数输出一个星号组成的直方图。
输入格式:一行,一个不超过100字节的字符串,可能含有空格。
输出格式:若干行,每行一个大写字母,空格后接着一排星号(*字符),星号数量与该字母的出现次数相同。为了保证图形的美观,只需要输出至少出现了2次的字母。如果字符串包含多个字母,那么按照字母首次出现的顺序输出。
输入样例:在这里给出一组输入。例如:
Anika, buy a banana.
输出样例:在这里给出相应的输出。例如:
A ******N ***B **
解析:常规思路:遍历一遍字符串,使用有顺序的Map将 ...
微信小程序开发技术支持前端:html、css、js、组件库
部署:linux操作系统、docker(可选)、后端语言
docker主流的部署工具 可以参考主页的docker文章学习
部署高效便捷
开发工具微信开发者工具 或者 hbuilder(一次编写多个小程序 微信小程序,支付宝小程序、百度小程序等等)
微信开发者工具需要使用微信前端语法 学习成本较低 可以更好配置组件库进行使用
部署准备根据微信官方的要求 从小程序发出的 请求需要进行合法校验 包括以下几个步骤
服务器
购买服务器后 使用本地连接工具连接远程服务器
Xshell、finalShell
服务器商家
腾讯云 三个月免费使用
阿里云 一个月免费使用
阿里云 学生认证新用户 99 一年
域名
购买域名 可以与不同于服务器厂家 哪家便宜买哪个
解析到自己的服务器
推荐华为云 优惠力度大
备案
将域名备案到自己的服务器
时间周期 20天左右
ssl证书 (http->https)
阿里云用户测试证书 前三个月免费
java后端可以将证书直接安装带程序中 配置简单
nginx配置 (web服务器 ...
Docker学习初始Docker
开源应用容器引擎
启动 systemctl start docker
查看状态 systemctl status docker
镜像相关命令
查看镜像
docker images[-q 查看镜像ID]
搜索镜像
docker search
下载镜像
docker pull
删除
docker rmi
容器相关命令
查看容器
docker ps 仅仅查看运行中的容器
-a 查看所有历史
创建容器
docker run
-i 保持运行
-t 分配终端
-d 后台运行 需要执行进入命令 退出后不会关闭
–name= 起名字
进入容器
docker exec -it可以进行交互 bash交互
停止容器
docker stop
启动容器
docker start
删除容器
docker rm
查看容器信息
docker inspect
容器数据卷容器内部只模拟该程序运行所必要的系统 所以vim编辑器并不存在 所以无法直接修改容器内部的文件需要使用数据卷挂载间接修改文件内容
如果容器已经创建 无法 ...
Linux目录结构
顶级目录 / 有且只有一个
Windows \ 表示层级关系
Linux / 表示层级关系
Linux命令入门命令基础command [-options] [parameter]
command 命令本身
-options 命令选项 行为细节
parameter 命令参数 指向目标
ls命令入门ls 列出目录下的内容
ls [-a -l -h] [linux路径]
-a all 列出全部文件 包括隐藏( 以. 开头是隐藏文件夹)
-l 竖向排列 并展示更多信息
ls -l -a 即 ls -la
-h 文件大小带单位
cd切换工作目录(change directory)
cd [linux路径]
pwd (print work directory)
查看当前所在的工作目录
特殊路径符
. 表示当前目录
.. 表示上一级目录 ../.. 退回两级
~ 表示home目录
创建目录命令
mkdir (make directory)
mkdir [-p] linux路径
-p 表示自动创建不存在的父目录 适用创建连续多层级的目录
确 ...












