精华内容
下载资源
问答
  • 也想起以前工作中遇到的困难和后来处理的情况。再想起目前的一些困难和状态,有点感慨,顺手写写 被繁杂错乱的项目节奏、各种问题、琐事折磨的很是郁闷,但是抽离的想想,很多是目前项目团队中的老大难问题,...

    绩效管理培训会时,回忆起以前自己做绩效沟通的情况,好像有些情况还可以。也想起以前工作中遇到的困难和后来处理的情况。再想起目前的一些困难和状态,有点感慨,顺手写写


    被繁杂错乱的项目节奏、各种问题、琐事折磨的很是郁闷,但是抽离的想想,很多是目前项目团队中的老大难问题,这些问题很多身在其中的人都清楚,也有人离开,诸多原因,并不是我这个角色和角度能够解决的,需要从团队内部的管理上意识到,着手处理。暂且不说


    当前版本的极度琐碎,也很折磨人,不过从具体的事情里抽离出来细想一下,这是个必经过程,其实不必烦心,理清楚后,排好次序逐个处理就好。

    必经的原因:

    1. 版本定位为“稳定性提升版本”:

    针对主要模块的零散问题定制专门的修复方案,每个模块都有多项待修复点,陆续明确修复方案,阶段性提测;多个模块

    结果必然是多且散,不易计划跟踪管理

    【问题】如何对多且散的版本进行管理,开发方案明确后,提测等方案同步到项管、产品、测试等角色(有可能还需要运维等角色配合)

    多向同步?项管如何汇总管理?

    抛开项管事宜,单独考虑测试:

    明确测试对应的负责人,由负责人具体跟进,及时反馈情况、问题、风险等——可确保测试不脱节

    2. 版本琐碎繁杂高,产品、测试新人等带来沟通成本高

    3. 消息服务,开发人员变动较大,对业务熟悉度较低,沟通成本高、效率低;测试也由新人负责,且整体对这部分掌握的信息较少

    本次完成后需进行总结,汇总信息、积累经验并分享;补充实习人力以保障后续版本测试需要

    4. 过程中插入前端2.1.4、纵横平台、org重构、等其他计划外提测,需及时响应跟进,安排人员、给予基本引导、参与部分会议,了解进度等

    5. 测试组内新鲜血液注入

    多位新人同时加入,部分工作需要独立跟进完成。产品是新的、流程是新的、同事是新的、功能是新的,不是每个人都有人有精力全力帮带

    新人加入后,需根据新人及业务线情况,调整整体的分工

    内审规模扩大,占用时间较多

    6. 临时减员,导致需临时调整分工及任务安排


    其他问题,遗留问题,属非必经的原因:

    1. 用例优化在此版本同步进行,占用精力,但尚未完成

    2. 排期不统一,前端&后台api排期不同步,前端已提测,但是后台api未就绪,步调不一致,整个链路未打通,无法进行测试,且不易监管,尤其涉及到中间上线


    其他:

    测试计划&进度共享到可公共访问,便于更新维护的位置;测试计划虽无人要求评审,但是自己需整理明确

    增加周会汇总信息,周会增加临时的分享,主要为近期经验


    抽离思考的一个好处是,避免一直聚焦在具体的事情上,剥离清楚哪些是能力范围内可处理可控的,不同阶段需要关注的重点是什么,聚焦重点,不可控内容可通过有理有据的反馈推进解决。梳理手头事项,根据情况进行拆分和指派,减少必须由自己处理的非重要琐事,方便更聚焦。

    展开全文
  • Java工作中的并发问题处理方法总结

    热门讨论 2021-02-08 13:24:57
    好像挺久没有写博客了,趁着这段时间比较闲,特来总结一下在业务系统开发过程中遇到的并发问题及解决办法,希望能帮到大家 ???? 问题复现 1. “设备Aの奇怪分身” 时间回到很久很久以前的一个深夜,那时我开发的...

    Java工作中常见的并发问题处理方法总结

    好像挺久没有写博客了,趁着这段时间比较闲,特来总结一下在业务系统开发过程中遇到的并发问题及解决办法,希望能帮到大家 😁

    问题复现

    1. “设备Aの奇怪分身”
    时间回到很久很久以前的一个深夜,那时我开发的多媒体广告播放控制系统刚刚投产上线,公司开出的第一家线下生鲜店里,几十个大大小小的多媒体硬件设备正常联网后,正由我一台一台的注册及接入到已经上线的多媒体广告播控系统中。
    注册过程简述如下:、
    在这里插入图片描述
    每一个设备注册到系统中后,相应的在数据库设备表中都会新增一条记录,来存储这个设备的各项信息。
    本来一切都有条不紊的进行着,直到设备A的注册打破了这默契的宁静……
    设备A注册完成后,我突然发现,数据库设备表中,新增了两条记录,而且是两条一模一样的记录!
    我开始以为自己眼花了……
    仔细一看,确确实实是新增了两条,而且连设备唯一标识(划横线,后面要考)和创建时间都一模一样!
    看着屏幕,我陷入了沉思……
    为什么会有两条呢?
    在我的注册逻辑里,落库之前会先查一遍数据库该设备是否已存在,如果存在就更新已有的,不存在才新增。
    所以我百思不得其解,按这个逻辑,第二条一模一样的数据是哪来的?

    2. 真相背后的并发请求
    经过一番排查及思考,我发现问题可能就出在注册请求上。
    设备A在向云端发送http注册请求时,可能会同时发送多个相同请求。
    云服务器当时部署在多台Docker容器上,通过查看日志发现,有两台容器同时收到了来自设备A的注册请求。
    由此,我推测:
    设备A同时发送了两个注册请求,这两个请求分别在同一时间打到了云端的不同容器上,按照我的注册逻辑,这两个容器接收到注册请求后,同时去查询了数据库的设备表,这时候设备表里还没有设备A的记录,所以两台容器都执行了新增的操作,因为速度很快,所以这两条新增记录在精确到秒的创建时间上,并没有体现出差别。

    3. 并发新增的延伸
    既然并发的新增操作会产生问题,那么并发的更新操作是否会有问题呢?

    解决方法

    解决并发新增
    1. 数据库唯一索引(UNIQUE INDEX)
    在数据库建表的时候,通过对具有唯一性的字段(比如上述的设备唯一标识)创建唯一索引,或对组合起来后就具备唯一性的几个字段创建联合唯一索引。

    这样在并发新增时,只要有一个新增成功,其他的新增操作都会因为数据库抛出的异常(java.sql.SQLIntegrityConstraintViolationException)而失败,我们只需要处理好新增失败的情况就行了。

    注意唯一索引的字段需要非空,因为字段值为空时会导致唯一索引约束失效

    2. java分布式锁
    通过在程序中引入分布式锁,在进行新增操作前需要先获取分布式锁,获取成功才能继续,否则新增失败。

    这样也能解决并发插入带来的数据重复问题,只是引入分布式锁的同时也增加了系统的复杂性,如果要落库的数据上有唯一性字段的话,还是推荐采用唯一索引的方法。

    在构建分布式锁的过程中,我们需要用到Redis,这里以设备注册时使用的分布式锁为例。

    分布式锁简单问答:

    Q:锁究竟是什么?

    A:锁实质上是存储在Redis中,基于特定规则生成的一个字符串(示例里是固定前缀+设备唯一标识),相当于每个设备注册的时候都有自己对应的一把锁,因为锁只有一把,即使该设备有多个相同的注册请求同时到来,也只有其中获取到那把锁的那一个请求能成功走下去。

    Q:什么是获取锁?

    A:同一个设备,基于相同的规则生成的字符串(后文以Key代称该字符串)总是相同的,在执行新增操作前,先去Redis中查询这个Key是否存在,如果已存在,就意味着获取锁失败;如果不存在,就将这个Key现存到Redis中,如果存储成功,表示获取锁成功,如果存储失败,还是意味着获取锁失败。

    Q:锁是怎么工作的?

    A:前面说过,同一个设备,基于相同的规则生成的字符串(Key)总是相同的,在当前线程执行新增操作前,先在Redis中查询这个Key是否存在,如果已存在,表示此时已经有别的线程成功获取了锁,正在做当前线程想要做的新增操作,则当前线程不需要进行后续操作了(是的,你是多余的)

    当这个Key不存在时,表示现在还没有其他线程获得锁,则当前线程可以继续进行下一步操作——在Redis中赶紧存入这个Key,当这个Key存储失败时,意味着有别的线程抢先存入了Key成功获取了锁,当前线程晚了一步,想做的工作被别人抢先做了(当前线程可以退下了)

    当且仅当在Redis中存入这个Key也成功时,表示当前线程终于获取锁成功,可以安心进行后面的新增操作了,期间别的想做相同新增操作的线程因为获取不到锁,只能全都退场拜拜👋,当前线程执行完后要记得释放锁(从Redis中删除这个Key)。

    注册时使用的分布式锁代码如下:

    public class LockUtil {
    
        // 对redis底层set/get方法进行了简单封装的工具类
        @Autowired
        private RedisService redisService;
    
        // 生成锁的固定前缀,从配置文件读取值
        @Value("${redis.register.prefix}")
        private String REDIS_REGISTER_KEY_PREFIX;
    
        // 锁过期时间:即获取锁后线程能进行操作的最长时间,超过该时间后锁自动被释放(失效),别人可以重新开始获取锁进行对应操作
        // 设定锁过期时间是为了防止某线程成功获取锁后在执行任务过程中发生意外挂掉了造成锁永远无法被释放
        @Value("${redis.register.timeout}")
        private Long REDIS_REGISTER_TIMEOUT;
    
        /**
         * 获取设备注册时的分布式锁
         * @param deviceMacAddress 设备的Mac地址
         * @return
         */
        public boolean getRegisterLock(String deviceMacAddress) {
            if (StringUtils.isEmpty(deviceMacAddress)) {
                return false;
            }
    
            // 获取设备对应锁的字符串(Key)
            String redisKey = getRegisterLockKey(deviceMacAddress);
    
            // 开始尝试获取锁
            // 如果当前任务锁key已存在,则表示当前时间内有其他线程正在对该设备执行任务,当前线程可以退下了
            if (redisService.exists(redisKey)){
                return false;
            }
    
            // 开始尝试加锁,注意此处需使用SETNX指令(因为可能存在多个线程同时到达这一步开始加锁,使用SETNX来确保有且仅有一个设置成功返回)
            boolean setLock = redisService.setNX(redisKey, null);
    
            // 开始尝试设置锁过期时间,到了过期时间线程还没有释放锁的话,由保存锁的Redis来确保锁最终被释放,以免出现死锁
            // 锁过期时间的设置上,可以评估线程执行任务的正常用时,在正常用时的基础上稍微再大一点
            boolean setExpire = redisService.expire(redisKey, REDIS_REGISTER_TIMEOUT);
    
            // 设置锁和设置过期时间均成功时才认为当前线程获取锁成功,否则认为获取锁失败
            if (setLock && setExpire) {
                return true;
            }
    
            // 当发生设置锁成功,但设置过期时间失败的情况时,手动清除刚刚设置的锁Key
            redisService.del(redisKey);
            return false;
        }
    
        /**
         * 删除设备注册时的分布式锁
         * @param deviceMacAddress 设备的Mac地址
         */
        public void delRegisterLock(String deviceMacAddress) {
            redisService.del(getRegisterLockKey(deviceMacAddress));
        }
    
        /**
         * 获取设备注册时分布式锁的key
         * @param deviceMacAddress 设备mac地址(每个设备的mac地址都是唯一的)
         * @return
         */
        private String getRegisterLockKey(String deviceMacAddress) {
            return REDIS_REGISTER_KEY_PREFIX + "_" + deviceMacAddress;
        }
    }
    

    在正常的注册逻辑中使用锁的示例如下:

      public ReturnObj registry(@RequestBody String device){
            Devices deviceInfo = JSON.parseObject(device, Devices.class);
    
            // 开始注册前加锁
            boolean registerLock = lockUtil.getRegisterLock(deviceInfo.getMacAddress());
            if (!registerLock) {
                log.info("获取设备注册锁失败,当前注册请求失败!");
                return ReturnObj.createBussinessErrorResult();
            }
    
            // 加锁成功,开始注册设备
            ReturnObj result = registerDevice(deviceInfo);
    
            // 注册设备完成,删除锁
            lockUtil.delRegisterLock(deviceInfo.getMacAddress());
    
            return result;
        }
    

    解决并发更新
    1. 并发更新真的会引发问题吗?
    当发生同时更新或一前一后更新的情况对业务并无影响的时候,那就无需进行任何处理,免得徒劳增加系统复杂度。

    2. 乐观锁
    通过乐观锁的方式可以避免重复更新,即:在数据库表中加入一个“版本号”(version)的字段,在做更新操作前先查询记录,记下查询出的版本号,之后在实际更新操作的时候判断此前查询出的版本号是否与当前数据库中该条记录的版本号一致,如果一致,说明在当前线程从查询到更新这段时间里,没有其他线程更新这条记录;如果不一致,说明再此期间已经有其他线程更改了这条记录,当前线程的更新操作已经不安全了,只能放弃。

    判断SQL示例:

    update a_table set name=test1, age=12, version=version+1 where id = 3 and version = 1
    乐观锁通过版本号的方式,在最后更新的关头才判断自己之前从数据库读取的数据有没有被别人修改,其效率高于悲观锁,因为在当前线程查询和最后更新前的这段时间里,其他线程可以照常读取这同一条记录,且可以抢先更新。

    悲观锁
    悲观锁与乐观锁恰好相反,在当前线程查询这条待更新的数据时,就锁住了这条数据,不允许在自己更新完成前有其他线程修改数据。

    通过使用 select … for update 来告诉数据库“我马上要更新这条数据,把它给我锁起来”。

    注意:FOR UPDATE 仅适用于InnoDB,且必须在事务中才能生效,当查询条件有明确主键且有此记录时为行锁定(row lock,只锁定根据查询条件定位到的这一行数据),查询条件无主键或主键不明确时为表锁定(table lock,锁定全表,会造成全表的数据在锁定期都无法被更改),所以使用悲观锁时查询条件最好能明确定位到某一行或几行,不要引发全表锁定

    零基础学习Java编程,可以加入喔的十年Java学习园地,技术交流,资源共享,答疑解惑,经验分享。

    展开全文
  • 我在以前工作中遇到过这样的问题。应用正在播放音乐,当电话铃声响起,手机被静音,点击手机的锁屏键,插上耳机线,我们的应用应该如何处理

    我一直对音频开发还是比较有兴趣的,所以想深入了解一下,在ios中最重要的框架还是AVFoundation。

    从AVSpeechSythesisVoice开始,先来几行代码,可以从文本转化为语音。

        AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:@"hello world,please attention http://blog.csdn.net/u011397277"];
        utterance.rate = 0.4f;
    //    utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
        utterance.pitchMultiplier = 0.8f;
        utterance.postUtteranceDelay = 0.1f;
        
        [self.synthesizer speakUtterance:utterance];

    -(AVSpeechSynthesizer *)synthesizer
    {
        if (!_synthesizer) {
            _synthesizer = [[AVSpeechSynthesizer alloc] init];
        }
        return _synthesizer;
    }
    是不是很神奇,就几行代码实现了,需要导入头文件

    #import <AVFoundation/AVFoundation.h>

    如果大家有兴趣,可以查看这些源码,对音频的学习有很大的帮助。

    github地址:https://github.com/tapharmonic/Learning-AV-Foundation


    我在以前的工作中,遇到过这样的问题。应用正在播放音乐,当电话铃声响起,手机被静音,点击手机的锁屏键,插上耳机线,我们的应用应该如何处理?


    问题一

    处理静音的问题:如果在开发中手机调制"铃声/静音",声音在两种状态下切换,而我们希望的是不让声音消失,我们可以尝试配置音频回话,加入以下的代码

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        AVAudioSession *session = [AVAudioSession sharedInstance];
    
        NSError *error;
        if (![session setCategory:AVAudioSessionCategoryPlayback error:&error]) {
            NSLog(@"Category Error: %@", [error localizedDescription]);
        }
    
        if (![session setActive:YES error:&error]) {
            NSLog(@"Activation Error: %@", [error localizedDescription]);
        }
        
        return YES;
    }


    问题二

    处理手机锁屏的问题:我试过QQ音乐,酷狗音乐,天天动听,如果你锁屏,音乐还是会继续播放的,但是你的手机应用有可能不能继续播放声音,可以尝试使用下面的方法解决,配置info.plist文件


    添加箭头的属性。


    问题三

    处理中断的问题,比如电话呼入、闹铃响起等,我曾经处理过网络的通话问题,当时我开发的一款能够使用流量,WIFI通话的app,当电话呼入时,这个怎么处理,当电话呼入时,手机是断网的,我们测试过,但是你连接WIFI这个是没有影响的。我们当时是加了一个通知处理的。经过测试,当电话呼入的时候,系统的本身是能够处理这个问题的,但是当对方终止电话的时候,音频是不会如预期的恢复,面对这样的问题应该如何解决。

    这种情况我们可以添加通知,在你的应用的播放通知类里面,可以添加以下的几行代码。

            NSNotificationCenter *nsnc = [NSNotificationCenter defaultCenter];
            [nsnc addObserver:self
                     selector:@selector(handleRouteChange:)
                         name:AVAudioSessionRouteChangeNotification
                       object:[AVAudioSession sharedInstance]];
    然后在处理函数handleRouteChange:处理问题。

    我们要分析notification.userInfo的信息,可以参考下面的代码。

    -(void)handleInterruption:(NSNotification *)notification
    {
        NSDictionary *info = notification.userInfo;
        
        AVAudioSessionInterruptionType type = [info[AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];
        if(type == AVAudioSessionInterruptionTypeBegan){
            //处理问题
        }else{
            //处理问题
        }
        
    }


    问题四

    处理线路改变的问题,当你插上耳机时,我们希望声音从耳机内传出,但我们拔掉耳机的时候,我们希望的是音乐停止播放,是的,stop Play。 同样,我们可以添加一个通知处理。可以参考下面的代码处理:

            NSNotificationCenter *nsnc = [NSNotificationCenter defaultCenter];
            [nsnc addObserver:self
                     selector:@selector(handleRouteChange:)
                         name:AVAudioSessionRouteChangeNotification
                       object:[AVAudioSession sharedInstance]];
    下面是处理函数

    - (void)handleRouteChange:(NSNotification *)notification {
    
        NSDictionary *info = notification.userInfo;
    
        AVAudioSessionRouteChangeReason reason =
            [info[AVAudioSessionRouteChangeReasonKey] unsignedIntValue];
    
        if (reason == AVAudioSessionRouteChangeReasonOldDeviceUnavailable) {
    
            AVAudioSessionRouteDescription *previousRoute =
                info[AVAudioSessionRouteChangePreviousRouteKey];
    
            AVAudioSessionPortDescription *previousOutput = previousRoute.outputs[0];
            NSString *portType = previousOutput.portType;
    
            if ([portType isEqualToString:AVAudioSessionPortHeadphones]) {
                [self stop];
                [self.delegate playbackStopped];
            }
        }
    }
    以上就是一些处理音频开发一些问题处理解决方法,这个音频开发内容还是比较多的,要分很多情况,进行处理,本文还是比较浅的几个问题,我希望今后的几篇博文继续分享我对音频开发的学习。



    本文

       完。












    展开全文
  • 最近在工作中遇到一个问题:在对订单做处理的时候,原本所有业务都在一个事务中,可操作结果是只有订单信息后续所有操作都没有,经过排查确定是mysql事务没有生效,所以就总结下事务失效几种情况 ...

    最近在工作中遇到一个问题:在对订单做处理的时候,原本所有的业务都在一个事务中,可操作结果是只有订单信息后续的所有操作都没有,经过排查确定是mysql的事务没有生效,所以就总结下事务失效的几种情况

    一、mysql存储引擎引起的事务失效(一般不会遇到,目前用的mysql版本都在5.7+了)

    mysql有多种存储引擎,有些版本(mysql5.5.5以前默认是MyISAM,mysql5.5.5以后默认是InnoDB)安装时默认的存储引擎是MyISAM,而MyISAM存储引擎是不支持事务处理的,所以才导致了项目中的某个方法事务失效,解决的方法就是将需要事务管理的表的存储引擎改为InnoDB即可

    二、非事务方法A调用事务B引起事务失效(代码中最常见)
    先看下Spring事务的传播机制:
    1、PROPAGATION_REQUIRED – 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
    2、PROPAGATION_SUPPORTS – 支持当前事务,如果当前没有事务,就以非事务方式执行。
    3、PROPAGATION_MANDATORY – 支持当前事务,如果当前没有事务,就抛出异常。
    4、PROPAGATION_REQUIRES_NEW – 新建事务,如果当前存在事务,把当前事务挂起。
    5、PROPAGATION_NOT_SUPPORTED – 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    6、PROPAGATION_NEVER – 以非事务方式执行,如果当前存在事务,则抛出异常。
    7、PROPAGATION_NESTED – 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
    说明:
    spring默认的是PROPAGATION_REQUIRED机制,如果方法A标注了注解@Transactional 是完全没问题的,执行的时候传播给方法B,因为方法A开启了事务,线程内的connection的属性autoCommit=false,并且执行到方法B时,事务传播依然是生效的,得到的还是方法A的connection,autoCommit还是为false,所以事务生效;反之,如果方法A没有注解@Transactional 时,是不受事务管理的,autoCommit=true,那么传播给方法B的也为true,执行完自动提交,即使B标注了@Transactional
    事务方法之间的嵌套调用,普通方法和事务方法之间的嵌套调用,都不会开启新的事务.是因为spring采用动态代理机制来实现事务控制,而动态代理最终都是要调用原始对象的,而原始对象在去调用方法时,是不会再触发代理了,所以以上就是为什么我在没有标注事务注解的方法A里去调用标注有事务注解的方法B而没有事务滚回的原因

    解决方案:
    1、把方法B抽离到另外一个XXService中,并且在这个Service中注入XXService,使用XXService调用方法B;(这种方式不优雅且要产生很多冗余文件,看起来很烦,实际开发中不建议这么做)
    2、通过在方法内部获得当前类代理对象的方式,通过代理对象调用方法B(动态代理最终都是要调用原始对象的,而原始对象在去调用方法时,是不会再触发代理了,所以我们就使用代理对象来调用,就会触发事务)
    ①.使用 ApplicationContext 上下文对象获取该对象;
    ②.使用 AopContext.currentProxy() 获取代理对象,但是需要配置exposeProxy=true
    建议使用的是第二种解决方案,具体操作如下:
    springboot启动类加上注解:@EnableAspectJAutoProxy(exposeProxy = true)

             //获取代理对象
            SysUserService proxyObj = (SysUserService) AopContext.currentProxy();
            //用代理对象调用事务方法  被调用方法加了事务注解
            proxyObj.insertUser(user);
    

    三、like 查询用%开头引起的事务失效
    在使用LIKE关键字进行查询的语句中,如果匹配字符串的第一个字符为“%”,索引不会起作用。只有“%”不再第一个位置,索引才会起作用
    四、mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描
    五、is null,is not null 也无法使用索引
    六、少用or,用它连接时很多情况下索引会失效

    展开全文
  • 欢迎访问个人博客 德鲁大叔撸代码最近在工作中遇到一个问题:在对订单做处理的时候,原本所有业务都在一个事务中,可操作结果是只有订单信息后续所有操作都没有,经过排查确定是mysql事务没有生效,所以就总结...
  • 最近在处理C编译向C++编译转移的工作遇到如下问题: 在用C编译时候,变量定义在头文件。由于C编译器支持这种情况,所以能够编译成功。 但是当转移到用C++编译时候,就提示编译错误。这时候,采用正规...
  • 以前我解决方式是用多建一个临时表,然后一条条把工作记录读到TEX控件,然后根据条件进行判断,符合条件就写入临时表。最后对临时表进行下一步操作方式来处理的。昨天我第一次直接用SQL语句来解决这样...
  • 1)我很快想到用reshape2包中数据列转换中长转宽dcast,但是,遗憾是我发现只能转换其中一个变量,如此多变量我不能一个个转换后再合并吧,工作量不小,以前遇到过如此情况,经常逃避解决,今天,我选择了...
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    这样看来,所有的问题都解决了,是吗? 1.4 新的64位机上的64位类型是什么样的? 指针声明 1.5 这样的声明有什么问题?char*p1,p2;我在使用p2的时候报错了。 1.6 我想声明一个指针,并为它分配一些空间,但却...
  • 《你必须知道495个C语言问题

    热门讨论 2010-03-20 16:41:18
    《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程经常遇到的一些问题。书列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...
  •  熊军(网名老熊),ITPUB论坛Oracle专题深入讨论版版主,现从事Oracle第三方技术支持工作,擅长Oracle数据库故障诊断处理和性能优化。个人网站:http://www.laoxiong.net.  杨廷琨(网名Yangtingkun),现任海虹...
  • 这样看来,所有的问题都解决了,是吗? 2  1.4 新的64位机上的64位类型是什么样的? 3 指针声明 3 1.5 这样的声明有什么问题?char *p1, p2; 我在使用p2的时候报错了。 3 1.6 我想声明一个指针,并为它分配...
  • 你必须知道495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    2.6 我遇到这样声明结构代码: struct name f int namelen; char namestr[1];g; 然后又使用一些内存分配技巧使namestr 数组用起 来好像有多个元素。这样合法和可移植吗? . . . . . . . . . . . . 8 2.7 是否有自动...
  • 手机中的秘密

    2008-04-12 13:55:14
    但现在的手机一般IA产品大部分都用锂(Li)电池,而锂电池的话就没有记忆效应的问题。若大家还是等到全部用完电后再充的话反而会使得 锂 电池内部的化学物质无法反应而寿命减少。最好的方法就是没事就充电让它...
  • o 7.8 我遇到一些 ``搞笑" 代码, 包含 5["abcdef"] 这样 ``表达式"。 这为什么是合法 C 表达式呢 ? o 7.9 既然数组引用会蜕化为指针, 如果 arr 是数组, 那么 arr 和 &arr 又有什么区别呢 ? o 7.10 我如何...
  • asp.net文件复制C#(winform)文件复制

    千次阅读 2009-02-11 13:51:00
    今天遇到一个工作是,把以前资源的一部分,复制到一个新的文件夹,进行使用。遇到这样的问题,有时候,我们可能会想,我们直接到文件夹去复制就完了,可是这里是有条件的。也就是我们要复制的文件很多,而且没有...
  •  Ivor Horton是世界著名计算机图书作家,主要从事与编程相关咨询撰写工作,曾帮助无数程序员步入编程殿堂。他曾在IBM工作多年,能使用多种语言进行编程(在多种机器上使用汇编语言和高级语言),设计和实现了...
  • 下面就该系统的一些技术问题及项目在建设、实施过程中遇到的问题等进行探讨。  1、Arcinfo平台简介Arcinfo 平台由美国ESRI(美国环境系统研究所)开发,是具有丰富功能的专业GIS(地理信息系统)平台软件,包含...
  • 客户资料记录在Excel或本子上,太乱,查阅不便以前的跟进情况都不记得了,对客户状态了解不够团队每个成员各自记录,不能同步,没法协同工作员工离职,资料没有保留,导致客户流失严重其它系统太复杂难用,让人...
  • 遇到的问题和自我总结评价 这次的课程设计将我们这学期所学的数据库的理论知识用到具体的实践去,深化了理论知识,同时也锻炼了我们的动手实践能力,有了以前的练习为前提做起来也比较的顺利。不过在具体的...
  • 当您遇到疑难问题时,除可以从用户手册和联机帮助寻找答案外,还可通过访问 WPS 2000 主页得到解答,并获取产品最新信息。当然,这一切都取决于您是否已经连通了Internet。  样式管理简化操作 是否对复杂...
  • 如经常遇到的想要再插入表格、文字、图片等问题,解决方法是:执行相应命令,网页就会弹出对话框,从模板列表选取模板,出现的新页面除可编辑区外均有淡黄色背景,是不能进行修改的部分。空白的Main编辑区可直接...
  • webpack4.0各个击破(6)—— Loader篇

    千次阅读 2019-06-21 14:28:12
    本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习webpack工具中相应的处理办法。(本篇中的参数配置使用方式均基于webpack4.0版本) 一. ...

空空如也

空空如也

1 2 3 4 5
收藏数 90
精华内容 36
关键字:

以前工作中遇到的问题及处理