1. 类名转首字母小写字符串(netty)
if (Character.isUpperCase(poolName.charAt(0)) && Character.isLowerCase(poolName.charAt(1))) {
return Character.toLowerCase(poolName.charAt(0)) + poolName.substring(1);
}
2. 取余 还是 & , 平均非配到每个槽上.
public EventExecutorChooser newChooser(EventExecutor[] executors) {
//如果是2的幂, 则用&的方式.
if (isPowerOfTwo(executors.length)) {
return new PowerOfTwoEventExecutorChooser(executors);
//如果不是,则用取余的方式.
} else {
return new GenericEventExecutorChooser(executors);
}
}
3.compareAndSet
private void startThread() {
if (state == ST_NOT_STARTED) {
if (STATE_UPDATER.compareAndSet(this, ST_NOT_STARTED, ST_STARTED)) {
try {
doStartThread();
} catch (Throwable cause) {
STATE_UPDATER.set(this, ST_NOT_STARTED);
PlatformDependent.throwException(cause);
}
}
}
}
https://www.cnblogs.com/hqlong/p/6586721.html
4. 数组替换hashSet
SelectedSelectionKeySet
5. sql查询list做bean的映射
@Override
@Transactional(rollbackFor = Exception.class,propagation = Propagation.SUPPORTS)
public <T1> List<T1> findSql(String sql, Class<T1> clazz, Object... params) {
if(ReflectUtils.isSimpleType(clazz)){
return jdbcTemplate.queryForList(sql,params,clazz);
}
List<String> lables = new LinkedList<>();
Map<String,String> propertiesName = listPropertiesName(clazz);
List<T1> result = jdbcTemplate.query(sql, params, new RowMapper<T1>() {
@Override
public T1 mapRow(ResultSet resultSet, int j) throws SQLException {
ResultSetMetaData rsd = resultSet.getMetaData();
int count = rsd.getColumnCount();
if(lables.size()==0){
for(int i=1;i<=count;i++){
String name = rsd.getColumnLabel(i);
lables.add(propertiesName.get(name));
}
}
Map<String,Object> temp = Maps.newHashMap();;
for(int i=1;i<=count;i++){
temp.put(lables.get(i-1),resultSet.getObject(i));
}
return ReflectUtils.changeMapToBean(temp,clazz);
}
});
return result;
}