国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

實(shí)戰(zhàn)篇之基于二進(jìn)制思想的用戶標(biāo)簽系統(tǒng)(Mysql+SpringBoot)

這篇具有很好參考價(jià)值的文章主要介紹了實(shí)戰(zhàn)篇之基于二進(jìn)制思想的用戶標(biāo)簽系統(tǒng)(Mysql+SpringBoot)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??????? 一: 計(jì)算機(jī)中的二進(jìn)制

????????計(jì)算機(jī)以二進(jìn)制表示數(shù)據(jù),以表示電路中的正反。在二進(jìn)制下,一個(gè)位只有 0 和 1 。逢二進(jìn)一 位。類似十進(jìn)制下,一個(gè)位只有 0~9 。逢十進(jìn)一位。

????????二: 進(jìn)制常用運(yùn)算 (位運(yùn)算)

  • 與運(yùn)算(&):將兩個(gè)二進(jìn)制數(shù)的對(duì)應(yīng)位進(jìn)行與操作,只有當(dāng)兩個(gè)位都為1時(shí),結(jié)果為1。
  • 或運(yùn)算(|):將兩個(gè)二進(jìn)制數(shù)的對(duì)應(yīng)位進(jìn)行或操作,只要有一個(gè)位為1,結(jié)果就為1。
  • 非運(yùn)算(~):對(duì)一個(gè)二進(jìn)制數(shù)的每個(gè)位取反,將1變?yōu)?,將0變?yōu)?。
  • 異或運(yùn)算(^):將兩個(gè)二進(jìn)制數(shù)的對(duì)應(yīng)位進(jìn)行異或操作,只有當(dāng)兩個(gè)位不同時(shí),結(jié)果為1。
  • 左移運(yùn)算(<<):將一個(gè)二進(jìn)制數(shù)的所有位向左移動(dòng)指定的位數(shù),右邊空出的位用0填充。
  • 右移運(yùn)算(>>):將一個(gè)二進(jìn)制數(shù)的所有位向右移動(dòng)指定的位數(shù),左邊空出的位用原來的最高位填充。 這些二進(jìn)制的運(yùn)算在計(jì)算機(jī)的邏輯設(shè)計(jì)、編程和數(shù)據(jù)處理中經(jīng)常使用。
  • 無符號(hào)右移( >>> , 無符號(hào)右移就是右移之后,無論該數(shù)為正還是為負(fù),右移之后左邊都是補(bǔ)上 0

??????? 三: 標(biāo)簽記錄的實(shí)現(xiàn)原理

??????? 基于(或)|,與+取反(&~) 去實(shí)現(xiàn):

??????? 假設(shè)我們給用戶添加的標(biāo)簽是一個(gè)數(shù)字 16 ,轉(zhuǎn)換為二進(jìn)制就是 10000
?????? 1.設(shè)置標(biāo)簽? 使用 或(|) (參加運(yùn)算的兩個(gè)位只要有一個(gè)為 1 ,其值為 1
實(shí)戰(zhàn)篇之基于二進(jìn)制思想的用戶標(biāo)簽系統(tǒng)(Mysql+SpringBoot),java,開發(fā)語言

????????

????????2.取消標(biāo)簽 與 + 取反(&~)(兩位同時(shí)為 1,結(jié)果才為 1,否則為 0取消16這個(gè)標(biāo)簽

實(shí)戰(zhàn)篇之基于二進(jìn)制思想的用戶標(biāo)簽系統(tǒng)(Mysql+SpringBoot),java,開發(fā)語言

??????? 四:一起動(dòng)手實(shí)現(xiàn)用戶標(biāo)簽系統(tǒng) - 底層標(biāo)簽讀寫組件的實(shí)現(xiàn)

??????? ????????4.1: 建立用戶標(biāo)簽表SQL

CREATE TABLE `t_user_tag` (
 `user_id` bigint NOT NULL DEFAULT -1 COMMENT '用戶 id',
 `tag_info_01` bigint NOT NULL DEFAULT '0' COMMENT '標(biāo)簽記錄字段',
 `tag_info_02` bigint NOT NULL DEFAULT '0' COMMENT '標(biāo)簽記錄字段',
 `tag_info_03` bigint NOT NULL DEFAULT '0' COMMENT '標(biāo)簽記錄字段',
 `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)
間',
 `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE 
CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
 PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_bin 
COMMENT='用戶標(biāo)簽記錄';

??????????????? 4.2:service層接口

package com.laoyang.provider.service;

import com.laoyang.constants.UserTagsEnum;

/**
 * @author:Kevin
 * @create: 2023-08-01 09:53
 * @Description:
 */

public interface IUserTagService {

    /**
     * 設(shè)置標(biāo)簽 只能設(shè)置成功一次
     *
     * @param userId
     * @param userTagsEnum
     * @return
     */
    boolean setTag(Long userId, UserTagsEnum userTagsEnum);
    /**
     * 取消標(biāo)簽
     *
     * @param userId
     * @param userTagsEnum
     * @return
     */
    boolean cancelTag(Long userId, UserTagsEnum userTagsEnum);
    /**
     * 是否包含某個(gè)標(biāo)簽
     *
     * @param userId
     * @param userTagsEnum
     * @return
     */
    boolean containTag(Long userId,UserTagsEnum userTagsEnum);
}
??????????????? 4.3: service實(shí)現(xiàn)接口
package com.laoyang.provider.service.impl;

import com.laoyang.common.utils.ConvertBeanUtils;
import com.laoyang.constants.UserTagFieldNameConstants;
import com.laoyang.constants.UserTagsEnum;
import com.laoyang.dto.UserTagDTO;
import com.laoyang.framework.redis.key.UserProviderCacheKeyBuilder;
import com.laoyang.provider.dao.mapper.IUserTagMapper;
import com.laoyang.provider.dao.po.UserTagPO;
import com.laoyang.provider.service.IUserTagService;
import com.laoyang.usils.TagInfoUtils;
import jakarta.annotation.Resource;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

import java.nio.charset.StandardCharsets;

/**
 * @author:Kevin
 * @create: 2023-08-01 09:54
 * @Description:
 */

public class UserTagServiceImpl implements IUserTagService {

    @Resource
    private IUserTagMapper userTagMapper;
    @Resource
    private RedisTemplate<String, String> redisTemplate;

    private RedisTemplate<String, UserTagDTO> userTagDTORedisTemplate;

    @Resource
    private UserProviderCacheKeyBuilder cacheKeyBuilder;

    @Override
    public boolean setTag(Long userId, UserTagsEnum userTagsEnum) {
        boolean updateStatus = userTagMapper.setTag(userId,userTagsEnum.getFieldName(),userTagsEnum.getTag()) > 0;
        if (updateStatus){
            String redisKey = cacheKeyBuilder.buildtagInfoKey(userId);
            userTagDTORedisTemplate.delete(redisKey);
            return  true;
        }
        String key = cacheKeyBuilder.buildTagLockKey(userId);
        //TODO 分布式鎖 實(shí)現(xiàn)多個(gè)線程之間對(duì)同一個(gè)資源的互斥訪問,保證同一時(shí)間只有一個(gè)線程能夠獲取到鎖并執(zhí)行相應(yīng)的操作
        String setNxResult = redisTemplate.execute(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                RedisSerializer keySerializer = redisTemplate.getKeySerializer();
                RedisSerializer valueSerializer = redisTemplate.getValueSerializer();
                String result = (String) connection.execute("set", keySerializer.serialize(key),
                        valueSerializer.serialize("-1"),
                        "NX".getBytes(StandardCharsets.UTF_8),
                        "EX".getBytes(StandardCharsets.UTF_8),
                        "3".getBytes(StandardCharsets.UTF_8));
                return result;
            }
        });

        if (!"OK".equals(setNxResult)){
            return false;
        }

        UserTagPO userTagPO = userTagMapper.selectById(userId);
        if (userTagPO!=null){
            return false;
        }
        userTagPO = new UserTagPO();
        userTagPO.setUserId(userId);
        userTagMapper.insert(userTagPO);
        updateStatus = userTagMapper.setTag(userId,userTagsEnum.getFieldName(),userTagsEnum.getTag()) > 0;
        redisTemplate.delete(key);
        return updateStatus;
    }

    @Override
    public boolean cancelTag(Long userId, UserTagsEnum userTagsEnum) {
        boolean cancleStatus = userTagMapper.cancelTag(userId,userTagsEnum.getFieldName(),userTagsEnum.getTag()) > 0;
        if (cancleStatus){
            return false;
        }
        String redisKey = cacheKeyBuilder.buildtagInfoKey(userId);
        userTagDTORedisTemplate.delete(redisKey);
        return true;
    }

    @Override
    public boolean containTag(Long userId, UserTagsEnum userTagsEnum) {
        UserTagDTO userTagDTO = this.queryByUserId(userId);
        if (userTagDTO == null) {
            return false;
        }
        String queryFieldName = userTagsEnum.getFieldName();
        if
        (UserTagFieldNameConstants.TAG_INFO_01.equals(queryFieldName)) {
            return
                    TagInfoUtils.isContain(userTagDTO.getTagInfo01(),
                            userTagsEnum.getTag());
        } else if
        (UserTagFieldNameConstants.TAG_INFO_02.equals(queryFieldName)) {
            return
                    TagInfoUtils.isContain(userTagDTO.getTagInfo02(),
                            userTagsEnum.getTag());
        } else if
        (UserTagFieldNameConstants.TAG_INFO_03.equals(queryFieldName)) {
            return
                    TagInfoUtils.isContain(userTagDTO.getTagInfo03(),
                            userTagsEnum.getTag());
        }
        return false;
    }

    /**
     * 從redis查詢用戶標(biāo)簽
     * @param userId
     * @return
     */
    private UserTagDTO queryByUserId(Long userId){
        String redisKey = cacheKeyBuilder.buildtagInfoKey(userId);
        UserTagDTO userTagDTO = userTagDTORedisTemplate.opsForValue().get(redisKey);
        if (userTagDTO != null){
            return userTagDTO;
        }
        UserTagPO userTagPO = userTagMapper.selectById(userId);
        if (userTagPO == null){
            return null;
        }
        userTagDTO = ConvertBeanUtils.convert(userTagPO,UserTagDTO.class);
        userTagDTORedisTemplate.opsForValue().set(redisKey, userTagDTO);

        return userTagDTO;

    }


}

??????? 說明:我們使用了redis作為緩存,mybatisplus, 并自行創(chuàng)建了redis業(yè)務(wù)主鍵生成工具類等等,會(huì)放在最后,先把核心代碼呈現(xiàn)。這里說明下使用到了redis分布式實(shí)現(xiàn)

這段代碼是使用RedisTemplate執(zhí)行一個(gè)"set"命令,并設(shè)置了一些選項(xiàng)參數(shù)。下面對(duì)代碼進(jìn)行解釋:

  1. 首先,通過redisTemplate.getKeySerializer()獲取key的序列化器,通過redisTemplate.getValueSerializer()獲取value的序列化器。
  2. 在RedisCallback的doInRedis方法中,通過RedisConnection的execute方法執(zhí)行"set"命令。
  3. 參數(shù)中,keySerializer.serialize(key)將key序列化為字節(jié)數(shù)組,valueSerializer.serialize("-1")將value序列化為字節(jié)數(shù)組。
  4. "NX".getBytes(StandardCharsets.UTF_8)表示設(shè)置NX選項(xiàng),即只有在key不存在時(shí)才進(jìn)行set操作。
  5. "EX".getBytes(StandardCharsets.UTF_8)表示設(shè)置EX選項(xiàng),即設(shè)置key的過期時(shí)間為3秒。
  6. "3".getBytes(StandardCharsets.UTF_8)表示設(shè)置key的過期時(shí)間為3秒。
  7. connection.execute方法返回的是一個(gè)Object類型的結(jié)果,需要將其轉(zhuǎn)換為String類型并返回。 總體來說,這段代碼的作用是在Redis中執(zhí)行一個(gè)set命令,將key和value存儲(chǔ)到Redis中,并設(shè)置了過期時(shí)間和NX選項(xiàng),確保只有在key不存在時(shí)才進(jìn)行set操作。

????????

????????當(dāng)多個(gè)節(jié)點(diǎn)同時(shí)嘗試執(zhí)行set操作來設(shè)置同一個(gè)key時(shí),只有一個(gè)節(jié)點(diǎn)能夠成功設(shè)置,因?yàn)镽edis中的set命令默認(rèn)具有原子性。如果設(shè)置了NX選項(xiàng),即只有在key不存在時(shí)才進(jìn)行set操作,那么只有第一個(gè)節(jié)點(diǎn)能夠成功設(shè)置該key,其他節(jié)點(diǎn)將無法設(shè)置。 通過利用這個(gè)特性,可以將某個(gè)共享資源對(duì)應(yīng)的key作為鎖的名稱,多個(gè)節(jié)點(diǎn)試圖通過set操作來競(jìng)爭(zhēng)該鎖。只有一個(gè)節(jié)點(diǎn)能夠成功設(shè)置該鎖的key,即獲得了分布式鎖。其他節(jié)點(diǎn)則在設(shè)置失敗后,可以選擇等待或者進(jìn)行其他處理。 同時(shí),為了避免因?yàn)槟硞€(gè)節(jié)點(diǎn)獲得鎖后發(fā)生故障而導(dǎo)致鎖一直無法釋放,還可以為鎖設(shè)置過期時(shí)間。當(dāng)鎖的持有者在一定時(shí)間后未能釋放鎖,鎖將自動(dòng)過期并被其他節(jié)點(diǎn)獲取。 綜上所述,通過使用Redis的set操作和一些選項(xiàng)參數(shù),可以實(shí)現(xiàn)簡(jiǎn)單的分布式鎖。多個(gè)節(jié)點(diǎn)可以通過競(jìng)爭(zhēng)設(shè)置同一個(gè)key來獲得鎖,并通過設(shè)置過期時(shí)間來避免因?yàn)殒i的持有者發(fā)生故障而導(dǎo)致鎖一直無法釋放。

??????????????? 4.4: Mapper層
package com.laoyang.provider.dao.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.laoyang.provider.dao.po.UserTagPO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Update;

/**
 * @author:Kevin
 * @create: 2023-08-01 09:54
 * @Description:
 */
@Mapper
public interface IUserTagMapper extends BaseMapper<UserTagPO> {

    /**
     * 使用或的思路來設(shè)置標(biāo)簽,只能允許第一次設(shè)置成功
     * @param userId
     * @param fieldName
     * @param tag
     * @return
     */
    @Update("update t_user_tag set ${fieldName}=${fieldName} | #{tag} where user_id=#{userId} and ${fieldName} & #{tag}=0")
    int setTag(Long userId, String fieldName, long tag);


    /**
     * 使用先取反在與的思路來取消標(biāo)簽,只能允許第一次刪除成功
     * @param userId
     * @param fieldName
     * @param tag
     * @return
     */
    @Update("update t_user_tag set ${fieldName}=${fieldName} &~ #{tag} where user_id=#{userId} and ${fieldName} & #{tag}=#{tag}")
    int cancelTag(Long userId, String fieldName, long tag);
}

??????? 說明:這里的sql可以參考開頭看到的實(shí)現(xiàn)原理

??????? 4.5 工具類

??????? 4.5.1:對(duì)象轉(zhuǎn)換類

package com.laoyang.common.utils;

import org.springframework.beans.BeanInstantiationException;
import org.springframework.beans.BeanUtils;

import java.util.ArrayList;
import java.util.List;


/**
 * @author:Kevin
 * @create: 2023-07-29 15:03
 * @Description:
 */

public class ConvertBeanUtils {

    /**
     * 將一個(gè)對(duì)象轉(zhuǎn)成目標(biāo)對(duì)象
     */
     public static <T> T convert(Object source,Class<T> targetClass){
         if (source == null){
             return null;
         }
         T t = newInstance(targetClass);
         BeanUtils.copyProperties(source,t);
         return t;
     }

    /**
     * 將List對(duì)象轉(zhuǎn)換成目標(biāo)對(duì)象
     */
    public static <K,T> List<T> convertList(List<K> sourceList, Class<T> targetClass){
        if (sourceList == null){
            return null;
        }
        List targetlist = new ArrayList((int) (sourceList.size() / 0.75) + 1);
        for (K source : sourceList) {
            targetlist.add(source);

        }
        return targetlist;
    }

    private static <T> T newInstance(Class<T> targetClass){
        try {
            return targetClass.newInstance();
        }catch (Exception e){
            throw new BeanInstantiationException(targetClass,"instantiation error",e);

        }

    }


}

????????調(diào)用實(shí)例:第一個(gè)參數(shù):要轉(zhuǎn)的對(duì)象? 第二個(gè)參數(shù):最終轉(zhuǎn)換成的對(duì)象類

userTagDTO = ConvertBeanUtils.convert(userTagPO,UserTagDTO.class);

??????? 4.5.2 redis業(yè)務(wù)封裝key的工具類(繼承實(shí)現(xiàn))

??????????????? 父類

package com.laoyang.framework.redis.key;

import org.springframework.beans.factory.annotation.Value;

/**
 * @author:Kevin
 * @create: 2023-07-30 16:37
 * @Description:
 */

public class RedisKeyBuilder {

    #獲取到對(duì)應(yīng)業(yè)務(wù)主題的名稱
    @Value("${spring.application.name}")
    private String applicationName;

    private static final String SPLIT_ITEM = ":";

    public String getSplitItem() {
        return SPLIT_ITEM;
    }

    public String getRrefix(){
        return applicationName + SPLIT_ITEM;
    }
}

??????? ?????? 子類

package com.laoyang.framework.redis.key;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

/**
 * @author:Kevin
 * @create: 2023-07-30 16:41
 * @Description:    用戶中臺(tái)的redis的key的封裝工具類,生成這個(gè)業(yè)務(wù)字段的key
 */
@Configuration
@Conditional(RedisKeyLoadMatch.class)
public class UserProviderCacheKeyBuilder extends RedisKeyBuilder{

    private static String USER_INFO_KEY = "userInfo";
    private static String USER_TAG_LOCK_KEY = "userTagLock";
    private static String USER_TAG_KEY = "userTag";

    private static String USER_PHONE_LIST_KEY = "userPhoneList";
    private static String USER_PHONE_OBJ_KEY = "userPhoneObj";

    private static String USER_LOGIN_TOKEN_KEY = "userLoginToken";

    public String buildUserInfoKey(Long userId) {
        return super.getRrefix() + USER_INFO_KEY + super.getSplitItem() + userId;
    }

    public String buildTagLockKey(Long userId){
        return super.getRrefix() + USER_TAG_LOCK_KEY + super.getSplitItem() + userId;
    }

    public String buildtagInfoKey(Long userId){
        return super.getRrefix() + USER_TAG_KEY + super.getSplitItem() + userId;
    }

    public String buildUserPhoneListKey(Long userId) {
        return super.getRrefix() + USER_PHONE_LIST_KEY + super.getSplitItem() + userId;
    }

    public String buildUserPhoneObjKey(String phone) {
        return super.getRrefix() + USER_PHONE_OBJ_KEY + super.getSplitItem() + phone;
    }

    public String buildUserLoginTokenKey(String tokenKey) {
        return super.getRrefix() + USER_LOGIN_TOKEN_KEY + super.getSplitItem() + tokenKey;
    }

}

??????????????? 4.5.3 po類文章來源地址http://www.zghlxwxcb.cn/news/detail-652187.html

package com.laoyang.provider.dao.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.Date;

/**
 * @author:Kevin
 * @create: 2023-08-01 09:56
 * @Description:
 */
@Data
@TableName("t_user_tag")
public class UserTagPO {

    @TableId(type = IdType.INPUT)
    private Long userId;
    @TableField(value = "tag_info_01")
    private Long tagInfo01;
    @TableField(value = "tag_info_02")
    private Long tagInfo02;
    @TableField(value = "tag_info_03")
    private Long tagInfo03;
    private Date createTime;
    private Date updateTime;


}

到了這里,關(guān)于實(shí)戰(zhàn)篇之基于二進(jìn)制思想的用戶標(biāo)簽系統(tǒng)(Mysql+SpringBoot)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL主從復(fù)制基于二進(jìn)制日志的高可用架構(gòu)指南

    在現(xiàn)代數(shù)據(jù)庫架構(gòu)中,MySQL主從復(fù)制技術(shù)扮演著重要角色。它不僅可以提升數(shù)據(jù)庫性能和可擴(kuò)展性,還賦予系統(tǒng)卓越的高可用性和災(zāi)難恢復(fù)能力。本文將深入剖析MySQL主從復(fù)制的內(nèi)部機(jī)制,同時(shí)通過一個(gè)實(shí)際案例,展示其在實(shí)際場(chǎng)景中的強(qiáng)大作用。 MySQL主從復(fù)制基于二進(jìn)制日志

    2024年02月13日
    瀏覽(47)
  • 基于ansible的自動(dòng)化二進(jìn)制模式部署高可用Kubernetes集群

    基于ansible的自動(dòng)化二進(jìn)制模式部署高可用Kubernetes集群

    【說明】 本文檔詳細(xì)描述了在openEuler 22.03 LTS上通過ansible以二進(jìn)制模式自動(dòng)化部署高可用Kubernetes集群(適用k8s v1.26版本)。 本文檔參考了小陳運(yùn)維的ansible劇本,并進(jìn)行了適當(dāng)改造,使之適用于openEuler 22.03 LTS,并改用nginx實(shí)現(xiàn)高可用;僅采用containerd作為容器運(yùn)行時(shí);采用ca

    2024年02月08日
    瀏覽(30)
  • 主從版本升級(jí)_主從_8.0.32_軟鏈接_基于二進(jìn)制日志文件

    將一套MySQL 8.0.32主從環(huán)境版本升級(jí)到8.0.35版本,主從環(huán)境如下: 主服務(wù)器 登錄賬號(hào)密碼 端口 當(dāng)前版本 目標(biāo)版本 主服務(wù)器 59.217.250.226 root/topnet@123 3306 8.0.32 8.0.35 從服務(wù)器 59.217.250.227 root/topnet@123 3306 8.0.32 8.0.35 關(guān)鍵步驟如下: 1.斷開應(yīng)用 2.確定主從無延時(shí) 3.關(guān)閉主庫 4.關(guān)閉從

    2024年01月24日
    瀏覽(18)
  • 基于FPGA的3位二進(jìn)制的乘法器VHDL代碼Quartus 開發(fā)板

    基于FPGA的3位二進(jìn)制的乘法器VHDL代碼Quartus 開發(fā)板

    名稱:基于FPGA的3位二進(jìn)制的乘法器VHDL代碼Quartus? 開發(fā)板(文末獲?。?軟件:Quartus 語言:VHDL 代碼功能: 3位二進(jìn)制的乘法器 該乘法器實(shí)現(xiàn)兩個(gè)三位二進(jìn)制的乘法,二極管LED2~LED0顯示輸入的被乘數(shù),LED5~LED3顯示乘數(shù),數(shù)碼管顯示相應(yīng)的十進(jìn)制輸入值和輸出結(jié)果 本代碼已在開

    2024年02月21日
    瀏覽(22)
  • 【特征選擇】基于二進(jìn)制粒子群算法的特征選擇方法(KNN分類器)【Matlab代碼#28】

    【特征選擇】基于二進(jìn)制粒子群算法的特征選擇方法(KNN分類器)【Matlab代碼#28】

    特征選擇是機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘中的一個(gè)重要步驟,其目的是從給定的特征集合中選擇出最具有代表性和相關(guān)性的特征,以提高模型的性能和泛化能力。 群智能算法是受到自然界中群體行為和集體智慧啟發(fā)的一類優(yōu)化算法,其中包括粒子群優(yōu)化算法(Particle Swarm Optimization,

    2024年02月07日
    瀏覽(24)
  • 《Kubernetes部署篇:Ubuntu20.04基于二進(jìn)制安裝安裝kubeadm、kubelet和kubectl》

    《Kubernetes部署篇:Ubuntu20.04基于二進(jìn)制安裝安裝kubeadm、kubelet和kubectl》

    由于客戶網(wǎng)絡(luò)處于專網(wǎng)環(huán)境下, 使用kubeadm工具安裝K8S集群 ,由于無法連通互聯(lián)網(wǎng),所有無法使用apt工具安裝kubeadm、kubelet、kubectl,當(dāng)然你也可以使用apt-get工具在一臺(tái)能夠連通互聯(lián)網(wǎng)環(huán)境的服務(wù)器上下載kubeadm、kubelet、kubectl軟件包,然后拷貝到專網(wǎng)主機(jī)上,通過dpkg工具安裝

    2024年02月10日
    瀏覽(24)
  • MATLAB|基于改進(jìn)二進(jìn)制粒子群算法的含需求響應(yīng)機(jī)組組合問題研究(含文獻(xiàn)和源碼)

    MATLAB|基于改進(jìn)二進(jìn)制粒子群算法的含需求響應(yīng)機(jī)組組合問題研究(含文獻(xiàn)和源碼)

    目錄 主要內(nèi)容??? ??模型研究??? 1.改進(jìn)二進(jìn)制粒子群算法(BPSO) 2.模型分析 ??結(jié)果一覽??? 下載鏈接 該程序復(fù)現(xiàn)《A Modified Binary PSO to solve the Thermal Unit Commitment Problem》,主要做的是一個(gè)考慮需求響應(yīng)的機(jī)組組合問題,首先構(gòu)建了機(jī)組組合問題的基本模型,在此基礎(chǔ)上

    2024年02月19日
    瀏覽(20)
  • 【十進(jìn)制 轉(zhuǎn) 二進(jìn)制】【二進(jìn)制 轉(zhuǎn) 十進(jìn)制】10進(jìn)制 VS 2進(jìn)制【清華大學(xué)考研機(jī)試題】

    【十進(jìn)制 轉(zhuǎn) 二進(jìn)制】【二進(jìn)制 轉(zhuǎn) 十進(jìn)制】10進(jìn)制 VS 2進(jìn)制【清華大學(xué)考研機(jī)試題】

    原題鏈接 本題我們先需要知道 十進(jìn)制 如何轉(zhuǎn) 二進(jìn)制 二進(jìn)制 如何轉(zhuǎn) 十進(jìn)制 十進(jìn)制 如何轉(zhuǎn) 二進(jìn)制: 十進(jìn)制轉(zhuǎn)成二進(jìn)制 例如 173 轉(zhuǎn)成 二進(jìn)制 就把173 短除法 除到0 然后 得到的余數(shù), 從下往上寫 二進(jìn)制 轉(zhuǎn)成 十進(jìn)制 利用如圖方法,把二進(jìn)制 轉(zhuǎn)成 十進(jìn)制 本題是高精度,如何

    2023年04月26日
    瀏覽(31)
  • [論文閱讀] (27) AAAI20 Order Matters: 基于圖神經(jīng)網(wǎng)絡(luò)的二進(jìn)制代碼相似性檢測(cè)(騰訊科恩實(shí)驗(yàn)室)

    [論文閱讀] (27) AAAI20 Order Matters: 基于圖神經(jīng)網(wǎng)絡(luò)的二進(jìn)制代碼相似性檢測(cè)(騰訊科恩實(shí)驗(yàn)室)

    《娜璋帶你讀論文》系列主要是督促自己閱讀優(yōu)秀論文及聽取學(xué)術(shù)講座,并分享給大家,希望您喜歡。由于作者的英文水平和學(xué)術(shù)能力不高,需要不斷提升,所以還請(qǐng)大家批評(píng)指正,非常歡迎大家給我留言評(píng)論,學(xué)術(shù)路上期待與您前行,加油。 前一篇文章介紹Excel論文可視化

    2024年02月14日
    瀏覽(21)
  • 將數(shù)據(jù)轉(zhuǎn)二進(jìn)制流文件,用PostMan發(fā)送二進(jìn)制流請(qǐng)求

    將數(shù)據(jù)轉(zhuǎn)二進(jìn)制流文件,用PostMan發(fā)送二進(jìn)制流請(qǐng)求

    一、將byte數(shù)組轉(zhuǎn)二進(jìn)制流文件,并保存到本地 byte [] oneshotBytes=new byte[]{78,-29,51,-125,86,-105,56,82,-94,-115,-22,-105,0,-45,-48,-114,27,13,38,45,-24,-15,-13,46,88,-90,-66,-29,52,-23,40,-2,116,2,-115,17,36,15,-84,88,-72,22,-86,41,-90,-19,-58,19,99,-4,-63,29,51,-69,117,-120,121,3,-103,-75,44,64,-58,-34,73,-22,110,-90,92,-35,-18,-128,16,-

    2024年02月15日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包