project-files-naming

本文介绍了一个基于Struts框架与Hibernate ORM技术整合的Java Web应用案例。该应用覆盖了从模型层到视图层的完整开发流程,包括DAO层的实现、业务逻辑处理、前端页面展示及相应的配置文件设置等。通过具体代码示例,展示了如何在Struts应用中使用Hibernate进行数据库操作。

 Hr
  ../.classpath
  ../.mymetadata
  ../.project
  ../db
  ../../test.sql
  ../src
  ../.../applicationContext.xml
  ../.../com
  ../.../.../baidu
  ../.../.../...../base
  ../.../.../...../..../BaseAction.java
  ../.../.../...../..../BaseDAO.java
  ../.../.../...../..../BaseForm.java
  ../.../.../...../..../BaseHibernateDao.java
  ../.../.../...../common
  ../.../.../...../....../SetCharacterEncodingFilter.java
  ../.../.../...../dao
  ../.../.../...../.../DeptDAO.java
  ../.../.../...../.../IDeptDAO.java
  ../.../.../...../hibernate
  ../.../.../...../........./pojo
  ../.../.../...../........./..../AbstractStaff.java
  ../.../.../...../........./..../AbstractZhangshan.java
  ../.../.../...../........./..../Staff.hbm.xml
  ../.../.../...../........./..../Staff.java
  ../.../.../...../........./..../Zhangshan.hbm.xml
  ../.../.../...../........./..../Zhangshan.java
  ../.../.../...../service
  ../.../.../...../......./DeptService.java
  ../.../.../...../......./IDeptService.java
  ../.../.../...../struts
  ../.../.../...../....../ation
  ../.../.../...../....../...../DeptAction.java
  ../.../.../...../....../...../HelleAction.java
  ../.../.../...../....../form
  ../.../.../...../....../..../DeptForm.java
  ../.../hibernate.cfg.xml
  ../test.mer
  ../WebRoot
  ../......./createDept.jsp
  ../......./css
  ../......./.../css.css
  ../......./deptlist.jsp
  ../......./deptupdate.jsp
  ../......./index.jsp
  ../......./js
  ../......./META-INF
  ../......./......../MANIFEST.MF
  ../......./MyJsp.jsp
  ../......./WEB-INF
  ../......./......./classes
  ../......./......./......./applicationContext.xml
  ../......./......./......./com
  ../......./......./......./.../baidu
  ../......./......./......./.../...../base
  ../......./......./......./.../...../common
  ../......./......./......./.../...../dao
  ../......./......./......./.../...../hibernate
  ../......./......./......./.../...../........./pojo
  ../......./......./......./.../...../........./..../Staff.hbm.xml
  ../......./......./......./.../...../........./..../Zhangshan.hbm.xml
  ../......./......./......./.../...../service
  ../......./......./......./.../...../struts
  ../......./......./......./.../...../....../ation
  ../......./......./......./.../...../....../form
  ../......./......./......./.../...../....../..../DeptForm.class
  ../......./......./......./hibernate.cfg.xml
  ../......./......./lib
  ../......./......./.../antlr-2.7.5H3.jar
  ../......./......./.../asm-attrs.jar
  ../......./......./.../asm.jar
  ../......./......./.../c3p0-0.9.0.4.jar
  ../......./......./.../cglib-2.1.3.jar
  ../......./......./.../cglib-nodep-2.1_3.jar
  ../......./......./.../commons-attributes-api.jar
  ../......./......./.../commons-attributes-compiler.jar
  ../......./......./.../commons-beanutils.jar
  ../......./......./.../commons-collections-2.1.1.jar
  ../......./......./.../commons-collections.jar
  ../......./......./.../commons-dbcp.jar
  ../......./......./.../commons-digester.jar
  ../......./......./.../commons-fileupload.jar
  ../......./......./.../commons-lang.jar
  ../......./......./.../commons-logging-1.0.4.jar
  ../......./......./.../commons-logging.jar
  ../......./......./.../commons-pool.jar
  ../......./......./.../commons-validator.jar
  ../......./......./.../concurrent-1.3.2.jar
  ../......./......./.../connector.jar
  ../......./......./.../db-ojb-1.0.4.jar
  ../......./......./.../displaytag-1.1.jar
  ../......./......./.../dom4j-1.6.1.jar
  ../......./......./.../ehcache-1.1.jar
  ../......./......./.../hibernate-annotations.jar
  ../......./......./.../hibernate3.jar
  ../......./......./.../jaas.jar
  ../......./......./.../jacc-1_0-fr.jar
  ../......./......./.../jakarta-oro.jar
  ../......./......./.../jaxen-1.1-beta-7.jar

zy@zy-VMware-Virtual-Platform:~/zy/project-zy$ docker-compose up -d --build [+] Building 0.4s (17/17) FINISHED docker:default => [java-app internal] load build definition from Dockerfile.java 0.0s => => transferring dockerfile: 158B 0.0s => [java-app internal] load metadata for docker.io/library/eclipse-temurin:8-jdk 0.0s => [java-app internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [java-app 1/3] FROM docker.io/library/eclipse-temurin:8-jdk 0.0s => [java-app internal] load build context 0.0s => => transferring context: 1.96kB 0.0s => [java-app 2/3] WORKDIR /app 0.0s => [java-app 3/3] COPY target/your-app.jar app.jar 0.0s => [java-app] exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:d1d5a81949761efa4617fcd382e056448079fb5ff8b96a66011403cc99c64e8a 0.0s => => naming to docker.io/library/project-zy-java-app 0.0s => [vue-app internal] load build definition from Dockerfile.vue 0.0s => => transferring dockerfile: 215B 0.0s => [vue-app internal] load metadata for docker.io/library/nginx:latest 0.0s => [vue-app internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [vue-app 1/4] FROM docker.io/library/nginx:latest 0.0s => [vue-app internal] load build context 0.0s => => transferring context: 2.22MB 0.0s => [vue-app 2/4] RUN rm /etc/nginx/conf.d/default.conf 0.2s => [vue-app 3/4] COPY vue.conf /etc/nginx/conf.d 0.0s => [vue-app 4/4] COPY dist/ /usr/share/nginx/html 0.0s => [vue-app] exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:91efb1d8d44d5cbf523baacb2aa27bc8069fcc43385eda8754c8cba2b6f12f8a 0.0s => => naming to docker.io/library/project-zy-vue-app 0.0s [+] Running 5/5 ✔ Network project-zy_default Created 0.0s ✔ Volume "project-zy_mysql_data" Created 0.0s ✔ Container mysql Started 0.0s ✔ Container java-app Started 0.0s ✔ Container vue-app Started
08-10
MUST READ: Security Champion - Alloy SCA Automation SAST - SonarQube Setup SonarQube Download and Installation (On PC with Internet Access) Download Sonar-Scanner CLI Visit https://docs.sonarsource.com/sonarqube-server/analyzing-source-code/scanners/sonarscanner Download respective version of Scanner CLI (version 7.3.0.5189 as of time of writing) 2. Transfer zip file onto Jenkins Server (via SCP) scp -r sonar-scanner-cli-*-linux-x64.zip tplink@scrjenkins.tp-link.com:/home/tplink/ Unzip and move sonar-scanner package to /opt dir unzip sonar-scanner-cli-7.3.0.5189-linux-x64.zip mv sonar-scanner-7.3.0.5189-linux-x64 /opt/sonar-scanner echo 'export PATH="$PATH:/opt/sonar-scanner/bin"' >> ~/.bashrc source ~/.bashrc > sonar-scanner --version 13:54:25.945 INFO Scanner configuration file: /opt/sonar-scanner/conf/sonar-scanner.properties 13:54:25.948 INFO Project root configuration file: NONE 13:54:25.956 INFO SonarScanner CLI 7.3.0.5189 13:54:25.958 INFO Linux 6.8.0-86-generic amd64 SonarQube Jenkins Setup Refer to Job 1: Security Verify + Security Scans Global Jenkins Settings From the Jenkins Dashboard, navigate to Manage Jenkins > Manage Plugins and install the SonarQube Scanner plugin. Back at the Jenkins Dashboard, navigate to Credentials > System from the left navigation. Click the Global credentials (unrestricted) link in the System table. Click Add credentials in the left navigation and add the following information: * Kind: Secret Text * Scope: Global **ONLY FOR SECURITY CHAMPION** * Secret: Generate a token at User > My Account > Security in SonarQube Server, and copy and paste it here. Click OK. From the Jenkins Dashboard, navigate to Manage Jenkins > Configure System. From the SonarQube Servers section, click Add SonarQube. Add the following information: * Name: Give a unique name to your SonarQube Server instance. * Server URL: Your SonarQube Server instance URL. * Credentials: Select the credentials created during step 4. Click Save Preparing SonarQube project file for scanning Please see https://pdconfluence.tp-link.com/pages/viewpage.action?pageId=199570408#Job1:SecurityVerify+SecurityScans-6.SonarQubeScanPreparation Project Naming Convention: In order to maintain cohesive organization between different products/models/components, make sure to use the following naming convention: Take a look at the Jenkins Job Script, and modify it accordingly, it creates the file and then edits it with the environment variables defined in the job. cd "${WORKSPACE}" pwd #EDIT ACCORDINGLY (change EBG:FIRM if not correct) cat > sonar-project.properties << 'EOF' sonar.projectKey=EBG:FIRM:PLACEHOLDER_MODEL-PLACEHOLDER_PROJECT sonar.projectName=PLACEHOLDER_MODEL_PLACEHOLDER_PROJECT sonar.projectVersion=PLACEHOLDER_PACKAGE_VERSION sonar.sources=PLACEHOLDER_PROJECT_PATH sonar.host.url=PLACEHOLDER_HOST_URL EOF sed -i "s|PLACEHOLDER_PROJECT_PATH|${PROJECT_PATH}|g" sonar-project.properties sed -i "s|PLACEHOLDER_HOST_URL|${SONAR_HOST_URL}|g" sonar-project.properties sed -i "s|PLACEHOLDER_MODEL|${MODEL}|g" sonar-project.properties PROJECT=$(basename "${GERRIT_PROJECT}") sed -i "s|PLACEHOLDER_PROJECT|${PROJECT}|g" sonar-project.properties sed -i "s|PLACEHOLDER_PACKAGE_VERSION|${pkg_version}|g" sonar-project.properties cat sonar-project.properties After preparing the SonarQube file (build step), add the following: Locate "Build Steps" and Click on Add build step -> Execute SonarQube Scanner Add the following information: Job Environment Variables SONAR_HOST_URL Environment Variable In a Jenkins Job: Used by SONARQUBE SCAN PREPARATION Job. See SonarQube Scan Preparation SCA - Finite State Setup Finite State integration does not require much from the Jenkins Server: Ensure Java is installed (should already have been done): sudo apt install openjdk-21-jdk Locate your finitestate.jar file (per sub-repo, root, etc.) Test finitestate.jar file: > java -jar finitestate.jar --version Must use --name to specify project name Use --help to see the available options FiniteState CLT version=v0.1.25 Initiate Finite State Scan on an unencrypted binary image: # FINITESTATE SCA SCAN # - Locates generated firmware binary files # - Executes security analysis using FiniteState tool JAR_FILE=$(find . -name "finitestate.jar" -print) JAR_FILE=$(realpath $JAR_FILE) if [ -z "$JAR_FILE" ]; then echo "Error: finitestate.jar not found in the current directory or its subdirectories." else echo "JAR_FILE is set to: $JAR_FILE" fi cd $WORKSPACE BIN_FILE=$(find . -name "*V2-up*.bin" -print) java -jar $JAR_FILE --name="SCR_BE65Pro" --version="0.0.1" --upload=sca,sast,config,vulnerability_analysis $(realpath $BIN_FILE)
12-20
修改后的cmakelists.txt文件为: cmake_minimum_required(VERSION 3.0.2) project(ur_msgs) # 避免DEPRECATION警告 if(POLICY CMP0048) cmake_policy(SET CMP0048 NEW) endif() # 1. 声明编译依赖 find_package(catkin REQUIRED COMPONENTS message_generation std_msgs geometry_msgs actionlib_msgs ) # 消息文件路径 add_message_files( DIRECTORY msg # 单层目录 FILES Analog.msg Digital.msg IOStates.msg RobotStateRTMsg.msg MasterboardDataMsg.msg RobotModeDataMsg.msg ToolDataMsg.msg ) # 2. 设置消息、服务、动作文件 set(msg_files Analog.msg Digital.msg IOStates.msg RobotStateRTMsg.msg MasterboardDataMsg.msg RobotModeDataMsg.msg ToolDataMsg.msg ) set(srv_files SetAnalogOutput.srv SetPayload.srv SetSpeedSliderFraction.srv SetIO.srv GetRobotSoftwareVersion.srv SetForceMode.srv ) set(action_files action/ToolContact.action action/FollowJointTrajectoryUntil.action ) # 3. 添加消息、服务、动作文件 add_message_files( FILES ${msg_files} ) add_service_files( FILES ${srv_files} ) # 注意:在ROS1中,使用add_action_files需要确保actionlib_msgs已被依赖 add_action_files( FILES ${action_files} ) # 4. 生成消息、服务和动作 generate_messages( DEPENDENCIES std_msgs geometry_msgs control_msgs trajectory_msgs actionlib_msgs # 动作文件生成的消息会依赖actionlib_msgs ) # 5. 配置catkin包(必须,且必须在generate_messages之后) catkin_package( CATKIN_DEPENDS message_runtime std_msgs geometry_msgs control_msgs trajectory_msgs actionlib_msgs ) 修改后编译报错: 正在执行任务: catkin_make Base path: /home/robot/demo01_ws Source space: /home/robot/demo01_ws/src Build space: /home/robot/demo01_ws/build Devel space: /home/robot/demo01_ws/devel Install space: /home/robot/demo01_ws/install #### #### Running command: "cmake /home/robot/demo01_ws/src -DCATKIN_DEVEL_PREFIX=/home/robot/demo01_ws/devel -DCMAKE_INSTALL_PREFIX=/home/robot/demo01_ws/install -G Unix Makefiles" in "/home/robot/demo01_ws/build" #### -- Using CATKIN_DEVEL_PREFIX: /home/robot/demo01_ws/devel -- Using CMAKE_PREFIX_PATH: /home/robot/demo01_ws/devel/.private/catkin_tools_prebuild;/home/robot/UR5-Pick-and-Place-Simulation-main/catkin_ws/devel;/opt/ros/noetic -- This workspace overlays: /home/robot/UR5-Pick-and-Place-Simulation-main/catkin_ws/devel;/opt/ros/noetic -- Found PythonInterp: /usr/bin/python3 (found suitable version "3.8.10", minimum required is "3") -- Using PYTHON_EXECUTABLE: /usr/bin/python3 -- Using Debian Python package layout -- Using empy: /usr/lib/python3/dist-packages/em.py -- Using CATKIN_ENABLE_TESTING: ON -- Call enable_testing() -- Using CATKIN_TEST_RESULTS_DIR: /home/robot/demo01_ws/build/test_results -- Forcing gtest/gmock from source, though one was otherwise available. -- Found gtest sources under '/usr/src/googletest': gtests will be built -- Found gmock sources under '/usr/src/googletest': gmock will be built CMake Deprecation Warning at /usr/src/googletest/CMakeLists.txt:4 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. CMake Deprecation Warning at /usr/src/googletest/googlemock/CMakeLists.txt:45 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. CMake Deprecation Warning at /usr/src/googletest/googletest/CMakeLists.txt:56 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. -- Found PythonInterp: /usr/bin/python3 (found version "3.8.10") -- Using Python nosetests: /usr/bin/nosetests3 -- catkin 0.8.12 -- BUILD_SHARED_LIBS is on -- BUILD_SHARED_LIBS is on WARNING: Package name "levelManager" does not follow the naming conventions. It should start with a lower case letter and only contain lower case letters, digits, underscores, and dashes. WARNING: Package name "robotName_description" does not follow the naming conventions. It should start with a lower case letter and only contain lower case letters, digits, underscores, and dashes. -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ~~ traversing 37 packages in topological order: -- ~~ - robotiq (metapackage) -- ~~ - robotiq_2f_140_gripper_visualization -- ~~ - robotiq_2f_85_gripper_visualization -- ~~ - robotiq_2f_c2_gripper_visualization -- ~~ - robotiq_3f_gripper_articulated_gazebo -- ~~ - robotiq_3f_gripper_articulated_msgs -- ~~ - universal_robots (metapackage) -- ~~ - ur_msgs -- ~~ - plumbing_param_server -- ~~ - plumbing_pub_sub -- ~~ - plumbing_server_client -- ~~ - plumbing_test -- ~~ - robotiq_ethercat -- ~~ - robotiq_2f_gripper_control -- ~~ - robotiq_ft_sensor -- ~~ - robotiq_modbus_rtu -- ~~ - robotiq_modbus_tcp -- ~~ - robotiq_2f_140_gripper_gazebo -- ~~ - robotiq_2f_85_gripper_gazebo -- ~~ - robotiq_2f_gripper_action_server -- ~~ - robotiq_3f_gripper_control -- ~~ - rosbag_demo -- ~~ - robotiq_3f_gripper_joint_state_publisher -- ~~ - tf01_static -- ~~ - tf03_tfs -- ~~ - tf02_dynamic -- ~~ - tf04_test -- ~~ - ur5_moveit_config -- ~~ - ur_description -- ~~ - ur_gazebo -- ~~ - robotiq_3f_gripper_articulated_gazebo_plugins -- ~~ - robotiq_3f_gripper_visualization -- ~~ - robotiq_3f_rviz -- ~~ - ur_kinematics -- ~~ - nav_demo -- ~~ - urdf01_rviz -- ~~ - urdf02_gazebo -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- +++ processing catkin metapackage: 'robotiq' -- ==> add_subdirectory(robotiq-noetic-devel/robotiq) CMake Deprecation Warning at robotiq-noetic-devel/robotiq/CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. -- +++ processing catkin package: 'robotiq_2f_140_gripper_visualization' -- ==> add_subdirectory(robotiq-noetic-devel/robotiq_2f_140_gripper_visualization) CMake Deprecation Warning at robotiq-noetic-devel/robotiq_2f_140_gripper_visualization/CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. -- +++ processing catkin package: 'robotiq_2f_85_gripper_visualization' -- ==> add_subdirectory(robotiq-noetic-devel/robotiq_2f_85_gripper_visualization) CMake Deprecation Warning at robotiq-noetic-devel/robotiq_2f_85_gripper_visualization/CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. -- +++ processing catkin package: 'robotiq_2f_c2_gripper_visualization' -- ==> add_subdirectory(robotiq-noetic-devel/robotiq_2f_c2_gripper_visualization) CMake Deprecation Warning at robotiq-noetic-devel/robotiq_2f_c2_gripper_visualization/CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. -- +++ processing catkin package: 'robotiq_3f_gripper_articulated_gazebo' -- ==> add_subdirectory(robotiq-noetic-devel/robotiq_3f_gripper_articulated_gazebo) CMake Deprecation Warning at robotiq-noetic-devel/robotiq_3f_gripper_articulated_gazebo/CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. -- +++ processing catkin package: 'robotiq_3f_gripper_articulated_msgs' -- ==> add_subdirectory(robotiq-noetic-devel/robotiq_3f_gripper_articulated_msgs) CMake Deprecation Warning at robotiq-noetic-devel/robotiq_3f_gripper_articulated_msgs/CMakeLists.txt:1 (cmake_minimum_required): Compatibility with CMake < 2.8.12 will be removed from a future version of CMake. Update the VERSION argument <min> value or use a ...<max> suffix to tell CMake that the project does not need compatibility with older versions. -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy -- robotiq_3f_gripper_articulated_msgs: 2 messages, 0 services -- +++ processing catkin metapackage: 'universal_robots' -- ==> add_subdirectory(universal_robot-noetic-devel/universal_robots) -- +++ processing catkin package: 'ur_msgs' -- ==> add_subdirectory(ur_msgs-humble-devel) -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy CMake Error at /opt/ros/noetic/share/catkin/cmake/assert.cmake:20 (message): Assertion failed: file '/home/robot/demo01_ws/src/ur_msgs-humble-devel/action/action/ToolContact.action' does not exist. Message: action file not found Call Stack (most recent call first): /opt/ros/noetic/share/actionlib_msgs/cmake/actionlib_msgs-extras.cmake:35 (assert_file_exists) ur_msgs-humble-devel/CMakeLists.txt:69 (add_action_files) -- Configuring incomplete, errors occurred! See also "/home/robot/demo01_ws/build/CMakeFiles/CMakeOutput.log". See also "/home/robot/demo01_ws/build/CMakeFiles/CMakeError.log". Invoking "cmake" failed * 终端进程“/usr/bin/bash '-c', 'catkin_make'”已终止,退出代码: 1。 * 终端将被任务重用,按任意键关闭。 无视warning部分,只关注ur_msgs编译报错,基于此分析原因并解决,不要编造内容
11-21
根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值