Fel实现自定义计算引擎,平均计算速度每秒10w

article/2025/9/14 19:50:25

Fel的介绍和简单使用以及0.9版本的包在之前的博客写过了,有需要的朋友移步:fel的简单使用及介绍

项目地址:https://github.com/an-yusheng/CSDN-FelDemo

 

1. 基础的应用

下面的代码是引用原生类进行执行的,支持通用数学函数即加减乘除

package com.example.demo.util;import com.greenpineyu.fel.FelEngine;
import com.greenpineyu.fel.FelEngineImpl;/*** @author Anzepeng* @title: FelDemo* @projectName demo* @description: TODO* @date 2020/6/3 0003下午 13:42*/
public class FelDemo {public static void main(String[] args){// 计算核心类FelEngine felEngine = new FelEngineImpl();// 执行计算的方法eval(公式)Object result = felEngine.eval("1+1");// 结果System.out.println("计算结果为:"+result);}
}

执行结果

如果仅仅是普通运算那并不能满足我们的需求,尝试一下聚合函数

错误信息找不到函数,原生包并没有支持这些函数,所以我们要重写它的实现代码

2. 查看源代码

FelEngineImpl的源代码
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//package com.greenpineyu.fel;import com.greenpineyu.fel.common.FelBuilder;
import com.greenpineyu.fel.compile.CompileService;
import com.greenpineyu.fel.context.ArrayCtxImpl;
import com.greenpineyu.fel.context.FelContext;
import com.greenpineyu.fel.context.Var;
import com.greenpineyu.fel.function.FunMgr;
import com.greenpineyu.fel.function.Function;
import com.greenpineyu.fel.optimizer.Optimizer;
import com.greenpineyu.fel.optimizer.VarVisitOpti;
import com.greenpineyu.fel.parser.AntlrParser;
import com.greenpineyu.fel.parser.FelNode;
import com.greenpineyu.fel.parser.Parser;
import com.greenpineyu.fel.security.SecurityMgr;public class FelEngineImpl implements FelEngine {private FelContext context;private CompileService compiler;private Parser parser;private FunMgr funMgr;private SecurityMgr securityMgr;public SecurityMgr getSecurityMgr() {return this.securityMgr;}public void setSecurityMgr(SecurityMgr var1) {this.securityMgr = var1;}public FelEngineImpl(FelContext var1) {this.securityMgr = FelBuilder.newSecurityMgr();this.context = var1;this.compiler = new CompileService();this.parser = new AntlrParser(this);this.funMgr = new FunMgr();}public FelEngineImpl() {this(new ArrayCtxImpl());}public FelNode parse(String var1) {return this.parser.parse(var1);}public Object eval(String var1) {return this.eval(var1, this.context);}public Object eval(String var1, Var... var2) {FelNode var3 = this.parse(var1);VarVisitOpti var4 = new VarVisitOpti(var2);var3 = var4.call(this.context, var3);return var3.eval(this.context);}public Object eval(String var1, FelContext var2) {return this.parse(var1).eval(var2);}public Expression compile(String var1, Var... var2) {return this.compile(var1, (FelContext)null, new VarVisitOpti(var2));}public Expression compile(String var1, FelContext var2, Optimizer... var3) {if (var2 == null) {var2 = this.context;}FelNode var4 = this.parse(var1);if (var3 != null) {Optimizer[] var5 = var3;int var6 = var3.length;for(int var7 = 0; var7 < var6; ++var7) {Optimizer var8 = var5[var7];if (var8 != null) {var4 = var8.call(var2, var4);}}}return this.compiler.compile(var2, var4, var1);}public String toString() {return "FelEngine";}public void addFun(Function var1) {this.funMgr.add(var1);}public FelContext getContext() {return this.context;}public CompileService getCompiler() {return this.compiler;}public void setCompiler(CompileService var1) {this.compiler = var1;}public Parser getParser() {return this.parser;}public void setParser(Parser var1) {this.parser = var1;}public FunMgr getFunMgr() {return this.funMgr;}public void setFunMgr(FunMgr var1) {this.funMgr = var1;}public void setContext(FelContext var1) {this.context = var1;}
}

3. 重写FelEngineImpl类并实现FelEngine

下面是我们创建可修改的实现类,跟源代码不一致的地方是我将 this(new ArrayCtxImpl()); 注释了

package com.example.demo.util;import com.greenpineyu.fel.Expression;
import com.greenpineyu.fel.FelEngine;
import com.greenpineyu.fel.common.FelBuilder;
import com.greenpineyu.fel.compile.CompileService;
import com.greenpineyu.fel.context.ArrayCtxImpl;
import com.greenpineyu.fel.context.FelContext;
import com.greenpineyu.fel.context.Var;
import com.greenpineyu.fel.function.FunMgr;
import com.greenpineyu.fel.function.Function;
import com.greenpineyu.fel.optimizer.Optimizer;
import com.greenpineyu.fel.optimizer.VarVisitOpti;
import com.greenpineyu.fel.parser.AntlrParser;
import com.greenpineyu.fel.parser.FelNode;
import com.greenpineyu.fel.parser.Parser;
import com.greenpineyu.fel.security.SecurityMgr;/*** @author Anzepeng* @title: FelEngineImpl* @projectName calculate* @description: TODO* @date 2020/5/20 0020下午 17:44*/
public class FelEngineImpl implements FelEngine {private FelContext context;private CompileService compiler;private Parser parser;private FunMgr funMgr;private SecurityMgr securityMgr;public SecurityMgr getSecurityMgr() {return this.securityMgr;}public void setSecurityMgr(SecurityMgr var1) {this.securityMgr = var1;}public FelEngineImpl(FelContext var1) {this.securityMgr = FelBuilder.newSecurityMgr();this.context = var1;this.compiler = new CompileService();this.parser = new AntlrParser(this);this.funMgr = new FunMgr();}public FelEngineImpl() {//this(new ArrayCtxImpl());}public FelNode parse(String var1) {return this.parser.parse(var1);}public Object eval(String var1) {return this.eval(var1, this.context);}public Object eval(String var1, Var... var2) {FelNode var3 = this.parse(var1);VarVisitOpti var4 = new VarVisitOpti(var2);var3 = var4.call(this.context, var3);return var3.eval(this.context);}public Object eval(String var1, FelContext var2) {return this.parse(var1).eval(var2);}public Expression compile(String var1, Var... var2) {return this.compile(var1, (FelContext)null, new VarVisitOpti(var2));}public Expression compile(String var1, FelContext var2, Optimizer... var3) {if (var2 == null) {var2 = this.context;}FelNode var4 = this.parse(var1);if (var3 != null) {Optimizer[] var5 = var3;int var6 = var3.length;for(int var7 = 0; var7 < var6; ++var7) {Optimizer var8 = var5[var7];if (var8 != null) {var4 = var8.call(var2, var4);}}}return this.compiler.compile(var2, var4, var1);}public String toString() {return "FelEngine";}public void addFun(Function var1) {this.funMgr.add(var1);}public FelContext getContext() {return this.context;}public CompileService getCompiler() {return this.compiler;}public void setCompiler(CompileService var1) {this.compiler = var1;}public Parser getParser() {return this.parser;}public void setParser(Parser var1) {this.parser = var1;}public FunMgr getFunMgr() {return this.funMgr;}public void setFunMgr(FunMgr var1) {this.funMgr = var1;}public void setContext(FelContext var1) {this.context = var1;}
}

在demo类里将引用的FelEngineImpl类改成我们创建的这个然后执行

出现错误java.lang.NullPointerException

解开注释再次执行,恢复正常

这个方法里写的就是我们定义好的运算,函数或方法,Parser解析公式后执行的运算就是匹配这个方法里的内容

4. 编写自定义函数

在上面知道运算方法后我们就要加入自定义函数了,fel的简单使用及介绍  里面也讲过自定义函数了,我们直接拿过来修改一下

我们只取第一部分代码并修改一下,改成sum的函数,并添加函数引用,代码如下

public FelEngineImpl() {this(new ArrayCtxImpl());// sum函数Function sumFun = new CommonFunction() {public String getName() {return "sum";}@Overridepublic Object call(Object... values) {Double sum=0d;for(Object o:values){if(o!=null){Double d= NumberUtil.toDouble(o);sum+=d;}}return sum;}};// 添加sum函数this.addFun(sumFun);}

修改完成,执行一下sum函数

5. 重写后的FelEngineImpl代码执行示例

支持的运算 、函数、判断

普通运算:加减乘除

聚合函数:MAX、MIN、AVG、SUM、、、等

关系:大于、小于、大于等于、小于等于、等于、不等于等

条件:?:

6. 百万数据速度测试

因为输出所有结果会影响真实速度,我们先不输出测试一下

百万数据计算速度10161ms,平均每秒10w,我们再输出一下公式结果,确定一下计算结果正确性

结果应该没有错误,因为有输出所以多了8s的时间

7. FelEngineImpl代码

package com.example.demo.util;import com.greenpineyu.fel.Expression;
import com.greenpineyu.fel.FelEngine;
import com.greenpineyu.fel.common.FelBuilder;
import com.greenpineyu.fel.common.NumberUtil;
import com.greenpineyu.fel.common.ObjectUtils;
import com.greenpineyu.fel.compile.CompileService;
import com.greenpineyu.fel.context.ArrayCtxImpl;
import com.greenpineyu.fel.context.FelContext;
import com.greenpineyu.fel.context.Var;
import com.greenpineyu.fel.function.CommonFunction;
import com.greenpineyu.fel.function.FunMgr;
import com.greenpineyu.fel.function.Function;
import com.greenpineyu.fel.optimizer.Optimizer;
import com.greenpineyu.fel.optimizer.VarVisitOpti;
import com.greenpineyu.fel.parser.AntlrParser;
import com.greenpineyu.fel.parser.FelNode;
import com.greenpineyu.fel.parser.Parser;
import com.greenpineyu.fel.security.SecurityMgr;import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;/*** @author Anzepeng* @title: FelEngineImpl* @projectName calculate* @description: TODO* @date 2020/5/20 0020下午 17:44*/
public class FelEngineImpl implements FelEngine {private FelContext context;private CompileService compiler;private Parser parser;private FunMgr funMgr;private SecurityMgr securityMgr;public SecurityMgr getSecurityMgr() {return this.securityMgr;}public void setSecurityMgr(SecurityMgr var1) {this.securityMgr = var1;}public FelEngineImpl(FelContext var1) {this.securityMgr = FelBuilder.newSecurityMgr();this.context = var1;this.compiler = new CompileService();this.parser = new AntlrParser(this);this.funMgr = new FunMgr();}public FelEngineImpl() {this(new ArrayCtxImpl());Function funmax= new CommonFunction() {public String getName() {return "MAX";}@Overridepublic Object call(Object... values) {Double max=0-Double.MAX_VALUE;for(Object o:values){Double d=NumberUtil.toDouble(o);if(d.compareTo(max)>0){max=d;}}return max;}};this.addFun(funmax);Function funmin= new CommonFunction() {public String getName() {return "MIN";}@Overridepublic Object call(Object... values) {Double min=Double.MAX_VALUE;for(Object o:values){Double d=NumberUtil.toDouble(o);if(d.compareTo(min)<0){min=d;}}return min;}};this.addFun(funmin);Function funavg= new CommonFunction() {public String getName() {return "AVG";}@Overridepublic Object call(Object... values) {Double sum=0d;for(Object o:values){Double d=NumberUtil.toDouble(o);sum+=d;}return sum/values.length;}};this.addFun(funavg);Function avgeli= new CommonFunction() {public String getName() {return "AVGELI";}@Overridepublic Object call(Object... values) {Double sum=0d;int count=0;for(Object o:values){if(o!=null){Double d=NumberUtil.toDouble(o);sum+=d;if(d!=0.0){count++;}}}return sum/count;}};this.addFun(avgeli);Function funsum= new CommonFunction() {public String getName() {return "SUM";}@Overridepublic Object call(Object... values) {Double sum=0d;for(Object o:values){if(o!=null){Double d=NumberUtil.toDouble(o);sum+=d;}}return sum;}};this.addFun(funsum);Function funabs= new CommonFunction() {public String getName() {return "ABS";}@Overridepublic Object call(Object... values) {Double result=NumberUtil.toDouble(values[0]);return Math.abs(result);}};this.addFun(funabs);Function funbadmin= new CommonFunction() {public String getName() {return "BADMIN";}@Overridepublic Object call(Object... values) {Double min=Double.MAX_VALUE;boolean a=true;for(Object o:values){Double d=NumberUtil.toDouble(o);Double b=Math.abs(d);if(b.compareTo(min)<0){min=b;if(d>=0){a=true;}else{a=false;}}}if(a){return min;}else{return 0-min;}}};this.addFun(funbadmin);Function funbadmax= new CommonFunction() {public String getName() {return "BADMAX";}@Overridepublic Object call(Object... values) {Double max=0d;boolean a=true;for(Object o:values){Double d=NumberUtil.toDouble(o);if(d.equals(NumberUtil.toDouble(-100))){continue;}Double b=Math.abs(d);if(b.compareTo(max)>0){if(d>=0){a=true;}else{a=false;}max=b;}}if(a){return max;}else{return 0-max;}}};this.addFun(funbadmax);Function funacos= new CommonFunction() {public String getName() {return "ACOS";}@Overridepublic Object call(Object... values) {Double result=NumberUtil.toDouble(values[0]);return Math.acos(result);}};this.addFun(funacos);Function funasin= new CommonFunction() {public String getName() {return "ASIN";}@Overridepublic Object call(Object... values) {Double result=NumberUtil.toDouble(values[0]);return Math.asin(result);}};this.addFun(funasin);Function funatan= new CommonFunction() {public String getName() {return "ATAN";}@Overridepublic Object call(Object... values) {Double result=NumberUtil.toDouble(values[0]);return Math.atan(result);}};this.addFun(funatan);Function funcos= new CommonFunction() {public String getName() {return "COS";}@Overridepublic Object call(Object... values) {Double result=NumberUtil.toDouble(values[0]);return Math.cos(result);}};this.addFun(funcos);Function funsin= new CommonFunction() {public String getName() {return "SIN";}@Overridepublic Object call(Object... values) {Double result=NumberUtil.toDouble(values[0]);return Math.sin(result);}};this.addFun(funsin);Function funtan= new CommonFunction() {public String getName() {return "TAN";}@Overridepublic Object call(Object... values) {Double result=NumberUtil.toDouble(values[0]);return Math.tan(result);}};this.addFun(funtan);Function funceil= new CommonFunction() {public String getName() {return "CEIL";}@Overridepublic Object call(Object... values) {Double result=NumberUtil.toDouble(values[0]);return Math.ceil(result);}};this.addFun(funceil);Function funround= new CommonFunction() {public String getName() {return "ROUND";}@Overridepublic Object call(Object... values) {Double result=NumberUtil.toDouble(values[0]);return Math.round(result*100)*0.01;}};this.addFun(funround);Function funfloor= new CommonFunction() {public String getName() {return "FLOOR";}@Overridepublic Object call(Object... values) {Double result=NumberUtil.toDouble(values[0]);return Math.floor(result);}};this.addFun(funfloor);Function funsqrt= new CommonFunction() {public String getName() {return "SQRT";}@Overridepublic Object call(Object... values) {Double result=NumberUtil.toDouble(values[0]);return Math.sqrt(result);}};this.addFun(funsqrt);Function funpow= new CommonFunction() {public String getName() {return "POW";}@Overridepublic Object call(Object... values) {Double arg1=NumberUtil.toDouble(values[0]);return Math.pow(arg1,2);}};this.addFun(funpow);Function funpown= new CommonFunction() {public String getName() {return "POWN";}@Overridepublic Object call(Object... values) {Double arg1=NumberUtil.toDouble(values[0]);Double arg2=NumberUtil.toDouble(values[1]);return Math.pow(arg1,arg2);}};this.addFun(funpown);Function funsqrtn= new CommonFunction() {public String getName() {return "SQRTN";}@Overridepublic Object call(Object... values) {Double arg1=NumberUtil.toDouble(values[0]);Double arg2=NumberUtil.toDouble(values[1]);return Math.pow(arg1,1/arg2);}};this.addFun(funsqrtn);Function equals= new CommonFunction() {public String getName() {return "EQUALS";}@Overridepublic Object call(Object... values) {return values[0].equals(values[1]);}};this.addFun(equals);Function isnull= new CommonFunction() {public String getName() {return "ISNULL";}@Overridepublic Object call(Object... values) {if(values==null||values[0]==null||"".equals(values[0].toString().trim())){return true;}return false;}};this.addFun(isnull);Function nulltozero= new CommonFunction() {public String getName() {return "NULLTOZERO";}@Overridepublic Object call(Object... values) {if(values==null||values[0]==null||"".equals(values[0].toString().trim())){return 0;}return values[0];}};this.addFun(nulltozero);Function concat= new CommonFunction() {public String getName() {return "CONCAT";}@Overridepublic Object call(Object... values) {StringBuffer result=new StringBuffer();for(Object v:values){if(v!=null)result.append(v);}return result.toString();}};this.addFun(concat);Function date= new CommonFunction() {public String getName() {return "DATE";}@Overridepublic Object call(Object... values) {SimpleDateFormat format=null;if(values==null){format=new SimpleDateFormat("yyyy-MM-dd");} else if(values[0].toString().equals("1")){format=new SimpleDateFormat("yyyy-MM-dd-");} else if(values[0].toString().equals("2")){format=new SimpleDateFormat("yyyy-MM");} else if(values[0].toString().equals("3")){format=new SimpleDateFormat("yyyy");}return format.format(new Date(System.currentTimeMillis()));}};this.addFun(date);Function random= new CommonFunction() {public String getName() {return "RANDOM";}@Overridepublic Object call(Object... values) {Random random1 = new Random(System.currentTimeMillis());int a=random1.nextInt(2);Double c=Double.valueOf(values[0].toString());double b = random1.nextInt((int)(c*Double.valueOf(values[1].toString())*10000))/1000000.0;if(a==1){return c+b;}else{return c-b;}}};this.addFun(random);Function predate= new CommonFunction() {public String getName() {return "PREDATE";}@Overridepublic Object call(Object... values) {SimpleDateFormat format=null;Calendar calendar=Calendar.getInstance();calendar.setFirstDayOfWeek(2);if(values==null){calendar.add(Calendar.DAY_OF_YEAR, -1);format=new SimpleDateFormat("yyyy-MM-dd");} else if(values[0].toString().equals("1")){calendar.add(Calendar.DAY_OF_YEAR, -1);format=new SimpleDateFormat("yyyy-MM-dd");} else if(values[0].toString().equals("2")){calendar.add(Calendar.MONTH, -1);format=new SimpleDateFormat("yyyy-MM");} else if(values[0].toString().equals("3")){calendar.add(Calendar.YEAR, -1);format=new SimpleDateFormat("yyyy");}return format.format(calendar.getTime());}};this.addFun(predate);Function pre15time= new CommonFunction() {public String getName() {return "PRE15TIME";}@Overridepublic Object call(Object... values) {SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar calendar=Calendar.getInstance();if(values!=null){calendar.setTime(new Date((Long)values[0]));}calendar.setFirstDayOfWeek(2);int minu=calendar.get(Calendar.MINUTE);if(minu%15!=0){minu=((int)(minu/15))*15;}calendar.set(Calendar.SECOND, 0);calendar.set(Calendar.MINUTE, minu);return format.format(calendar.getTime());}};this.addFun(pre15time);}public FelNode parse(String var1) {return this.parser.parse(var1);}public Object eval(String var1) {return this.eval(var1, this.context);}public Object eval(String var1, Var... var2) {FelNode var3 = this.parse(var1);VarVisitOpti var4 = new VarVisitOpti(var2);var3 = var4.call(this.context, var3);return var3.eval(this.context);}public Object eval(String var1, FelContext var2) {return this.parse(var1).eval(var2);}public Expression compile(String var1, Var... var2) {return this.compile(var1, (FelContext)null, new VarVisitOpti(var2));}public Expression compile(String var1, FelContext var2, Optimizer... var3) {if (var2 == null) {var2 = this.context;}FelNode var4 = this.parse(var1);if (var3 != null) {Optimizer[] var5 = var3;int var6 = var3.length;for(int var7 = 0; var7 < var6; ++var7) {Optimizer var8 = var5[var7];if (var8 != null) {var4 = var8.call(var2, var4);}}}return this.compiler.compile(var2, var4, var1);}public String toString() {return "FelEngine";}public void addFun(Function var1) {this.funMgr.add(var1);}public FelContext getContext() {return this.context;}public CompileService getCompiler() {return this.compiler;}public void setCompiler(CompileService var1) {this.compiler = var1;}public Parser getParser() {return this.parser;}public void setParser(Parser var1) {this.parser = var1;}public FunMgr getFunMgr() {return this.funMgr;}public void setFunMgr(FunMgr var1) {this.funMgr = var1;}public void setContext(FelContext var1) {this.context = var1;}
}

 


http://chatgpt.dhexx.cn/article/tAEEL91N.shtml

相关文章

访问SMBus设备

使用SMBus访问温度传感器&#xff0c;并控制smart Fan 首先聊聊SMBus的访问方法 硬件上&#xff1a;两条线SMBus Clock和Data信号 当clock信号为高时data信号才有效&#xff0c;data信号下降&#xff0c;意味着Start。data信号上升&#xff0c;意味着Stop。开始后会发送九位&…

SMBUS通信波形分析

SMbus通信协议 1.特性 SMBus是 System Management Bus 的缩写&#xff0c;译为系统管理总线&#xff0c;SMBus是一种二线制串行总线&#xff0c;1996年第一版规范开始商用。它大部分基于I2C总 线规范。和 I2C一样&#xff0c;SMBus不需增加额外引脚&#xff0c;创建该总线主要…

DSP SMBus总线通信

参考文档&#xff1a;System Management Bus (SMBus) Specification Version 3.0.pdf 简介&#xff1a; SMBus&#xff08;System Management Bus&#xff09;于1995年被 Intel 提出&#xff0c;应用于低速率通信&#xff0c;是一种二线制串行总线&#xff0c;该总线大部分基…

linux i2c smbus驱动

目录 目录 数据收发流程 驱动层 收发接口 驱动层注册 smbus控制器 i2c控制器 协议接口使用 总体流程 数据收发关键数据结构 使用示例--eeprom的读写 使用示例--smbus的读写接口 数据收发流程 驱动层 收发接口 首先了解&#xff0c;驱动层向协议&#xff08;算法&a…

初学 SMBus

(这篇主要对象为固件工程师&#xff0c;简单介绍SMBus的一些基本概念而已) 概述 System Management Bus (简称SMBus或是SMB) &#xff0c;是1995年由Intel提出的&#xff0c;用来访问主机板上的设备(EEPROM、温度感测器、电压感测器等) 并收集相应的资讯(SPD、温度、电压、版…

SMBus协议

SMBus协议 文章目录 SMBus协议参考资料&#xff1a;一、 SMBus是I2C协议的一个子集二、 SMBus协议分析2.1 symbols(符号)2.2 SMBus Quick Command2.3 SMBus Receive Byte2.4 SMBus Send Byte2.5 SMBus Read Byte2.6 SMBus Read Word2.7 SMBus Write Byte2.8 SMBus Write Word2.…

系统管理总线(SMBus)介绍

SMBus介绍 系统管理总线协议概要系统管理总线 关键标记表SMBus接口函数1. SMBus Quick Command2. SMBus接收字节函数&#xff1a;i2c_smbus_read_byte()3. SMBus发送字节函数&#xff1a;i2c_smbus_write_byte()4. SMBus读取字节函数&#xff1a;i2c_smbus_read_byte_data()5. …

SMBus学习记录

SMBus学习记录 注&#xff1a;本文基于对于smb3.0 spec的学习总结。更多时序要求需要查阅spec。 SMBus 是 System Management Bus 的缩写&#xff0c;译为系统管理总线&#xff0c;SMBus是一种二线制串行总线&#xff0c;1996年第一版规范开始商用。它大部分基于I2C总线规范。…

SMBus通信,与IIC通信的差异

SMbus总线 SMBus是System Management Bus的缩写&#xff0c;它是一种简单的串行通信总线&#xff0c;用于连接计算机上的系统管理芯片和其他设备&#xff0c;如电池、风扇、温度传感器等。SMBus是由英特尔公司开发的&#xff0c;它基于I2C总线协议&#xff0c;但是增加了一些额…

【Linux】特别篇--SMBus 协议

【Linux】特别篇--SMBus 协议 一、SMBus 简介二、SMBus 与 I2C 区别三、SMBus协议分析3.1 符号含义3.2 SMBus Quick Command3.3 SMBus Receive Byte3.4 SMBus Send Byte3.5 SMBus Read Byte3.6 SMBus Read Word3.7 SMBus Write Byte3.8 SMBus Write Word3.9 SMBus Block Read3.…

SMBUS的介绍与访问

博文是为了总结自己在bios学习上面的点点滴滴&#xff0c;并且加深印象&#xff0c;由于本人水平有限&#xff0c;难免存在不足之处&#xff0c;望指正&#xff0c;同时感谢CSDN提供的平台。本文主要介绍的是SMBUS。 1 SMBUS的简介 特点&#xff1a; SMBUS&#xff0c;System …

java完整开发环境搭建_如何搭建一个完整的Java开发环境

这篇文章主要教大家如何搭建一个完整的Java开发环境&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 作为一个Java程序员&#xff0c;配置一个java开发环境是必备的技能&#xff0c;今天给广大菜鸟初学者补上一课。环境的配置&#xff0c;大概就分三个…

1.1-java开发环境搭建

java开发环境搭建 回到第一章&#xff1a;目录 文章目录 java开发环境搭建前言一、下载jdk1.安装前检查 二、安装jdk1.安装2.配置环境变量3.验证安装 前言 本节内容是搭建java的开发环境。 分为三步&#xff1a;下载jdk&#xff1b;安装jdk&#xff1b;配置环境变量&#xff…

Windows Java开发环境搭建

1.下载安装配置 JDK 8 打开 https://developer.oracle.com/找到 Java8 下载位置&#xff0c;点击下载链接&#xff0c;下载JDK 8 下载后如下图所示&#xff0c;双击安装一直选择选择下一步 2.下载安装 Eclipse点击官网下载 Eclipse下载后就是一个压缩包&#xff0c;只需解压即…

基于Centos7的Java开发环境搭建

基于Centos7的Java服务器搭建 前提&#xff1a;Centos常用命令安装 1. 安装wget yum -y install wget2. 安装gcc yum -y install gcc1. Centos7下的防火墙操作 systemctl status firewalld # 查看防火墙状态 systemctl start firewalld # 开启防火墙 systemctl stop fi…

Java开发环境的搭建与配置

Java开发环境的搭建与配置 1、JDK、JRE、JVM的关系 2、JDK的下载&#xff1a;http://java.sun.com 3、JDK安装&#xff1a;可以自定义安装路径 4、JDK环境变量配置&#xff1a; 鼠标右击【计算机】->【属性】->【高级系统设置】->【高级】->【环境变量】 系统变…

Java开发环境搭建实践

前言 刚刚弄完python的环境搭建&#xff0c;今年打算也要好好学习Java&#xff0c;所以把Java的环境弄起来 搭建过程 jdk下载和安装 下载 官网&#xff1a;Oracle 甲骨文中国 | 云应用和云平台 打开官网 点击产品后下拉找到Java点进去。 下载Java 我就下载最新的jdk把…

程序员福音 【完整的Java开发环境搭建】 系列篇

原文地址 BY Jason 文章目录 原文地址Java开发环境搭建统一问题解决&#xff08;更新中&#xff09;1. vim常用操作命令2. 关于Linux防火墙开放端口问题 环境安装目录&#xff08;更新中&#xff09;Docker安装容器安装SSHJDK安装MySQL安装Redis安装RabbitMQ安装 Java开发环境…

Windows下Java开发环境搭建

本文以Win7操作系统解压版Eclipse安装版JDK1.7为例&#xff0c;展示如何搭建初级Java开发环境。 第一步&#xff1a;根据自己电脑的操作系统的位数选择相应版本的安装包进行安装&#xff1a; &#xff08;1&#xff09;查看自己电脑操作系统位数&#xff1a;找到“计算机”图标…

Java开发环境搭建详细教程(JDK+Eclipse)

前言 学习 Java 编程的第一件事情就是把开发环境搭建起来&#xff0c;这样才能开始快乐的编程学习之旅。然而&#xff0c;很多萌新经常因为种种问题无法搭建好开发环境&#xff0c;导致自己信心受挫&#xff0c;学习兴趣和激情也大减&#xff0c;甚至因此彻底放弃学习 Java 编…