List的sort()方法这样写对吗?

class M{
int age;
构造函数;
toString()方法;
}
main(){
List st=new ArrayList();
st.sort((o1,o2)->{M m1=(M)o1;M m2=(M)o2;//按照年龄降序排列
return m1.age>m2.age?-1:m1.age 另外,对于TreeSet以同样的lambda表达式定义排序规则:
class M{
int age;
构造函数;
toString()方法;
}
main(){
TreeSet st=new TreeSet((o1,o2)->{M m1=(M)o1;M m2=(M)o2;
return m1.age>m2.age?-1:m1.age<m2.age?1:0});
只要定义了排序规则,存入的元素就会以此规则自动排序,这个功能是哪段代码实现的?因为书上提到Comparator接口的int compare()方法,但是具体是什么联系呢?lambda表达式是重写了这个int compare()方法吗?

6个回答

11
10
7
5
3
2

可以。

另外sort的lambda可以简化下:
st.sort((o1,o2)->((M)o2).age-((M)o1).age);

结果一样

https://ideone.com/iv6Fsb

在线通过测试。

 /* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;


class M{
public int age;
public M(int n) { age = n; }
public String toString() { return String.valueOf(age); }
}

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        List st=new ArrayList();
        st.add(new M(10));
        st.add(new M(5));
        st.add(new M(2));
        st.add(new M(7));
        st.add(new M(11));
        st.add(new M(3));
        st.sort((o1,o2)->{M m1=(M)o1;M m2=(M)o2;//按照年龄降序排列
        return m1.age>m2.age?-1:(m1.age<m2.age?1:0);});
        for (Object m: st)
        System.out.println((M)m);
    }
}

第9行m1.age后缺少的代码为m2.age?-1:m1.age<m2.age?1:0});不知道为什么显示不出

treeset的:

 /* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;


class M{
public int age;
public M(int n) { age = n; }
public String toString() { return String.valueOf(age); }
}

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        // your code goes here
        TreeSet st =new TreeSet((o1,o2)->((M)o2).age-((M)o1).age);
        st.add(new M(10));
        st.add(new M(5));
        st.add(new M(2));
        st.add(new M(7));
        st.add(new M(11));
        st.add(new M(3));
        for (Object m: st)
        System.out.println((M)m);
    }
}

TreeSet不需要sort,它内部就是排序的。确切地说,每次有元素被添加,它都会调整内部的排序二叉树,将元素放在合适的位置上,保持它始终有序。

whyyouhitme_
whyyouhitme_ 主要想问:上面那个List的写的对吗?然后下面TreeSet的这个自定义排序规则是怎么实现的?和Comparator类的int compare()方法有什么联系吗?
接近 2 年之前 回复
whyyouhitme_
whyyouhitme_ 嗯嗯。TreeSet我没写sort,因为自然排序是按照升序,所以我想写一个自定义的降序。
接近 2 年之前 回复

结果一样

https://ideone.com/iv6Fsb

在线通过测试。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java中为何用collections.sort排序是操作原list,而是返回一个新list?
java中为何用collections.sort方法对list类型排序是操作原list,而是返回一个新list?它是如何做到的?
c++ stl 中sort对list容器的排序
#include<iostream> #include<list> #include<algorithm> using namespace std; void PrintList(list<int> &l) { for (list<int>::iterator corrent = l.begin(); corrent!=l.end(); corrent++) { /*int tmp = l.front(); cout << tmp << endl;*/ ; cout << *corrent << endl; } } int compare(int &a,int &b) { return a < b; } int main() { list<int> l; for (int j = 0; j < 10; j++) { l.push_back(j); //l.push_front(j); } sort(l.begin(), l.end());//这两个为什么都是错的??? sort(l.begin(), l.end(), compare); getchar(); return 0; } /*错误 1 error C2784: “unknown-type std::operator -(std::move_iterator<_RanIt> &,const std::move_iterator<_RanIt2> &)”: 未能从“std::_List_iterator<std::_List_val<std::_List_simple_types<int>>>”为“std::move_iterator<_RanIt> &”推导 //模板 参数 f:\学习软件\vs2013\vc\include\algorithm 3157 1 List入门 */
C++list中使用sort排序
#include<iostream> #include<string> #include<cmath> #include <iomanip> #include<fstream> #include <cstdlib> #include <list> #include <algorithm> using namespace std; //定义学生类 class Student { public: string StuName; //姓名 string StuNum; //学号 string Sex; //性别 //成绩 float English; //英语 float SQL; //SQL float Prob; //概率论 float Circuit; //电路 float CSharp; //C# float Average; //平均成绩 }; list<Student> studList; 已经用list存入数据了,如何将list里的数据按平均成绩排序
Collections.sort的源码问题
public static <T extends Comparable<? super T>> void sort(List<T> list) { Object[] a = list.toArray(); Arrays.sort(a); ListIterator<T> i = list.listIterator(); //AAA for (int j=0; j<a.length; j++) { i.next(); i.set((T)a[j]); } } 上面的为Collections.sort的源码 我改写成了如下的形式 @SuppressWarnings("unchecked") public static <T extends Comparable<? super T>> List<T> sort(List<T> list) { Object[] a = list.toArray(); Arrays.sort(a); return (List<T>) Arrays.asList(a); } 总而言之 ListIterator<T> i = list.listIterator(); //AAA for (int j=0; j<a.length; j++) { i.next(); i.set((T)a[j]); } 这部分有意思吗? 这不是把简单的问题变复杂了吗?
java集合Comparator接口实现排序问题
设计一个整数排序算法,规则很简单: 1、同为正数或者同为负数,小的排前,大的排后。 2、所有负数大于所有正数。所有正数排前,负数排后。 3、零最小。排最前。 直接上代码: ``` import java.util.ArrayList; import java.util.Comparator; import java.util.List; import org.junit.Test; public class TestComparator { @Test public void testInt() { List<Integer> list=new ArrayList<Integer>(); list.add(3222222); list.add(-1000); list.add(1000); list.add(1323235); list.add(-1065650); list.add(145466); list.sort(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { if(o1*o2>0) { return o1-o2; }else if(o1*o2<0){ return o2-o1; }else { return o1==0?-1:1; } } }); System.out.println(list); } } ``` 期望结果:1000 145466 1323235 3222222 -1000 -1065650 实际输出结果:[1000, 1323235, 145466, -1065650, -1000, 3222222] 我对compare函数返回值的理解是: 返回值为负数,两个比较对象不交换位置; 返回值为正数或0,两个比较对象交换位置; 是理解上存在问题,还是代码逻辑上存在问题?请各位指导。
Pyecharts+effectScatter问题
问题:今天测试的时候一直没有显示,但是看了很多遍发现代码没有问题,但是图一直没显示,后来发现是因为我的横坐标用的是里面是字符串,那么请问有没有办法把横坐标的名字改掉呢 test_list=[''苹果,''梨]就是横坐标改成这样。。。 ``` test_list=[1,2,3,4,5,6,7,8,10,9] level_list=[2,3,4,5,6,7,3,2,9,5] i=0 for top in sort_by_level: address_list.append(top[8]) level_list.append(top[1]) i+=1 if i==10: break es = EffectScatter('动态散点图', width='', height=600) es.add('', test_list, level_list) es.show_config() es.render('effectScatter.html') ```
微信公众号验证出现TypeError: '<' not supported between instances of 'NoneType' and 'str'怎么解决。
python flask 开发微信公众号出现的问题 将字符串token 和获取的timestamp nonce 放入list1 sort()一下出现错误 ![图片说明](https://img-ask.csdn.net/upload/202003/19/1584628106_267821.png)
spark sql 语法问题,新手求指点
使用spark 连接mysql 查询时发现一个错误,经过检测后发现是sql语句的问题,但sql 语句在mysql中是能够查询出来的,但是当使用spark进行查询的时候却发现报错了,sql语句如下: ``` # 计算出支付通道为alipay的金额最大的前5位商户号? select pay_channel,oid,sum(money) from pay where pay_channel = 'alipay' group by oid order by sum(money) desc limit 5 ; select pay_channel,oid,sum(money) from pay where pay_channel = 'alipay' group by oid,pay_channel order by sum(money) desc limit 5 ; ``` 正确代码代码如下,使用的是第二条sql语句 如果使用第一条sql语句是会报错: ``` import java.util.Properties import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame, Row, SparkSession} object Test23 { def main(args: Array[String]): Unit = { //使用SparkSession.builder.替代SQLContext val sqlContext = SparkSession.builder. master("local[*]") .appName("TestMysql") .getOrCreate() val url = "jdbc:mysql://hadoop01:3306/spark?characterEncoding=UTF-8" val table = "pay" val properties = new Properties() properties.setProperty("user", "root") properties.setProperty("password", "123456") //需要传入Mysql的URL、表明、properties(连接数据库的用户名密码) val df = sqlContext.read.jdbc(url, table, properties) df.createOrReplaceTempView("pay") val frame: DataFrame = sqlContext.sql("select pay_channel,oid,sum(money) from pay where pay_channel = 'alipay' group by oid,pay_channel order by sum(money) desc limit 5 ") val rdd = frame.rdd rdd.foreach(println(_)) } } ``` 此两行sql语句在mysql中都是能正常查出来结果的,它们两个的区别就是第二条sql语句使用pay_channel字段多进行了一次分组,不过我在sql语句中一定把pay_channel作为了一个条件固定死了,为啥还要进行分组,不然会报错,报错内容如下: ``` Exception in thread "main" org.apache.spark.sql.AnalysisException: expression 'pay.`pay_channel`' is neither present in the group by, nor is it an aggregate function. Add to group by or wrap in first() (or first_value) if you don't care which value you get.;; GlobalLimit 5 +- LocalLimit 5 +- Project [pay_channel#3, oid#0, sum(money)#23] +- Sort [sum(money)#23 DESC NULLS LAST], true +- Aggregate [oid#0], [pay_channel#3, oid#0, sum(money#6) AS sum(money)#23] +- Filter (pay_channel#3 = alipay) +- SubqueryAlias pay +- Relation[oid#0,pos_name#1,order_num#2,pay_channel#3,pay_method#4,posId#5,money#6,pay_time#7,ord_status#8,rec_state#9] JDBCRelation(pay) [numPartitions=1] at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$class.failAnalysis(CheckAnalysis.scala:39) at org.apache.spark.sql.catalyst.analysis.Analyzer.failAnalysis(Analyzer.scala:91) at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1.org$apache$spark$sql$catalyst$analysis$CheckAnalysis$class$$anonfun$$checkValidAggregateExpression$1(CheckAnalysis.scala:247) at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1$$anonfun$apply$9.apply(CheckAnalysis.scala:280) at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1$$anonfun$apply$9.apply(CheckAnalysis.scala:280) at scala.collection.immutable.List.foreach(List.scala:381) at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1.apply(CheckAnalysis.scala:280) at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1.apply(CheckAnalysis.scala:78) at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:127) at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$foreachUp$1.apply(TreeNode.scala:126) at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$foreachUp$1.apply(TreeNode.scala:126) at scala.collection.immutable.List.foreach(List.scala:381) at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:126) at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$foreachUp$1.apply(TreeNode.scala:126) at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$foreachUp$1.apply(TreeNode.scala:126) at scala.collection.immutable.List.foreach(List.scala:381) at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:126) at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$foreachUp$1.apply(TreeNode.scala:126) at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$foreachUp$1.apply(TreeNode.scala:126) at scala.collection.immutable.List.foreach(List.scala:381) at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:126) at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$foreachUp$1.apply(TreeNode.scala:126) at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$foreachUp$1.apply(TreeNode.scala:126) at scala.collection.immutable.List.foreach(List.scala:381) at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:126) at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$class.checkAnalysis(CheckAnalysis.scala:78) at org.apache.spark.sql.catalyst.analysis.Analyzer.checkAnalysis(Analyzer.scala:91) at org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:52) at org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:66) at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:623) at com.czxy.exercise05.Test23$.main(Test23.scala:31) at com.czxy.exercise05.Test23.main(Test23.scala) ``` 求大佬解答一下原因!
java8 lambda 排序 报异常
今天想体验一下jdk8的新特性,就对一个list进行了排序,编译什么的可以编译,但是当idea部署项目后报错了。有那位大佬可以指点迷津的吗,非常感谢。 ![图片说明](https://img-ask.csdn.net/upload/202004/02/1585817970_68542.png) ![图片说明](https://img-ask.csdn.net/upload/202004/02/1585818379_247977.png) 该文件一个地方用lambda进行了排序 ![图片说明](https://img-ask.csdn.net/upload/202004/02/1585818203_369864.png) 当使用注释掉的地方进行排序时,启动项目时完全没有问题的,但是当使用 ``` dtos.sort((s1, s2) -> s1.getActiveCard() - s2.getActiveCard()); ``` 此方法后项目就启动不起来。 框架:SSH jdk:1.8.0 maven-compiler-plugin:3.2 tmcat:7.0.100 数据库:mysql
爬虫爬取下图网站个股历史资金流向一览数据时找不到对应URL
1、爬取图1网站个股历史资金流向一览数据时找不到对应URL。已尝试在NETWORK下的JS和XHR下寻找,搜寻无果后无奈分析javascript程序。鉴于本人对javascript尚属入门,盯着代码看了一天多仅能锁定URL在一个名为/load_table_data.js?201911221832的JS的文件中,无法确定URL有哪些参数和对应取值范围。Can someone help me?Thanks!网址为:http://data.eastmoney.com/zjlx/000333.html 2、从我个人理解看,只要数据请求采用HTTP协议,那么URL必然会出现在NETWORK下的JS或XHR里。为何会找不到URL呢?尝试通过抓包软件Fiddler抓包,仍旧无法找到对应URL。究竟为何? 图1:要爬取数据 ![图1:要爬取数据](https://img-ask.csdn.net/upload/202004/08/1586353693_740247.png) 图2:猎豹浏览器自带抓包分析工具抓包结果 ![图2:猎豹浏览器自带抓包分析工具抓包结果](https://img-ask.csdn.net/upload/202004/08/1586353956_977383.png) /load_table_data.js文件代码如下,建议答主自行抓包分析。万分感谢! ``` /* lihaibin 20140606/ 动态加载表格 参数说明 { id:展示数据table 的id param: { "参数框id": { cname: "参数存储的类型", type: "参数名称", value: "参数默认值"} } 可多个 pagenav: 分页控件id 默认为“PageCont” miniPageNav: 小分页控件id 默认为 “miniPageNav” sort: { id: "排序字段", desc: 是否逆序(true|false), multiple: 多字段排序(示例:Fields1,Fields2,Fields3|Fields1SortRule,Fields2SortRule,Fields3SortRule, SortRule规则:0升序 1降序) } cells: 展示字段{ "n": "表头名称" ,"s":"排序字段",w:宽度} 可多个 cellcount 默认可不填,在多行多行表头时使用,传入实际数据的列数 dataurl: 请求数据地址 "http://datainterface.eastmoney.com/EM_DataCenter/JS.aspx?type=FD&sty=SRB&st={sortType}&sr={sortRule}&p={page}&ps={pageSize}&js=var {jsname}={pages:(pc),data:[(x)]}{param}", pagesize: 每页行数, beforedisplay: function () { }, 加载数据后展示数据前函数 beforeupdate: function () { },加载数据前函数 afterdisplay: function () { },展示数据后函数 minWidth: 950, 表格最小宽度,默认为950(用于浮动头部左右滚动) autoWidit: false 表格是否为自动宽度 默认为false (用于重绘浮动表头的宽度,当表格宽度为自适应时,窗口宽度改变时要重绘浮动表头) autoScrollRun:true 加载时自动定位到表格 pageScrollRun: true 翻页是否自动定位 sortScrollRun: true 排序是否自动定位 theadfloat:false 是否固定表格头部 theadTop:32 表格头部上边距 paramNoValueAdd: 参数为空时是否要在接口传这个参数, } */ var Class = { create: function () { return function () { this.initialize.apply(this, arguments) } } }; Object.extend = function (destination, source) { for (property in source) { destination[property] = source[property] } return destination }; var LoadTable = Class.create(); Object.extend(LoadTable.prototype, { initialize: function (opt) { var _t = this; _t.starttime = (new Date).getTime(); var options = { id: "dt_1", table: null, tbody: null, thead: null, param: {}, pagenav: "PageCont", miniPageNav: "miniPageNav", doZoomNav: "autofontDiv", sort: { id: "2", desc: true }, page: 1, cells: 8, dataurl: "http://datainterface.eastmoney.com/EM_DataCenter/JS.aspx?type=FD&sty=SRB&st={sortType}&sr={sortRule}&p={page}&ps={pageSize}&js=var {jsname}={pages:(pc),data:[(x)]}{param}", pagesize: 50, pages: 1, mininterval: 100, loadtime: 1404194135127, theadfloat: true, theadTop: 32, beforedisplay: function () { if (_t.options && _t.options.nodetemp) _t.options.nodetemp.style.position = "relative"; }, beforeupdate: function () { }, afterdisplay: function () { }, checkdata: function (data) { return true; }, minWidth: 950, autoWidit: false, autoScrollRun: true, pageScrollRun: true, sortScrollRun: true, selectiscol: true, paramNoValueAdd: true, charset: "utf-8" }; if ('\v' == 'v') { document.execCommand("BackgroundImageCache", false, true) } Object.extend(options, opt || {}); _t.options = options; var _table = document.getElementById(_t.options.id); if (!_table) { alert("数据显示容器未找到"); return } else { } _t.maketr = _t.options.maketr; _t.options.table = _table; _t.options.tbody = _table.getElementsByTagName("tbody")[0]; _t.options.thead = _table.getElementsByTagName("thead")[0]; _t.tableXY = _t.findPos(_table); _t.contentY = 0; if (!_t.options.cellcount) _t.options.cellcount = _t.options.cells.length; _t.initUserUpdate(); var defJson = opt.defjson; var isrr = _t.initparam(); if (defJson && isrr && defJson.data && defJson.data.length > 0) { _t.options.data = defJson; _t.loadThead(); _t.display() } else if (defJson && isrr && defJson.result && defJson.result.data && defJson.result.data.length > 0) { _t.options.data = defJson.result; _t.loadThead(); _t.display() } else { setTimeout(function () { _t.update(), 20 }) } }, display: function () { var _t = this; _t.options.beforedisplay(_t); var resultdata = _t.options.data; if (resultdata.result) resultdata = resultdata.result; if (resultdata.pages > 0 && _t.options.page > resultdata.pages) _t.options.page = resultdata.pages; var _d = resultdata.data, _c = _t.options.cellcount, _p = _t.options.page || 1, _ps = _t.options.pagesize || 50, _body = _t.options.tbody; var trs = _body.childNodes; for (var i = trs.length - 1; i >= 0; i--) { _body.removeChild(trs[i]) } var rowTp = _body.insertRow(-1); for (var i = 0; i < _c; i++) { var cell = rowTp.insertCell(i) } if (_d && _d.length && _d[0].stats == undefined) { for (var i = 0; i < _d.length; i++) { var data; if (typeof (_d[i]) == "object") data = _d[i]; else data = _d[i].split(","); var row = rowTp.cloneNode(true); _body.appendChild(row); _t.maketr(row, data, i, ((_p - 1) * _ps + 1 + i)); if (_t.options.selectiscol && _t.options.sort.rowindex != 'undefined' && _t.options.sort.rowindex >= 0 && _t.options.sort.rowindex < _t.options.cellcount) if (row) row.cells[_t.options.sort.rowindex].className = "col" } } else { _t.showNoData() } //_body.removeChild(rowTp); if (rowTp.parentNode) { rowTp.parentNode.removeChild(rowTp); } _t.pageit(); //判断当前浏览器是否是IE6 var isIE6 = !-[1,] && !window.XMLHttpRequest; //浮动表头 if (!isIE6 && _t.options.theadfloat) _t.floatHeader(); _t.options.afterdisplay(_t) }, showLoading: function () { var _t = this; var _c = _t.options.theadcount || _t.options.cellcount, _body = _t.options.tbody; if (_body.innerHTML.indexOf('td') < 0) { var rowTp = _body.insertRow(-1); var cell = rowTp.insertCell(0); cell.setAttribute("colSpan", _c); cell.innerHTML = "<div style=\"color:#666;height:200px;line-height:200px;\">数据初始化...</div>"; _body.appendChild(rowTp) } if (typeof (_t.options.load_div) == "undefined") { var load_div = document.createElement("DIV"); var nodetemp = document.getElementById("zzdiv"); if (!nodetemp) { nodetemp = _t.options.table; while (nodetemp = nodetemp.parentNode) { if (nodetemp.className == "content") break } } _t.contentY = _t.findPos(nodetemp).y; load_div.style.width = nodetemp.clientWidth + "px"; nodetemp.style.position = "relative"; load_div.innerHTML = '<img src="/images/loading.gif" style=" padding-top: 100px;">'; if (_t.tools.browser.ie) { load_div.style.cssText = "top:0px;left:0px;position: absolute; width: 100%;background-color: #fff;z-index: 9999;filter: alpha(Opacity=80);-moz-opacity:0.5;opacity: 0.5; text-align: center;min-height: 300px; "; load_div.style.height = nodetemp.offsetHeight + "px" } else load_div.setAttribute("style", "top:0px;left:0px;position: absolute; width: 100%;height: 100%;background-color: #fff;z-index: 9999;filter: alpha(Opacity=80);-moz-opacity:0.5;opacity: 0.5; text-align: center;min-height: 300px; "); nodetemp.insertBefore(load_div, nodetemp.firstChild); _t.options.load_div = load_div; _t.options.nodetemp = nodetemp } else { if (_t.tools.browser.ie) { _t.options.load_div.style.height = _t.options.nodetemp.offsetHeight + "px" } _t.options.nodetemp.style.position = "relative"; } _t.options.load_div.style.display = "block" }, showNoData: function () { var _t = this, _c = _t.options.theadcount || _t.options.cellcount, _body = _t.options.tbody; ///_body.innerHTML = '';//清空表格 已改成下方方式兼容低版本ie var trs = _body.getElementsByTagName("tr"); for (var i = trs.length - 1; i >= 0; i--) { _body.removeChild(trs[i]) } var _h = _body.offsetHeight; _h = (_h < 200) ? 200 : _h; var trs = _body.getElementsByTagName("tr"); var rowTp = _body.insertRow(-1); var cell = rowTp.insertCell(0); cell.setAttribute("colSpan", _c); cell.innerHTML = "<div style=\"color:#666;height:" + _h + "px;line-height:200px;\">没有相关数据...</div>"; _body.appendChild(rowTp); if (typeof (_t.options.load_div) != "undefined") { _t.options.load_div.style.display = "none" } }, getCode: function (num) { var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; var codes = str.split(''); num = num || 6; var code = ""; for (var i = 0; i < num; i++) { code += codes[Math.floor(Math.random() * 52)] } return code }, parperUrl: function () { var _t = this, _param = _t.options.param; var param = ""; var tempfilter = []; for (var key in _param) { if (key == "newapi" || key =="ignoreQueryStr") { continue; } if (_t.options.paramNoValueAdd || _param[key].value != "") { if (_param[key].filter) { if (_param[key].value != "") tempfilter.push(_param[key].value); } else param += ("&" + _param[key].type + "=" + _param[key].value); } } if (tempfilter != "") { if (_param.newapi) param += ("&filter=" + tempfilter.join("")); else param += ("&filter=(" + tempfilter.join(" and ") + ")"); } _url = _t.options.dataurl; var _sort = "1"; _url = _url.replace("{pageSize}", _t.options.pagesize); _url = _url.replace("{page}", _t.options.page); if (_t.options.sort.multiple) { try { var sArr = _t.options.sort.multiple.split('|'), srArr = sArr[1].split(','); _url = _url.replace("{sortType}", sArr[0]); _url = _url.replace("{sortRule}", parseInt(srArr.reverse().join(''), 2));//二进制转十进制 } catch (ex) { _url = _url.replace("{sortType}", _t.options.sort.id); _url = _url.replace("{sortRule}", _t.options.sort.desc ? "-1" : "1"); } } else { _url = _url.replace("{sortType}", _t.options.sort.id); _url = _url.replace("{sortRule}", _t.options.sort.desc ? "-1" : "1"); _url = _url.replace("{sortDirection}", _t.options.sort.desc ? "desc" : "asc"); } _url = _url.replace("{param}", param); return _url }, update: function () { var _t = this; if (_t.options.beforeupdate(_t)) return; var jsname = _t.getCode(8), _url = _t.parperUrl(); _t.options.code = jsname; _url = _url.replace("{jsname}", jsname); _url += (_url.indexOf('?') > -1) ? "&rt=" : "?rt="; _url += parseInt(parseInt(new Date().getTime()) / 30000); _t.loadThead(); _t.scorllTop(); _t.showLoading(); var stime = (new Date).getTime(); _t.tools.loadJs(_url, _t.options.charset, function () { if (typeof (_t.options.load_div) != "undefined") { if (_t.options && _t.options.nodetemp) { _t.options.nodetemp.style.position = ""; } _t.options.load_div.style.display = "none" } if (!(eval("typeof " + jsname) == "undefined") || eval("typeof " + jsname == null)) { var loaddata = eval(jsname); if (jsname != _t.options.code) { return } if (_t.options.checkdata(loaddata) === false) { return } _t.options.data = loaddata; _t.display(); if ((new Date).getTime() - _t.starttime > 3000) _t.sendloadcilck(stime); } else { // alert("数据加载失败,请刷新页面重新尝试!") if (console && console.log) { console.log("tools.loadJs挂了稍后再改"); } } }) }, initUserUpdate: function () { var updateBtn = this.options.id + "_update", _t = this; if (document.getElementById(updateBtn)) { document.getElementById(updateBtn).onclick = function () { _t.update() } } }, autoUpdate: function () { var _t = this; var interval = function () { var now = new Date(); try { now = Eastmoney.Time.now() } catch (e) { } k = parseInt(_t.tools.dataFormat(now, "HHmm") * 1); var g = now.getDay(); if (!(k <= 924 || (k >= 1145 && k <= 1259) || k >= 1515 || g > 5)) { try { setTimeout(function () { _t.update() }, 100) } catch (e) { } } }; setInterval(interval, 1000 * 60 * 2) }, initparam: function () { var _t = this, _param = _t.options.param, _isp = false; var _st = _t.tools.GetQueryStr("st"); if (_st) { _t.options.sort.id = _st; _isp = true } var _sr = _t.tools.GetQueryStr("sr"); if (_sr) { _t.options.sort.desc = (_sr == "0" || _sr == "false"); _isp = true } for (var key in _param) { if (!(typeof (_param[key]) == 'object')) continue; var _p = document.getElementById(key); var p = _param[key]; if (_p) { if (!(_t.options.param.ignoreQueryStr == true)) { if (_t.tools.GetQueryStr(p.type) != null) { _t.options.param[key].value = _t.tools.GetQueryStr(p.type); _isp = true } } if (p.cname == 'option') { _t.tools.OptionValue(_p, _t.options.param[key].value); _p.onchange = function (_p, k) { var _v = _p.options[_p.selectedIndex].value; if (_v.toLowerCase() == _t.options.param[k].value.toLowerCase()) return; _t.options.param[k].value = _v; _t.options.page = 1; _t.update() }.binding(this, _p, key) } else if (p.cname == 'input') { } else { var _list = _p.getElementsByTagName(p.cname); var _totle = _list.length; for (var i = 0; i < _totle; i++) { var _l = _list[i], _v = _l.getAttribute("data"); if (_v == null) continue; if (_v.toLowerCase() == _t.options.param[key].value.toLowerCase() || decodeURIComponent(_v).toLowerCase() == _t.options.param[key].value.toLowerCase()) { _l.className = _t.options.param[key].cssclass || "at" } else { _l.className = "" } if (_l.getAttribute("disclick") != "1") _l.onclick = function (o, c, par, index, pdata) { var _ov = o.getAttribute("data"); if (_ov == null) return; if (_ov.toLowerCase() == _t.options.param[index].value.toLowerCase() || decodeURIComponent(_ov).toLowerCase() == _t.options.param[index].value.toLowerCase()) return; var _lis = par.getElementsByTagName(pdata.cname); for (var j = 0; j < _lis.length; j++) { if (_lis[j] == o) { _lis[j].className = _t.options.param[index].cssclass || "at"; _t.options.param[index].value = c } else { _lis[j].className = "" } } _t.options.page = 1; _t.update() }.binding(this, _l, _v, _p, key, p) } } } } return !_isp }, loadThead: function () { var _t = this, _thead = _t.options.thead, _cells = _t.options.cells; if (_t.options.scrollTable && _t.options.scrollTable.parentNode) _t.options.scrollTable.parentNode.removeChild(_t.options.scrollTable); var trs = _thead.getElementsByTagName("tr"); for (var i = trs.length - 1; i >= 0; i--) { _thead.removeChild(trs[i]) }//清空表头 _t.options.thIndex = 0; _t.loadTheadTr(_thead, _cells); trs = _thead.getElementsByTagName("tr"); if (trs.length > 0) { //设置表格的rowspan和colspan for (var i = trs.length - 1; i >= 0; i--) { var ths = trs[i].getElementsByTagName("th"); for (var j = 0; j < ths.length; j++) { var th = ths[j], cellCount = th.getAttribute("cellCount") || 1, hasChild = th.getAttribute("hasChild"), parentIndex = th.getAttribute("parentIndex"); if (hasChild == "1") th.colSpan = cellCount; else if (trs.length - i != 1) th.rowSpan = trs.length - i; if (null != parentIndex && "undefined" != parentIndex) { var parent = trs[i - 1].getElementsByTagName("th")[parentIndex]; cellCount = parseInt(cellCount) + parseInt(parent.getAttribute("cellCount") || 0); parent.setAttribute("cellCount", cellCount); } th.removeAttribute("cellCount"), th.removeAttribute("hasChild"), th.removeAttribute("parentIndex"); } } } var count = 0; var setSortIndex = function (cells) { if (cells && cells.length > 0) { for (var i = 0; i < cells.length; i++) { var c = cells[i].cells; if (_t.options.sort.id == cells[i].s) { _t.options.sort.rowindex = count; return -1; } if (c && c.length > 0) { if (setSortIndex(c) == -1) return -1;//终止循环 } else count++; } } }; setSortIndex(_cells); }, loadTheadTr: function (thead, cells) { var _t = this, tr = thead.insertRow(-1), childCells = []; for (var i = 0; i < cells.length; i++) { var cell = document.createElement("TH"), obj = cells[i]; cell.innerHTML = obj.n; cell.style.padding = "0px"; obj.parentIndex && cell.setAttribute("parentIndex", obj.parentIndex); if (obj.w && obj.w > 0) cell.style.width = obj.w + "px"; if (obj.s) { var _img = ''; if (_t.options.sort.id == obj.s) { var _img = (_t.options.sort.desc) ? "<img src=\"http://data.eastmoney.com/images/down.gif\" />" : "<img src=\"http://data.eastmoney.com/images/up.gif\" />"; _t.options.sort.rowindex = _t.options.thIndex; } if (_t.options.theadmoreurl) cell.innerHTML = '<a target="_blank" href="' + _t.options.theadmoreurl.replace(/{key}/g, obj.s) + '">' + obj.n + "" + _img + '</a>'; else if (/&img/.test(obj.n)) cell.innerHTML = "<span class=\"clickspan\">" + obj.n.replace('&img', _img) + "</span>"; else cell.innerHTML = "<span class=\"clickspan\">" + obj.n + "" + _img + "</span>"; if (!_t.options.theadmoreurl) cell.onclick = function (cellIndex, sortCont) { _t.options.sort.multiple = null; if (_t.options.sort.id == sortCont) _t.options.sort.desc = !_t.options.sort.desc; else _t.options.sort.id = sortCont, _t.options.sort.desc = true; _t.options.page = 1; //_t.options.autoScrollRun = true;//排序以后自动定位到表格 _t.update() }.binding(this, i, obj.s) } var c = obj.cells; if (c && c.length > 0) { for (var j = 0; j < c.length; j++) { c[j].parentIndex = i.toString(); childCells.push(c[j]); } cell.setAttribute("hasChild", "1"); } else { if (_t.options.sort.id == obj.s) { _t.options.sort.rowindex = _t.options.thIndex; } _t.options.thIndex++; } tr.appendChild(cell); } if (childCells.length > 0) { _t.loadTheadTr(thead, childCells); } }, floatHeader: function () { var _t = this; setTimeout(function () { var scroll_div = document.getElementById(_t.options.id + "-scroll-table"); if (!scroll_div) { var scroll_div = document.createElement("DIV"); } scroll_div.innerHTML = ""; _t.options.scrollTable = _t.options.table.cloneNode(false); if (_t.tools.browser.ie) { _t.options.scrollTable.style.zoom = 1 } _t.options.scrollTable.style.display = "none"; _t.options.scrollTable.style.zIndex = "999"; _t.options.scrollTableId = _t.options.scrollTable.id = _t.options.id + "-scroll"; _t.options.scrollTable.style.width = _t.options.table.clientWidth + "px"; scroll_div.id = _t.options.id + "-scroll-table"; scroll_div.appendChild(_t.options.scrollTable); _t.options.table.parentNode.insertBefore(scroll_div, _t.options.table.parentNode.firstChild); var scrollTHead = _t.options.thead.cloneNode(true); var oldCells = _t.options.thead.getElementsByTagName("th"); _t.options.scrollTable.appendChild(scrollTHead); var scrolth = scrollTHead.getElementsByTagName("th"); for (var k = 0; k < oldCells.length; k++) { scrolth[k].style.width = oldCells[k].clientWidth + "px"; scrolth[k].onclick = oldCells[k].onclick } _t.setScrollTBTop() }, 200) }, pageit: function () { var _t = this, p = _t.options.page || 1, pages = _t.options.data.pages || (_t.options.data.result ? _t.options.data.result.pages : 0) || 1; var _pn = _t.options.pagenav; if (_pn == null) { return } p = isNaN(p) ? 1 : parseInt(p); var _minipn = _t.options.miniPageNav; if (document.getElementById(_minipn)) { document.getElementById(_minipn).style.display = "block"; var mini_bs = document.getElementById(_minipn).getElementsByTagName("b"); if (mini_bs.length == 4) { mini_bs[3].innerHTML = "共<span class=\"red\">" + pages + "</span>页"; mini_bs[1].innerHTML = "上一页"; mini_bs[2].innerHTML = "下一页"; if (p <= 1) { mini_bs[1].className = "n1"; mini_bs[1].onclick = null; mini_bs[1].setAttribute("title", "") } else { mini_bs[1].className = "n2"; mini_bs[1].setAttribute("title", "转到第" + (p - 1) + "页"); mini_bs[1].onclick = function (n) { _t.go(p - 1) } } if (p >= pages) { mini_bs[2].className = "n1"; mini_bs[2].setAttribute("title", ""); mini_bs[2].onclick = null } else { mini_bs[2].className = "n2"; mini_bs[2].setAttribute("title", "转到第" + (p + 1) + "页"); mini_bs[2].onclick = function (n) { _t.go(p + 1) } } mini_bs[0].innerHTML = "当前第<span class=\"red\">" + p + "</span>页" } else if (mini_bs.length == 6) { mini_bs[5].innerHTML = "共<span class=\"red\">" + pages + "</span>页"; mini_bs[1].innerHTML = "首页"; mini_bs[2].innerHTML = "上一页"; mini_bs[3].innerHTML = "下一页"; mini_bs[4].innerHTML = "尾页"; if (p <= 1) { mini_bs[2].className = mini_bs[1].className = "n1"; mini_bs[2].onclick = mini_bs[1].onclick = null; mini_bs[2].setAttribute("title", ""); mini_bs[1].setAttribute("title", ""); } else { mini_bs[2].className = mini_bs[1].className = "n2"; mini_bs[2].setAttribute("title", "转到第" + (p - 1) + "页"); mini_bs[1].setAttribute("title", "转到首页"); mini_bs[2].onclick = function (n) { _t.go(p - 1); } mini_bs[1].onclick = function (n) { _t.go(1); } } if (p >= pages) { mini_bs[3].className = mini_bs[4].className = "n1"; mini_bs[3].setAttribute("title", ""); mini_bs[4].setAttribute("title", ""); mini_bs[3].onclick = mini_bs[4].onclick = null } else { mini_bs[3].className = mini_bs[4].className = "n2"; mini_bs[3].setAttribute("title", "转到第" + (p + 1) + "页"); mini_bs[4].setAttribute("title", "转到尾页"); mini_bs[3].onclick = function (n) { _t.go(p + 1); } mini_bs[4].onclick = function (n) { _t.go(pages); } } mini_bs[0].innerHTML = "当前第<span class=\"red\">" + p + "</span>页"; } } _pn = document.getElementById(_pn); if (!_pn) return; _pn.innerHTML = ""; if (_t.options.data.pages == 0 || p == pages && pages == 1) { _pn.parentNode.style.display = "none"; return } else { _pn.parentNode.style.display = "" } var _a = document.createElement("a"); _pn.appendChild(_a); _a.setAttribute("href", "javascript:void(0);"); _a.setAttribute("target", "_self"); _a.innerHTML = "上一页"; if (p == 1) { _a.className = "nolink"; _a.onclick = function () { return false } } else { _a.className = ""; _a.setAttribute("href", "javascript:void(0);"); _a.setAttribute("target", "_self"); _a.setAttribute("title", "转到第" + (p - 1) + "页"); _a.onclick = function () { _t.go(p - 1) } } var start = (p > 3) ? p - 2 : 1; start = (p > pages - 3 && pages > 4) ? pages - 4 : start; var end = (start == 1) ? 5 : start + 4; end = (end > pages) ? pages : end; if (start > 1) { var pre = ((start - 3) < 1) ? 1 : (start - 3); var _pre = ((start - 3) > pages) ? pages : (next + 3); _a = document.createElement("a"); _pn.appendChild(_a); _a.setAttribute("href", "javascript:void(0);"); _a.setAttribute("target", "_self"); _a.setAttribute("title", "转到第一页"); _a.onclick = function () { _t.go(1) }; _a.innerHTML = 1; if (pre > 1) { _a = document.createElement("a"); _pn.appendChild(_a); _a.setAttribute("href", "javascript:void(0);"); _a.setAttribute("target", "_self"); _a.setAttribute("title", "转到上一组"); _a.onclick = function () { _t.go(pre) }; _a.className = "next"; _a.innerHTML = "..." } } for (var i = start; i <= end; i++) { if (p == i) { _a = document.createElement("span"); _pn.appendChild(_a); _a.className = "at"; _a.innerHTML = i } else { _a = document.createElement("a"); _pn.appendChild(_a); _a.setAttribute("href", "javascript:void(0);"); _a.setAttribute("target", "_self"); _a.setAttribute("title", "转到第" + i + "页"); _a.onclick = function (n) { _t.go(n) }.binding(this, i); _a.innerHTML = i } } if (pages > end) { var next = ((end + 3) > pages) ? pages : (end + 3); var _nex = ((next + 3) > pages) ? pages : (next + 3); _a = document.createElement("a"); _pn.appendChild(_a); _a.setAttribute("href", "javascript:void(0);"); _a.setAttribute("target", "_self"); _a.setAttribute("title", "转到下一组"); _a.onclick = function () { _t.go(next) }; _a.className = "next"; _a.innerHTML = "..."; if (next < pages) { _a = document.createElement("a"); _pn.appendChild(_a); _a.setAttribute("href", "javascript:void(0);"); _a.setAttribute("target", "_self"); _a.setAttribute("title", "转到最后一页"); _a.onclick = function () { _t.go(pages) }; _a.innerHTML = pages } } _a = document.createElement("a"); _pn.appendChild(_a); _a.setAttribute("href", "javascript:void(0);"); _a.setAttribute("target", "_self"); if (p == pages) { _a.className = "nolink"; _a.innerHTML = "下一页"; _a.onclick = function () { return false } } else { _a.innerHTML = "下一页"; _a.onclick = function () { _t.go(p + 1) }; _a.setAttribute("title", "转到" + (p + 1) + "页") } _a = document.createElement("span"); _pn.appendChild(_a); _a.className = "txt"; _a.innerHTML = "&nbsp;&nbsp;转到"; _a = document.createElement("input"); _pn.appendChild(_a); _a.className = "txt"; _a.id = _t.options.pagenav + "gopage"; _a.value = p; _a = document.createElement("a"); _pn.appendChild(_a); _a.className = "btn_link"; _a.onclick = function () { if (document.getElementById(_t.options.pagenav + "gopage")) { var p = document.getElementById(_t.options.pagenav + "gopage").value; if (isNaN(p) || parseInt(p) < 0) { p = 1 } _t.go(p) } }; _a.innerHTML = "Go" }, go: function (p) { var _t = this; var max_pages = _t.options.data.pages || _t.options.data.result.pages; p = (p > max_pages) ? max_pages : p; p = (p < 1) ? 1 : p; _t.options.page = p; setTimeout(function () { //_t.options.autoScrollRun = true;//翻页以后自动定位到表格 _t.update() }, 0) }, scorllTop: function () { var next = true, _this = this, _topnode = document.getElementById("datatitle") || document.body; _rect = this.tools.rect(_topnode), _top = _rect.top, tmp_top = this.tools.getScrollTop(); _this.tools.wheel(function () { next = false }); var s = function (b, e) { var _t = this; _t.b = b; _t.e = e; _t.c = _t.e - _t.b; _t.d = ('\v' == 'v') ? 30 : 60; _t.t = 1; _t.w = function (t, b, c, d) { return -c * (t /= d) * (t - 2) + b }; function run() { _tmp = _t.w(_t.t, _t.b, _t.c, _t.d); window.scrollTo(0, _tmp); if (_t.t < _t.d) { _t.t++; setTimeout(run, 10) } else { _this.tools.wheel(function () { next = true }) } } run() }; if (_this.options.autoScrollRun) new s(tmp_top, _top) }, setScrollTBTop: function () { this.options.scrollTable = document.getElementById(this.options.scrollTableId); this.options.table = document.getElementById(this.options.id); var _t = this; var isIE6 = this.tools.browser.ie6; var isIE7 = this.tools.browser.ie7; var isIE = this.tools.browser.msie; if (isIE6) { var _body = document.getElementsByTagName('body')[0]; var _html = document.getElementsByTagName('html')[0]; if (_body.style.backgroundAttachment != "fixed") { _html.style.backgroundImage = "url(about:blank)"; _html.style.backgroundAttachment = "fixed" } } if (window.innerWidth) _t.options.winWidth = window.innerWidth; else if ((document.body) && (document.body.clientWidth)) _t.options.winWidth = document.body.clientWidth; if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth) { _t.options.winWidth = document.documentElement.clientWidth } _t.tools.addEvent(window, "scroll", function () { var scrollXY = _t.getScroll(); //获取表格相对于window的位置 var pos = _t.getElementPos(_t.options.id); //处理一个页面多个表格的bug if (pos.x == 0) return; var _t_scrollTable = _t.options.scrollTable; if (_t_scrollTable) { if (scrollXY.y >= pos.y) { if (isIE6) { var temptop = document.documentElement.scrollTop || document.body.scrollTop; //temptop = temptop - _t.contentY; _t_scrollTable.style.display = "block"; _t_scrollTable.style.position = "absolute"; if (document.getElementById("alllink")) { //有左侧导航的页面 _t_scrollTable.style.top = (temptop + 67).toString() + "px"; } else { //无左侧导航的页面 _t_scrollTable.style.top = (temptop + 33).toString() + "px"; } } else { _t_scrollTable.style.display = "block"; _t_scrollTable.style.position = "fixed"; if (_t.options.scrolltop) _t_scrollTable.style.top = _t.options.scrolltop + "px"; else _t_scrollTable.style.top = _t.options.theadTop + "px" } } else { _t_scrollTable.style.display = "none" } if (_t.options.winWidth < _t.options.minWidth) { if (isIE6) { _t_scrollTable.style.left = "auto"; //_t_scrollTable.style.left = pos.x + (-document.body.scrollLeft || -document.documentElement.scrollLeft) + "px"; } else if (isIE7) { _t_scrollTable.style.left = pos.x + (-document.body.scrollLeft || -document.documentElement.scrollLeft) - 2 + "px"; } else { //_t_scrollTable.style.left = "auto" _t_scrollTable.style.left = pos.x + (-document.body.scrollLeft || -document.documentElement.scrollLeft) + "px"; } } else { if (isIE6) { _t_scrollTable.style.left = "auto"; } else if (isIE7) { _t_scrollTable.style.left = pos.x + (-document.body.scrollLeft || -document.documentElement.scrollLeft) - 2 + "px"; } else { _t_scrollTable.style.left = pos.x + (-document.body.scrollLeft || -document.documentElement.scrollLeft) + "px"; } } //浮动表头相对于显示器左上角的位置 var _t_scrollTable_offsetTop = 0; if (_t_scrollTable.style.top) { if (isIE) { _t_scrollTable_offsetTop = parseInt((_t_scrollTable.style.top).replace("px", "")) + scrollXY.y; if (isIE6) { _t_scrollTable_offsetTop = parseInt((_t_scrollTable.style.top).replace("px", "")); } else if (isIE7) { _t_scrollTable_offsetTop += 2; } } else { _t_scrollTable_offsetTop = _t.getElementPos(_t_scrollTable.id).y; } } //表格的高度 var table_height = _t.options.table.clientHeight; var scrollTable_thead_height = 0; if (_t_scrollTable && _t_scrollTable.getElementsByTagName("thead")[0]) { scrollTable_thead_height = _t_scrollTable.getElementsByTagName("thead")[0].offsetHeight; } //浮动表头滚动到表格的最下方隐藏 if (_t_scrollTable_offsetTop && table_height && (_t_scrollTable_offsetTop > (pos.y + table_height - scrollTable_thead_height))) { _t_scrollTable.style.display = "none"; } } }); _t.tools.addEvent(window, "resize", function () { if (window.innerWidth) _t.options.winWidth = window.innerWidth; else if ((document.body) && (document.body.clientWidth)) _t.options.winWidth = document.body.clientWidth; if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth) { _t.options.winWidth = document.documentElement.clientWidth } //window.onscroll(); if (_t.options.autoWidit) { _t.options.scrollTable.style.width = _t.options.table.clientWidth + "px"; var oldCells = _t.options.thead.getElementsByTagName("th"); var scrolth = _t.options.scrollTable.getElementsByTagName("thead")[0].getElementsByTagName("th"); for (var k = 0; k < oldCells.length; k++) { scrolth[k].style.width = oldCells[k].clientWidth + "px" } } if (document.getElementById("mainflow")) { if (_t.options.winWidth < _t.options.minWidth) document.getElementById("mainflow").style.width = "100%"; else document.getElementById("mainflow").style.width = "96%"; } }); }, getElementPos: function (elementId) { var ua = navigator.userAgent.toLowerCase(); var isOpera = (ua.indexOf('opera') != -1); var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof var el = document.getElementById(elementId); if (!el || !(el.parentNode) || el.parentNode === null || el.style.display == 'none') { return false; } var parent = null; var pos = []; var box; if (el.getBoundingClientRect) //IE { box = el.getBoundingClientRect(); var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop); var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft); return { x: box.left + scrollLeft, y: box.top + scrollTop }; } else if (document.getBoxObjectFor) // gecko { box = document.getBoxObjectFor(el); var borderLeft = (el.style.borderLeftWidth) ? parseInt(el.style.borderLeftWidth) : 0; var borderTop = (el.style.borderTopWidth) ? parseInt(el.style.borderTopWidth) : 0; pos = [box.x - borderLeft, box.y - borderTop]; } else // safari & opera { pos = [el.offsetLeft, el.offsetTop]; parent = el.offsetParent; if (parent != el) { while (parent) { pos[0] += parent.offsetLeft; pos[1] += parent.offsetTop; parent = parent.offsetParent; } } if (ua.indexOf('opera') != -1 || (ua.indexOf('safari') != -1 && el.style.position == 'absolute')) { pos[0] -= document.body.offsetLeft; pos[1] -= document.body.offsetTop; } } if (el.parentNode) { parent = el.parentNode; } else { parent = null; } while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML') { // account for any scrolled ancestors pos[0] -= parent.scrollLeft; pos[1] -= parent.scrollTop; if (parent.parentNode) { parent = parent.parentNode; } else { parent = null; } } return { x: pos[0], y: pos[1] }; }, getFromat: function (v0, v1, c0) { if (v0 > c0) { return "<span class=\"red\">" + v1 + "</span>" } else if (v0 < c0) { return "<span class=\"green\">" + v1 + "</span>" } else { return "<span>" + v1 + "</span>" } }, getScroll: function (node) { var doc = node ? node.ownerDocument : document; var top = doc.documentElement.scrollTop || doc.body.scrollTop; var left = doc.documentElement.scrollLeft || doc.body.scrollLeft; return { "x": left, "y": top } }, findPos: function (obj) { var curleft = obj.offsetLeft || 0; var curtop = obj.offsetTop || 0; while (obj = obj.offsetParent) { curleft += eval(obj.offsetLeft); curtop += obj.offsetTop } return { "x": curleft, "y": curtop } }, tools: { loadJs: function (url, charset, callback) { var _js = document.createElement('script'); var _this = this; if (!(charset == null || charset == '')) { _js.setAttribute('charset', charset) } _js.setAttribute('type', 'text/javascript'); _js.setAttribute('src', url); document.getElementsByTagName('head')[0].appendChild(_js); _js.onload = _js.onreadystatechange = function () { if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") { callback(_js); _this.removeJs(_js) } else { } } }, removeJs: function (o) { var _js = (typeof o == "string") ? document.getElementById(o) : o; _js.onload = _js.onreadystatechange = null; try { _js.parentNode.removeChild(_js) } catch (e) { } }, dataFormat: function (date, part) { if (typeof date == "undefined") date = new Date(); var datecopy; var redate = ""; part = (part == null) ? "yyyy-MM-dd HH:mm:ss" : part; var y = date.getFullYear(); var M = date.getMonth() + 1; var d = date.getDate(); var H = date.getHours(); var m = date.getMinutes(); var s = date.getSeconds(); var MM = (M > 9) ? M : "0" + M; var dd = (d > 9) ? d : "0" + d; var HH = (H > 9) ? H : "0" + H; var mm = (m > 9) ? m : "0" + m; var ss = (s > 9) ? s : "0" + s; redate = part.replace("yyyy", y).replace("MM", MM).replace("dd", dd).replace("HH", HH).replace("mm", mm).replace("ss", ss).replace("M", M).replace("d", d).replace("H", H).replace("m", m).replace("s", s); return redate }, browser: (function () { var ua = window.navigator.userAgent.toLowerCase(); var b = { msie: /msie/.test(ua) && !/opera/.test(ua), opera: /opera/.test(ua), safari: /webkit/.test(ua) && !/chrome/.test(ua), firefox: /firefox/.test(ua), chrome: /chrome/.test(ua) }; var vMark = ""; for (var i in b) { if (b[i]) { vMark = "safari" == i ? "version" : i; break } } b.version = vMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0"; b.ie = b.msie; b.ie6 = b.msie && parseInt(b.version, 10) == 6; b.ie7 = b.msie && parseInt(b.version, 10) == 7; b.ie8 = b.msie && parseInt(b.version, 10) == 8; return b })(), getScrollTop: function (node) { var doc = node ? node.ownerDocument : document; return doc.documentElement.scrollTop || doc.body.scrollTop }, getScrollLeft: function (node) { var doc = node ? node.ownerDocument : document; return doc.documentElement.scrollLeft || doc.body.scrollLeft }, contains: document.defaultView ? function (a, b) { return !!(a.compareDocumentPosition(b) & 16) } : function (a, b) { return a != b && a.contains(b) }, rect: function (node) { var left = 0, top = 0, right = 0, bottom = 0, B = this.browser, D = this; if (!node.getBoundingClientRect || B.ie8) { var n = node; while (n) { left += n.offsetLeft, top += n.offsetTop; n = n.offsetParent }; right = left + node.offsetWidth; bottom = top + node.offsetHeight } else { var rect = node.getBoundingClientRect(); left = right = D.getScrollLeft(node); top = bottom = D.getScrollTop(node); left += rect.left; right += rect.right; top += rect.top; bottom += rect.bottom }; return { "left": left, "top": top, "right": right, "bottom": bottom } }, wheel: function (callback) { if (window.addEventListener) { window.addEventListener('DOMMouseScroll', callback, false) } else { window.onmousewheel = document.onmousewheel = callback } }, GetQueryStr: function (name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return decodeURIComponent(r[2]).replace(/&/g,""); return null }, OptionValue: function (s, v) { for (var i = 0; i < s.options.length; i++) { if ((s.options[i].value.indexOf(v)) != -1 && v != '') { s.options[i].selected = true; break } } }, addEvent: function (obj, type, fn) { if (obj.attachEvent) { obj['e' + type + fn] = fn; obj[type + fn] = function () { obj['e' + type + fn](window.event); } obj.attachEvent('on' + type, obj[type + fn]); } else obj.addEventListener(type, fn, false); } }, sendloadcilck: function (stime) { //加埋点 try { //WebSiteStat("view") //网站埋点 var bid = "", uid = ""; var bid_t = document.cookie.match(new RegExp("(^| )qgqp_b_id=([^;]*)(;|$)")); var uid_t = document.cookie.match(new RegExp("(^| )uidal=([^;]*)(;|$)")); if (null != bid_t) bid = decodeURIComponent(bid_t[2]); if (null != uid_t) uid = decodeURIComponent(uid_t[2]).substring(0, 16); var mdparam = '{"lastModifyTime":"_lastModifyTime_","type":"view","uid":"' + uid + '","bid":"' + bid + '","referer":"' + document.referrer.substring(0, 400) + '","pagetype":"","pageitem":"","browser_height":' + document.documentElement.clientHeight + ',"url":"' + self.location.href.substring(0, 400) + '","loadtime":' + ((new Date).getTime() - stime) + ',"domainId":"' + self.location.host + '"}' var timg = document.createElement("img"); timg.src = "//huaxiang.eastmoney.com/CommonRecommend.png?json=" + encodeURIComponent(mdparam), timg.style.display = "none", document.body.appendChild(timg), setTimeout(function () { document.body.removeChild(timg) }, 2000) //大数据埋点 window.emtjLaunch && window.emtjLaunch(); } catch (error) { } } }); Function.prototype.binding = function () { var __m = this, object = arguments[0], args = new Array(); for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); } return function () { return __m.apply(object, args); } }; // 获取沪深股市市场(上证股票1|股证股票2) function GetMktByCode(code) { if (code.Length < 3) return "sh"; var one = code.substr(0, 1); var three = code.substr(0, 3); if (one == "5" || one == "6" || one == "9") { return "sh"; } else { if (three == "009" || three == "126" || three == "110" || three == "201" || three == "202" || three == "203" || three == "204") { return "sh"; } else { return "sz"; } } } ```
List.sort 比较器排序
查询到的数据放入List<T>中, T为实体类,假设有两个字段A和B 当 A==1时将其排序靠前,并按照B字段排序 也就说,A==1的数据,要在A!=1的数据前面, A==1的数据还要再根据B字段排序,请不吝赐教。
python中sort的key=len的len是什么
b_list = [’Python’,’Swift’,’Ruby’,’Go’,’Kotlin’,'Erlang'] b_list.sort(key=len) print(b_list) # [’Go’,’Ruby’,’Swift’,'Erlang’,’Kotlin’,’Python']
Collections.sort排序的问题
一个List里只有两个AppEntity对象,这两个对象分别都有isRecommend熟悉,一个是true,一个是false。现在我要将true的那个对象放在最前面。下面排序条件怎么写才对?由于我对Collections这个排序的原理不是很懂,麻烦告知一下。谢谢。 ``` Collections.sort(list, new Comparator<AppEntity>() { @Override public int compare(AppEntity lhs, AppEntity rhs) { if (rhs.isRecommend != lhs.isRecommend) { return 0; } return -1; } }); ```
Scramble Sort 程序的编写实现
Description In this problem you will be given a series of lists containing both words and numbers. The goal is to sort these lists in such a way that all words are in alphabetical order and all numbers are in numerical order. Furthermore, if the nth element in the list is a number it must remain a number, and if it is a word it must remain a word. Input The input will contain multiple lists, one per line. Each element of the list will be separated by a comma followed a space, and the list will be terminated by a period. The input will be terminated by a line containing only a single period. Output For each list in the input, output the scramble sorted list, separating each element of the list with a comma followed by a space, and ending the list with a period. Sample Input 0. banana, strawberry, OrAnGe. Banana, StRaWbErRy, orange. 10, 8, 6, 4, 2, 0. x, 30, -20, z, 1000, 1, Y. 50, 7, kitten, puppy, 2, orangutan, 52, -100, bird, worm, 7, beetle. . Sample Output 0. banana, OrAnGe, strawberry. Banana, orange, StRaWbErRy. 0, 2, 4, 6, 8, 10. x, -20, 1, Y, 30, 1000, z. -100, 2, beetle, bird, 7, kitten, 7, 50, orangutan, puppy, 52, worm.
python如何对给定的三个整数,按从小到大排序,用sort语句。
for (num1, num2, num3) in [(-231, -321, 123), (100, 0, -99), (-980, -1002, -1), (6,1,2017)]: L=[num1,num2,num3] #这里为什么会出错?如何对给定的三个整数,按从小到大排序,用sort语句。
今天用sort函数对list排序,我传的是三个参数,却出现了这种报错,没听过sort要四个参数的啊
error C2780: “void std::_Sort(_RanIt,_RanIt,_Diff,_Pr)”: 应输入 4 个参数,却提供了 3 个
利用for循环实现插入排序,第一个元素无法交换。
代码: ``` list_sort = [3, 2, 5, 8, 4, 7, 6, 9, 0, 3, 2, 5, 8, 4, 7, 6, 9, 0] def insert_sort(list_sort): """Increasing insert sort""" length = len(list_sort) for i in range(1, length): temp = list_sort[i] for j in range(i-1, -1, -1): if temp < list_sort[j]: print(temp, 'change', list_sort[j]) list_sort[j+1] = list_sort[j] else: break list_sort[j+1] = temp print(list_sort) return list_sort ``` 结果: ('insert sort: ', [3, 0, 0, 2, 2, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9]) 截图: ![图片说明](https://img-ask.csdn.net/upload/201911/27/1574818844_666340.png) 问题说明:结果输出表明第一次交换发生在第一个元素3和第二个元素2之间,但是结果并没有交换。除了这次交换,其余的交换结果表明交换逻辑没有什么问题。这是怎么回事呢?
python为什么使用sorted和sort输出结果不一样
在刷算法题的时候碰到了一个问题 Given an array of integers A sorted in non-decreasing order, return an array of the squares of each number, also in sorted non-decreasing order. ``` B = [] for n in A: B.append(n**2) return B.sort() ``` 和 ``` B = [] for n in A: B.append(n**2) return sorted(B) ``` 输出结果不一样是为什么 第一个B.sort()输出是[]空列表
在sort函数中的使用lambda进行条件排序导致list被置0
本来写了一个def,想着dug一下,然后就发现问题了。 def DeleteArraylementsAccordingToPercentage(lorddata,percentage,name): #按照百分比删除数组元素,并返回第二个数据 array = [] openpklfile = open(lorddata + '.pkl','rb') start = pickle.load(openpklfile) start.sort(start,key = lambda x:x[1]) lenth = len(start) * float(percentage) for i in range(lenth): del start[i] savefile = open(name + '.pkl', 'wb') pickle.dump(start, savefile) savefile.close() openpklfile.close()![图片说明](https://img-ask.csdn.net/upload/201806/04/1528093017_695621.png)
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
深析Synchronized关键字(小白慎入,深入jvm源码,两万字长文)
目录一、synchronized基础1.1synchronized的使用1.1示例1.2验证1.2.1 普通方法和代码块中使用this是同一个监视器(锁),即某个具体调用该代码的对象1.2.2 静态方法和代码块中使用该类的class对象是同一个监视器,任何该类的对象调用该段代码时都是在争夺同一个监视器的锁定1.2、synchronized的特点二、synchronized进阶2.1对象头2.2sy
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
超全Python图像处理讲解(多图预警)
文章目录Pillow模块讲解一、Image模块1.1 、打开图片和显示图片1.2、创建一个简单的图像1.3、图像混合(1)透明度混合(2)遮罩混合1.4、图像缩放(1)按像素缩放(2)按尺寸缩放1.5、图像的剪切与粘贴(1)图像粘贴(2)裁剪图像1.4、图像旋转和格式转换(1)图像旋转(2)格式转换1.5、分离和合并(1)分离(2)合并二、ImageFilter2.1、高斯模糊2.2、其它滤镜三、...
20道你必须要背会的微服务面试题,面试一定会被问到
这篇博客总结了面试中最常见的微服务面试题,相信对你有所帮助。
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
HTTP性能极限优化
无论你在做前端、后端还是运维,HTTP都是不得不打交道的网络协议。它是最常用的应用层协议,对它的优化,既能通过降低时延带来更好的体验性,也能通过降低资源消耗带来更高的并发性。 可是,学习HTTP不久的同学,很难全面说出HTTP的所有优化点。这既有可能是你没好好准备过大厂的面试:-),也有可能你没有加入一个快速发展的项目,当产品的用户量不断翻番时,需求会倒逼着你优化HTTP协议。 这篇文章是根据...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
没用过这些 IDEA 插件?怪不得写代码头疼
使用插件,可以提高开发效率。对于开发人员很有帮助。这篇博客介绍了IDEA中最常用的一些插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
一份王者荣耀的英雄数据报告
咪哥杂谈本篇阅读时间约为 6 分钟。1前言前一阵写了关于王者的一些系列文章,从数据的获取到数据清洗,数据落地,都是为了本篇的铺垫。今天来实现一下,看看不同维度得到的结论。2环境准备本次实...
推荐一些有趣的在线编程游戏
1.Robocode 让坦克们互相博弈的游戏,你可以看到它们飞奔,碾碎一切挡道的东西。机器人配有雷达与火炮,选手在躲避对手进攻的同时攻击对手,以此来较量得分的多少。这个游戏很有意思,曾经令我沉迷… 你可以用Java、Scala、C#等编程语言,编写人工智能程序,驱动机器人。 2.Code Combat Code Combat是一款学习编程的角色扮演游戏。每一关都用任务的形式设立目标,用实时的反馈...
工作十年的数据分析师被炒,没有方向,你根本躲不过中年危机
2020年刚刚开始,就意味着离职潮高峰的到来,我身边就有不少人拿着年终奖离职了,而最让我感到意外的,是一位工作十年的数据分析师也离职了,不同于别人的主动辞职,他是被公司炒掉的。 很多人都说数据分析是个好饭碗,工作不累薪资高、入门简单又好学。然而今年34的他,却真正尝到了中年危机的滋味,平时也有不少人都会私信问我: 数据分析师也有中年危机吗?跟程序员一样是吃青春饭的吗?该怎么保证自己不被公司淘汰...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
张朝阳回应迟到 1 分钟罚 500:资本家就得剥削员工
loonggg读完需要2分钟速读仅需 1 分钟大家我,我是你们的校长。前几天,搜狐的董事局主席兼 CEO 张朝阳和搜狐都上热搜了。原因很简单,就是搜狐出了“考勤新规”。一封搜狐对员工发布...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
立即提问