缓存

import  java.util.Collection;
import  java.util.Collections;
import  java.util.Iterator;
import  java.util.List;
import  java.util.Map;
import  java.util.concurrent.ConcurrentHashMap;
 
import  org.springframework.beans.factory.annotation.Autowired;
import  org.springframework.stereotype.Component;
 
import  net.blogjava.frankiegao123.log.slf4j.Log;
import  net.blogjava.frankiegao123.log.slf4j.LogFactory;
 
/**
  * <p>System.Config 配置缓存</p>
  *
  * @author frankiegao123
  * 2010-6-10 下午02:48:35
  */
@Component ( "configCache" )
public  class  ConfigCache  implements  ConfigService {
 
     private  final  static  Log log = LogFactory.getLog(ConfigCache. class );
 
     /**
      * 更新缓存时记录的时间
      */
     private  volatile  long  time = 0L;
 
     /**
      * 正在更新缓存时的门闩,为 true 时表示当前没有更新缓存,为 true 时表示当前正在更新缓存
      */
     private  volatile  boolean  updateGate =  true ;
 
     /**
      * 缓存容器
      */
     private  Map<String, SysConfig> cache =  new  ConcurrentHashMap<String, SysConfig>();
 
     private  CommonDao commonDao;
 
     @Autowired
     public  ConfigCache(CommonDao commonDao) {
         this .commonDao = commonDao;
         log.info( "initializing cache..." );
         refreshCache();
         time = System.currentTimeMillis();
         log.info( "initialized cache finished, cache size: {}, set cache time to current: {}, cache timeout: {}ms" , cache.size(), time, ConfigConstant.CACHE_TIMEOUT);
     }
 
     /**
      * <p>根据配置的键名获取配置值</p>
      *
      * @param configKey
      * @return
      * @author frankiegao123
      * 2010-6-10 上午11:18:33
      */
     public  SysConfig getSysConfig(String configKey) {
         long  current = System.currentTimeMillis();
         if (updateGate && isTimeout(current)) {
             synchronized  ( this ) {
                 if (updateGate) {
                     timeoutSynRefresh(current);
                 }
             }
         }
         return  cache.get(configKey);
     }
 
     /**
      * <p>超时时更新缓存。该方法需要在同步环境中调用</p>
      * @param current
      * @author frankiegao123
      * 2010-6-10 上午11:16:30
      */
     private  void  timeoutSynRefresh( long  current) {
         updateGate =  false ;
         log.info( "refresh cache start..., time out: {}, size: {}, set updateGate to false" , (current - time) /  1000.0 , cache.size());
         try  {
             refreshCache();
             time = current;
             log.info( "refresh cache finished, size after update: {}, set cache time to current: {}" , cache.size(), String.valueOf(time));
         catch  (Exception e) {
             log.error( "refresh cache failed" , e);
         finally  {
             updateGate =  true ;
             log.info( "refresh cache finished, set updateGate to true" );
         }
     }
 
     /**
      * <p>更新缓存数据</p>
      *
      * @author frankiegao123
      * 2010-6-10 上午11:15:55
      */
     private  void  refreshCache() {
         List<SysConfig> configs = commonDao.getSysConfigs();
         for (Iterator<SysConfig> i = configs.iterator(); i.hasNext(); ) {
             SysConfig config = i.next();
             cache.put(config.getKey(), config);
         }
         commonDao.clear();
         SysConfig config = cache.get(SysConfig.TEST_KEY);
         if (config ==  null ) {
             log.error( "refresh cache, cannot find TEST_KEY" );
         else  {
             log.info( "refresh cache, find TEST_KEY = [{}]" , config.getValue());
         }
     }
 
     /**
      * <p>缓存是否超时</p>
      *
      * @param current
      * @return
      * @author frankiegao123
      * 2010-6-10 上午11:16:12
      */
     private  boolean  isTimeout( long  current) {
         return  (current - time >= ConfigConstant.CACHE_TIMEOUT);
     }
 
     Collection<SysConfig> getSysConfigs() {
         return  Collections.unmodifiableCollection(cache.values());
     }
 
     int  getSize() {
         return  cache.size();
     }
 
     long  getTime() {
         return  time;
     }
 
     boolean  isUpdateGate() {
         return  updateGate;
     }
 
     void  refresh() {
         time = 0L;
         log.info( "refresh: reset cache time to 0" );
         getSysConfig( "none" );
         log.info( "refresh: refresh cache finished, cache: {0}" , String.valueOf(time));
     }
}

1:设定超时时间,当某一请求来到时缓存超过限定时间时,重新刷新缓存。没有请求来时,即便超时了也不会去主动刷新,待下一个请求来就会刷新了。
2:在刷新缓存的过程中,若有其他请求来时,这些请求继续使用旧的数据。(这一点之前考虑了很久,最后确定为这一方案,否则有一个在刷新缓存时会阻塞很多的线程。)
【6层】一字型框架办公楼(含建筑结构图、计算书) 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值